diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php index 31b74d6c76..8054462e9a 100644 --- a/app/Http/Controllers/Api/ApplicationsController.php +++ b/app/Http/Controllers/Api/ApplicationsController.php @@ -4038,7 +4038,7 @@ class ApplicationsController extends Controller 'is_preview' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is used in preview deployments.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ), @@ -4191,7 +4191,7 @@ class ApplicationsController extends Controller 'is_preview' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is used in preview deployments.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ], @@ -4381,7 +4381,7 @@ class ApplicationsController extends Controller 'is_preview' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is used in preview deployments.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ), diff --git a/app/Http/Controllers/Api/DatabasesController.php b/app/Http/Controllers/Api/DatabasesController.php index 43afd00019..ddc09fb1c8 100644 --- a/app/Http/Controllers/Api/DatabasesController.php +++ b/app/Http/Controllers/Api/DatabasesController.php @@ -3924,7 +3924,7 @@ class DatabasesController extends Controller 'value' => ['type' => 'string', 'description' => 'The value of the environment variable.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ), @@ -4067,7 +4067,7 @@ class DatabasesController extends Controller 'value' => ['type' => 'string', 'description' => 'The value of the environment variable.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ], @@ -4199,7 +4199,7 @@ class DatabasesController extends Controller 'value' => ['type' => 'string', 'description' => 'The value of the environment variable.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ), diff --git a/app/Http/Controllers/Api/ServicesController.php b/app/Http/Controllers/Api/ServicesController.php index c939964cdf..90720773b5 100644 --- a/app/Http/Controllers/Api/ServicesController.php +++ b/app/Http/Controllers/Api/ServicesController.php @@ -1490,7 +1490,7 @@ class ServicesController extends Controller 'value' => ['type' => 'string', 'description' => 'The value of the environment variable.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ), @@ -1633,7 +1633,7 @@ class ServicesController extends Controller 'value' => ['type' => 'string', 'description' => 'The value of the environment variable.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ], @@ -1765,7 +1765,7 @@ class ServicesController extends Controller 'value' => ['type' => 'string', 'description' => 'The value of the environment variable.'], 'is_literal' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is a literal, nothing espaced.'], 'is_multiline' => ['type' => 'boolean', 'description' => 'The flag to indicate if the environment variable is multiline.'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], ], ), ), diff --git a/app/Http/Controllers/Api/SharedEnvironmentVariablesController.php b/app/Http/Controllers/Api/SharedEnvironmentVariablesController.php index e3951796d7..b8eb220640 100644 --- a/app/Http/Controllers/Api/SharedEnvironmentVariablesController.php +++ b/app/Http/Controllers/Api/SharedEnvironmentVariablesController.php @@ -22,7 +22,7 @@ use OpenApi\Attributes as OA; new OA\Property(property: 'value', type: 'string', nullable: true), new OA\Property(property: 'is_literal', type: 'boolean'), new OA\Property(property: 'is_multiline', type: 'boolean'), - new OA\Property(property: 'is_shown_once', type: 'boolean', description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'), + new OA\Property(property: 'is_shown_once', type: 'boolean', description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'), new OA\Property(property: 'comment', type: 'string', maxLength: 256, nullable: true), ], )] @@ -35,7 +35,7 @@ use OpenApi\Attributes as OA; new OA\Property(property: 'value', type: 'string', nullable: true), new OA\Property(property: 'is_literal', type: 'boolean'), new OA\Property(property: 'is_multiline', type: 'boolean'), - new OA\Property(property: 'is_shown_once', type: 'boolean', description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'), + new OA\Property(property: 'is_shown_once', type: 'boolean', description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'), new OA\Property(property: 'comment', type: 'string', maxLength: 256, nullable: true), ], )] diff --git a/app/Livewire/Project/Shared/EnvironmentVariable/Show.php b/app/Livewire/Project/Shared/EnvironmentVariable/Show.php index b5dbdf5007..e12006a964 100644 --- a/app/Livewire/Project/Shared/EnvironmentVariable/Show.php +++ b/app/Livewire/Project/Shared/EnvironmentVariable/Show.php @@ -96,6 +96,11 @@ class Show extends Component */ public bool $editorOpen = false; + /** + * A new value for a locked variable. The locked value is never sent to the browser, but it can be replaced. + */ + public ?string $newLockedValue = null; + public array $problematicVariables = []; /** @@ -120,6 +125,7 @@ class Show extends Component 'is_runtime' => 'required|boolean', 'is_buildtime' => 'required|boolean', 'real_value' => 'nullable', + 'newLockedValue' => 'nullable|string', 'is_required' => 'required|boolean', ]; } @@ -222,6 +228,7 @@ class Show extends Component 'is_literal' => 'required|boolean', 'is_shown_once' => 'required|boolean', 'real_value' => 'nullable', + 'newLockedValue' => 'nullable|string', ]); } else { $this->validate(); @@ -235,11 +242,14 @@ class Show extends Component if (! $this->env->is_shown_once) { $this->env->value = $this->value; $this->env->is_shown_once = $this->is_shown_once; + } elseif (filled($this->newLockedValue)) { + $this->env->value = $this->newLockedValue; } $this->env->comment = $this->comment; $this->env->is_multiline = $this->is_multiline; $this->env->is_literal = $this->is_literal; $this->env->save(); + $this->newLockedValue = null; $this->valuesLoaded = true; } else { // Table metadata only — never decrypt here. Values load via loadValues(). @@ -366,7 +376,9 @@ class Show extends Component } } - $submittedValue = $this->env->is_shown_once ? $this->env->value : $this->value; + $submittedValue = $this->env->is_shown_once + ? (filled($this->newLockedValue) ? $this->newLockedValue : $this->env->value) + : $this->value; if (! $this->isSharedVariable && $this->is_required && str($submittedValue)->isEmpty()) { if (! $this->env->is_shown_once) { $this->value = $this->env->getOriginal('value'); diff --git a/app/Models/EnvironmentVariable.php b/app/Models/EnvironmentVariable.php index d829fe8d20..fed2c3fa17 100644 --- a/app/Models/EnvironmentVariable.php +++ b/app/Models/EnvironmentVariable.php @@ -32,7 +32,7 @@ use OpenApi\Attributes as OA; 'is_runtime' => ['type' => 'boolean'], 'is_buildtime' => ['type' => 'boolean'], 'is_shared' => ['type' => 'boolean'], - 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.'], + 'is_shown_once' => ['type' => 'boolean', 'description' => 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.'], 'key' => ['type' => 'string'], 'value' => ['type' => 'string'], 'real_value' => ['type' => 'string'], @@ -173,6 +173,10 @@ class EnvironmentVariable extends BaseModel }); static::saving(function (ModelsEnvironmentVariable $environmentVariable) { + // A lock is permanent: no UI, API, or MCP path can unlock a variable and show its value again. + if ($environmentVariable->exists && $environmentVariable->getOriginal('is_shown_once')) { + $environmentVariable->is_shown_once = true; + } if ($environmentVariable->preserve_compose_null && $environmentVariable->isDirty('value') && $environmentVariable->value !== null) { $environmentVariable->preserve_compose_null = false; } diff --git a/app/Models/SharedEnvironmentVariable.php b/app/Models/SharedEnvironmentVariable.php index e0f40a4542..41c6bcc1ca 100644 --- a/app/Models/SharedEnvironmentVariable.php +++ b/app/Models/SharedEnvironmentVariable.php @@ -51,6 +51,16 @@ class SharedEnvironmentVariable extends Model 'is_literal' => 'boolean', ]; + protected static function booted(): void + { + // A lock is permanent: no UI, API, or MCP path can unlock a variable and show its value again. + static::saving(function (SharedEnvironmentVariable $sharedVariable) { + if ($sharedVariable->exists && $sharedVariable->getOriginal('is_shown_once')) { + $sharedVariable->is_shown_once = true; + } + }); + } + /** * Scope shared environment variables to a team (API token team_id). */ diff --git a/openapi.json b/openapi.json index 6c318c2156..72dd1dbd79 100644 --- a/openapi.json +++ b/openapi.json @@ -4594,7 +4594,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -4686,7 +4686,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -4777,7 +4777,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -9816,7 +9816,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -9907,7 +9907,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -9997,7 +9997,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -22498,7 +22498,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -22589,7 +22589,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -22679,7 +22679,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." } }, "type": "object" @@ -26558,7 +26558,7 @@ "type": "boolean" }, "is_shown_once": { - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.", + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.", "type": "boolean" }, "comment": { @@ -26590,7 +26590,7 @@ "type": "boolean" }, "is_shown_once": { - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.", + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.", "type": "boolean" }, "comment": { @@ -27535,7 +27535,7 @@ }, "is_shown_once": { "type": "boolean", - "description": "If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values." + "description": "If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values." }, "key": { "type": "string" diff --git a/openapi.yaml b/openapi.yaml index 94b03a9c2c..770cb82f08 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3062,7 +3062,7 @@ paths: description: 'The flag to indicate if the environment variable is multiline.' is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: object responses: '201': @@ -3123,7 +3123,7 @@ paths: description: 'The flag to indicate if the environment variable is multiline.' is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: object responses: '201': @@ -3167,7 +3167,7 @@ paths: properties: data: type: array - items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_preview: { type: boolean, description: 'The flag to indicate if the environment variable is used in preview deployments.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' } }, type: object } + items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_preview: { type: boolean, description: 'The flag to indicate if the environment variable is used in preview deployments.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' } }, type: object } type: object responses: '201': @@ -6452,7 +6452,7 @@ paths: description: 'The flag to indicate if the environment variable is multiline.' is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: object responses: '201': @@ -6512,7 +6512,7 @@ paths: description: 'The flag to indicate if the environment variable is multiline.' is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: object responses: '201': @@ -6558,7 +6558,7 @@ paths: properties: data: type: array - items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' } }, type: object } + items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' } }, type: object } type: object responses: '201': @@ -14186,7 +14186,7 @@ paths: description: 'The flag to indicate if the environment variable is multiline.' is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: object responses: '201': @@ -14246,7 +14246,7 @@ paths: description: 'The flag to indicate if the environment variable is multiline.' is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: object responses: '201': @@ -14292,7 +14292,7 @@ paths: properties: data: type: array - items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' } }, type: object } + items: { properties: { key: { type: string, description: 'The key of the environment variable.' }, value: { type: string, description: 'The value of the environment variable.' }, is_literal: { type: boolean, description: 'The flag to indicate if the environment variable is a literal, nothing espaced.' }, is_multiline: { type: boolean, description: 'The flag to indicate if the environment variable is multiline.' }, is_shown_once: { type: boolean, description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' } }, type: object } type: object responses: '201': @@ -16876,7 +16876,7 @@ components: is_multiline: type: boolean is_shown_once: - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: boolean comment: type: @@ -16898,7 +16898,7 @@ components: is_multiline: type: boolean is_shown_once: - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' type: boolean comment: type: @@ -17603,7 +17603,7 @@ components: type: boolean is_shown_once: type: boolean - description: 'If true, the saved value is hidden in the UI and API responses. MCP never returns environment variable values.' + description: 'If true, the saved value is hidden in the UI and API responses. A lock is permanent: false does not unlock a locked variable, but a new value can still replace the locked one. MCP never returns environment variable values.' key: type: string value: diff --git a/resources/views/livewire/project/shared/environment-variable/show.blade.php b/resources/views/livewire/project/shared/environment-variable/show.blade.php index 44f7c664fc..032d5b5f38 100644 --- a/resources/views/livewire/project/shared/environment-variable/show.blade.php +++ b/resources/views/livewire/project/shared/environment-variable/show.blade.php @@ -126,11 +126,10 @@ class="input w-full italic !text-neutral-500 dark:!text-neutral-500" /> @elseif ($isLocked) -