carlos / platform Public

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

Plain git — no account needed to clone.

Download

Download this file

1package appconfig
2
3import (
4 "context"
5 "crypto/ecdh"
6 "github.com/carlosframework/platform/internal/hostwrite"
7 "github.com/carlosframework/platform/internal/registry"
8 "github.com/carlosframework/platform/internal/release"
9)
10
11// CheckRenderedIdentity recomputes the exact current ordinary render. It is
12// read-only and uses the same merge, binding and encoding as the config writers.
13func CheckRenderedIdentity(ctx context.Context, s release.Store, priv *ecdh.PrivateKey, rt registry.Route, id hostwrite.Identity) error {
14 if id.Config == "" || id.Release != "" {
15 return hostwrite.ErrUnavailable
16 }
17 m, versions, err := LoadMergedHostVersions(ctx, s, release.RouteAccount(rt), rt.App, rt.Environment, rt.Host)
18 if err != nil {
19 return err
20 }
21 var rendered []byte
22 if m != nil {
23 rendered, err = RenderEnv(m, priv, routeBinding(rt))
24 if err != nil {
25 return err
26 }
27 if rt.Unit != "" {
28 rendered = applyAgentVars(rendered)
29 } else if rt.Addr != "" {
30 rendered = append([]byte(execAddrConfigHeader), rendered...)
31 }
32 }
33 defaultPresent := m != nil
34 if rt.Unit != "" {
35 defaultPresent = versions.Default != ""
36 }
37 expected := renderedIdentity(rendered, defaultPresent, rt.Environment != "", versions.Overlay != "")
38 if id != expected {
39 return hostwrite.ErrUnavailable
40 }
41 return nil
42}
43