carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package release
2
3import (
4 "context"
5 "crypto/ed25519"
6 "github.com/carlosframework/platform/internal/hostwrite"
7 "github.com/carlosframework/platform/internal/registry"
8)
9
10// CheckRouteReleaseIdentity authenticates the channel before accepting either
11// its current target or the installed rollback target named in signed history.
12func CheckRouteReleaseIdentity(ctx context.Context, s Store, pub ed25519.PublicKey, rt registry.Route, id hostwrite.Identity) error {
13 if id.Config != "" || id.Release == "" {
14 return hostwrite.ErrUnavailable
15 }
16 pointer, err := Channel(ctx, s, pub, RouteAccount(rt), rt.App, routeChannel(rt))
17 if err != nil {
18 return err
19 }
20 versions := []string{pointer.Version}
21 for _, v := range pointer.History {
22 if v == rt.Version && v != pointer.Version {
23 versions = append(versions, v)
24 }
25 }
26 for _, v := range versions {
27 m, err := GetManifest(ctx, s, RouteAccount(rt), rt.App, v)
28 if err != nil {
29 return err
30 }
31 expected, err := releaseIdentity(m)
32 if err != nil {
33 return err
34 }
35 if id == expected {
36 return nil
37 }
38 }
39 return hostwrite.ErrUnavailable
40}
41