{{define "account_settings"}}{{template "top" .}} {{if .Flash}}
{{end}} {{if .FlashErr}}{{end}}Account · {{.Account.Name}}
The account itself — what it's called, and how it ends.
| Name | ID | Your role |
|---|---|---|
| {{.Account.Name}} | {{.Account.Sqid}} | {{.Role}} |
Object storage applications are unavailable on this deployment.
{{else}}{{.State}}
{{if eq .State "Approved"}}Run carlos store create --app <app> to provision a store when this deployment has a backend. Usage is metered.
Waiting for a deployment operator.
{{end}} {{if eq .State "Declined"}}An account owner may apply again.
{{end}} {{if and $.IsOwner .CanApply}} {{end}} {{end}} {{if .Events}}| When | What |
|---|---|
| {{fmtTime .CreatedAt}} | {{.Detail}} |
Credentials a SERVER holds — a CI runner, a router, a job — not a person. Each one is bound to this account, carries exactly one role, and never expires: revoking is the control, and it works from here.
{{/* The once-only secret block. The two "Reloading this page" sentences below are a CONTROL, not decoration (C47): this response is a 200 rather than a redirect, because a redirect would have to carry the plaintext somewhere the next request could read it — and the price of that choice is that a reload re-posts. Saying so, next to the secret, is what makes the trade honest. Both sentences are pinned by TestTheFreshSecretAppearsOnceAndOnlyInItsOwnResponse in svcpage_test.go; if you are deleting one as redundant copy, read svcpage.go's package comment first. */}} {{with .ServiceSecret}} {{end}} {{if .ServicesUnknown}}This account's credentials could not be read just now, so none are listed. That is not the same as there being none — reload before concluding anything.
{{else if .Services}}| Name | Role | Scope | Rungs | Commands | Label | Secret since | Last used | Minted by | |
|---|---|---|---|---|---|---|---|---|---|
| {{if .Name}}{{.Name}}{{else}}(unnamed){{end}} | {{.Role}} | {{if .App}}app {{.App}}{{else}}account-wide{{end}} | {{emptyOrDash .RungList}} | {{emptyOrDash .CommandList}} | {{emptyOrDash .Label}} | {{if .RotatedAt.IsZero}}—{{else}}{{fmtTime .RotatedAt}}{{end}} | {{if .LastUsed.IsZero}}—{{else}}{{fmtTime .LastUsed}}{{end}} | {{emptyOrDash .Address}} | {{if .Name}} {{end}} |
Revoking is immediate and needs nothing but this page: the credential's next call fails, whatever secret it holds. Rotating replaces the secret and keeps everything else — the name, the role, the scope, the history — so a credential that may be compromised needs Revoke, not Rotate. A row with no name is an older app token; its listing id is its handle, and its label is what it was minted as.
{{else}}No service credentials in this account.
{{end}}The secret is shown once, on the next screen, and is never recoverable from here. Minting and rotating both ask for your passkey; revoking does not, so it stays one step in an emergency.
This account’s Errors log level could not be read just now, so it is not shown and cannot be changed from here. Reload before concluding anything.
{{else}}Currently {{.ErrLevelSetting.LogLevel}}, from the {{.ErrLevelSetting.LogLevelFrom}} — the level for every app without its own setting, which an app’s own Settings tab overrides. Widening one look to warn is always available on an app’s Errors tab and changes nothing here.
{{end}}This account’s analytics setting could not be read just now. Reload before concluding anything.
{{else}}Currently {{.AnalyticsSetting.Count}}, from the {{.AnalyticsSetting.CountFrom}} — for every app without its own setting, which an app’s own Settings tab overrides.
{{end}}When on, the edge counts HTML page views and daily visitors as it serves them: no JavaScript, no cookie, no stored IP. A visitor is a salted hash that changes every day and cannot be joined across days. Whether that needs consent where your visitors are is your call, which is why it is off until you turn it on.
This account has apps, so it can't be deleted. Delete or move the apps first; an account with nothing in it can be retired from this page.
{{else}}An account with no apps can be retired. Type {{.Account.Name}} to confirm, then confirm with your passkey. Members and pending invitations go with it; nothing outside this account is touched.
{{end}} {{end}} {{template "bottom" .}}{{end}}