package appconfig import ( "context" "crypto/ecdh" "github.com/carlosframework/platform/internal/instancekey" "github.com/carlosframework/platform/internal/registry" "github.com/carlosframework/platform/internal/release" ) // ConfiguredKeyDigest is the SHA-256 of the CARLOS_INSTANCE_KEY rt's // configuration in the bucket renders now, "" when it renders none: the // same merge and renderer SyncExec writes .config.env with // (LoadMergedHostVersions, RenderEnv), read fresh rather than from the // box's last sync. A replica launch whose configured key is not this // digest is refused (instance-key plan ruling 27): a configuration change // is in flight, and the home may already hold the new key. The value // never leaves this function. func ConfiguredKeyDigest(ctx context.Context, s release.Store, priv *ecdh.PrivateKey, rt registry.Route) (string, error) { m, _, err := LoadMergedHostVersions(ctx, s, release.RouteAccount(rt), rt.App, rt.Environment, rt.Host) if err != nil || m == nil { return "", err } rendered, err := RenderEnv(m, priv, routeBinding(rt)) if err != nil { return "", err } key, _ := instancekey.Effective(instancekey.ParseEnv(rendered), nil) if key == "" { return "", nil } return instancekey.Digest(key), nil }