package appconfig import ( "context" "crypto/ecdh" "github.com/carlosframework/platform/internal/hostwrite" "github.com/carlosframework/platform/internal/registry" "github.com/carlosframework/platform/internal/release" ) // CheckRenderedIdentity recomputes the exact current ordinary render. It is // read-only and uses the same merge, binding and encoding as the config writers. func CheckRenderedIdentity(ctx context.Context, s release.Store, priv *ecdh.PrivateKey, rt registry.Route, id hostwrite.Identity) error { if id.Config == "" || id.Release != "" { return hostwrite.ErrUnavailable } m, versions, err := LoadMergedHostVersions(ctx, s, release.RouteAccount(rt), rt.App, rt.Environment, rt.Host) if err != nil { return err } var rendered []byte if m != nil { rendered, err = RenderEnv(m, priv, routeBinding(rt)) if err != nil { return err } if rt.Unit != "" { rendered = applyAgentVars(rendered) } else if rt.Addr != "" { rendered = append([]byte(execAddrConfigHeader), rendered...) } } defaultPresent := m != nil if rt.Unit != "" { defaultPresent = versions.Default != "" } expected := renderedIdentity(rendered, defaultPresent, rt.Environment != "", versions.Overlay != "") if id != expected { return hostwrite.ErrUnavailable } return nil }