v0.26.1 — show auto-generated values on deploy page
- Pre-generate domain + secret field values when deploy page loads, so user sees actual domain and masked passwords (with reveal button) before deploying. Same values submitted as hidden inputs → saved to app.yaml. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -114,12 +114,17 @@ func (m *Manager) DeployStack(req DeployRequest) (string, error) {
|
||||
value = m.cfg.Customer.Domain
|
||||
|
||||
case "secret":
|
||||
// Always auto-generate, user never sees these
|
||||
generated, err := generateValue(field.Generate)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("generating %s: %w", field.EnvVar, err)
|
||||
// Use pre-generated value if provided by the deploy page (same value the user saw),
|
||||
// otherwise fall back to generating a fresh one.
|
||||
if userVal, ok := req.Values[field.EnvVar]; ok && userVal != "" {
|
||||
value = userVal
|
||||
} else {
|
||||
generated, err := generateValue(field.Generate)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("generating %s: %w", field.EnvVar, err)
|
||||
}
|
||||
value = generated
|
||||
}
|
||||
value = generated
|
||||
|
||||
case "password":
|
||||
// Password fields MUST be filled by the user (via typing or Generálás button).
|
||||
@@ -366,6 +371,37 @@ func (m *Manager) LoadAppConfigByName(stackName string) *AppConfig {
|
||||
return LoadAppConfig(stackDir)
|
||||
}
|
||||
|
||||
// PreviewDeployValues generates the auto-field values that will be used at deploy time:
|
||||
// domain from controller config and freshly-generated secrets. These values are shown
|
||||
// on the deploy page so the user can see (and note down) their passwords before deploying.
|
||||
// Pass them back in DeployRequest.Values so the same values are saved to app.yaml.
|
||||
func (m *Manager) PreviewDeployValues(name string) (map[string]string, error) {
|
||||
stack, ok := m.GetStack(name)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("stack %q not found", name)
|
||||
}
|
||||
stackDir := filepath.Dir(stack.ComposePath)
|
||||
meta := LoadMetadata(stackDir)
|
||||
|
||||
result := make(map[string]string)
|
||||
for _, field := range meta.DeployFields {
|
||||
switch field.Type {
|
||||
case "domain":
|
||||
result[field.EnvVar] = m.cfg.Customer.Domain
|
||||
case "secret":
|
||||
if field.Generate == "" {
|
||||
continue
|
||||
}
|
||||
val, err := generateValue(field.Generate)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("generating preview for %s: %w", field.EnvVar, err)
|
||||
}
|
||||
result[field.EnvVar] = val
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// --- App config persistence ---
|
||||
|
||||
func LoadAppConfig(stackDir string) *AppConfig {
|
||||
|
||||
Reference in New Issue
Block a user