Documentation
¶
Overview ¶
Package store keeps the panel's state in a single SQLite file.
Index ¶
- Constants
- Variables
- type Account
- type Allocation
- type App
- type Backup
- type BackupPlan
- type Deployment
- type Detected
- type Egg
- type EnvVar
- type ExternalAccess
- type GameServer
- type GitHubApp
- type KeptVolume
- type Link
- type Metric
- type Node
- type Passkey
- type SSHKey
- type Schedule
- type ScheduleTask
- type Session
- type Store
- func (s *Store) AcceptEULA(ctx context.Context, appID string, at time.Time) error
- func (s *Store) AccountByEmail(ctx context.Context, email string) (Account, error)
- func (s *Store) AccountByID(ctx context.Context, id int64) (Account, error)
- func (s *Store) AddAllocations(ctx context.Context, nodeID int64, ip string, ports []int, now time.Time) error
- func (s *Store) AddEgg(ctx context.Context, name, source string, raw []byte, now time.Time) (Egg, error)
- func (s *Store) AddFailure(ctx context.Context, kind string, key []byte, at, keepSince time.Time) error
- func (s *Store) AddFileFavorite(ctx context.Context, userID int64, appID, path string, at time.Time) error
- func (s *Store) AddFoundBackup(ctx context.Context, b Backup) (int64, error)
- func (s *Store) AddMetrics(ctx context.Context, list []Metric) error
- func (s *Store) AddPasskey(ctx context.Context, p Passkey) error
- func (s *Store) AddSSHKey(ctx context.Context, k SSHKey) (int64, error)
- func (s *Store) Allocations(ctx context.Context, nodeID int64) ([]Allocation, error)
- func (s *Store) App(ctx context.Context, id string) (App, error)
- func (s *Store) AppAllocations(ctx context.Context, appID string) ([]Allocation, error)
- func (s *Store) Apps(ctx context.Context) ([]App, error)
- func (s *Store) AssignAllocations(ctx context.Context, appID string, ids []int64) error
- func (s *Store) Backup(ctx context.Context, id int64) (Backup, error)
- func (s *Store) BackupFiles(ctx context.Context) (map[string]bool, error)
- func (s *Store) BackupPlan(ctx context.Context, app string) (BackupPlan, error)
- func (s *Store) BackupPlans(ctx context.Context) ([]BackupPlan, error)
- func (s *Store) Backups(ctx context.Context, app string) ([]Backup, error)
- func (s *Store) BeginInstall(ctx context.Context, appID string) (bool, error)
- func (s *Store) ClaimSlot(ctx context.Context, id int64, slot time.Time) (bool, error)
- func (s *Store) Close() error
- func (s *Store) ConfirmSession(ctx context.Context, hash []byte, now time.Time) error
- func (s *Store) CreateApp(ctx context.Context, a App) error
- func (s *Store) CreateDeployment(ctx context.Context, d Deployment, now time.Time) (int64, error)
- func (s *Store) CreateFirstAdmin(ctx context.Context, tokenHash []byte, email, password string, now time.Time) (User, error)
- func (s *Store) CreateGameServer(ctx context.Context, g GameServer) error
- func (s *Store) CreateLink(ctx context.Context, l Link) error
- func (s *Store) CreateSchedule(ctx context.Context, x Schedule) (int64, error)
- func (s *Store) CreateSession(ctx context.Context, x Session) error
- func (s *Store) CreateVolume(ctx context.Context, v Volume) (Volume, error)
- func (s *Store) DeleteAllocation(ctx context.Context, nodeID, id int64) error
- func (s *Store) DeleteApp(ctx context.Context, id string) error
- func (s *Store) DeleteBackup(ctx context.Context, id int64) error
- func (s *Store) DeleteExpiredSessions(ctx context.Context, now time.Time) error
- func (s *Store) DeleteGitHubApp(ctx context.Context) error
- func (s *Store) DeleteKeptVolume(ctx context.Context, appID string, id int64) error
- func (s *Store) DeleteLink(ctx context.Context, appID, dbID string) error
- func (s *Store) DeleteOtherSessions(ctx context.Context, userID int64, keep []byte) error
- func (s *Store) DeletePasskey(ctx context.Context, userID int64, id []byte) error
- func (s *Store) DeleteSSHKey(ctx context.Context, userID, id int64) error
- func (s *Store) DeleteSchedule(ctx context.Context, id int64) error
- func (s *Store) DeleteSession(ctx context.Context, hash []byte) error
- func (s *Store) DeleteUserSession(ctx context.Context, userID int64, hash []byte) error
- func (s *Store) DeleteVolume(ctx context.Context, appID string, id int64) error
- func (s *Store) Deployment(ctx context.Context, appID string, id int64) (Deployment, error)
- func (s *Store) Deployments(ctx context.Context, appID string, limit int) ([]Deployment, error)
- func (s *Store) DropOffsiteQueue(ctx context.Context) error
- func (s *Store) Egg(ctx context.Context, id int64) (Egg, error)
- func (s *Store) Env(ctx context.Context, appID string) ([]EnvVar, error)
- func (s *Store) ExpiredBackups(ctx context.Context, now time.Time) ([]Backup, error)
- func (s *Store) ExpiredOffsite(ctx context.Context, now time.Time) ([]Backup, error)
- func (s *Store) ExternalAccess(ctx context.Context, appID string) (ExternalAccess, error)
- func (s *Store) ExternalAccesses(ctx context.Context) ([]ExternalAccess, error)
- func (s *Store) FailUnfinished(ctx context.Context, now time.Time) error
- func (s *Store) FailUnfinishedBackups(ctx context.Context, now time.Time) error
- func (s *Store) FailUnfinishedInstalls(ctx context.Context) error
- func (s *Store) FailUnfinishedRuns(ctx context.Context) error
- func (s *Store) Failures(ctx context.Context, kind string, key []byte, since time.Time) (int, time.Time, error)
- func (s *Store) FileFavorites(ctx context.Context, userID int64, appID string) ([]string, error)
- func (s *Store) FinishBackup(ctx context.Context, id int64, file string, bytes int64, failure *msg.Msg, ...) error
- func (s *Store) FinishRun(ctx context.Context, id int64, state string, failure *msg.Msg, at time.Time) error
- func (s *Store) FirstDelivery(ctx context.Context, id string, now time.Time) (bool, error)
- func (s *Store) GameServer(ctx context.Context, appID string) (GameServer, error)
- func (s *Store) GameServers(ctx context.Context) ([]GameServer, error)
- func (s *Store) GitHubApp(ctx context.Context) (GitHubApp, error)
- func (s *Store) GoLive(ctx context.Context, d Deployment, now time.Time) error
- func (s *Store) HasNewer(ctx context.Context, d Deployment) (bool, error)
- func (s *Store) Images(ctx context.Context) ([]string, error)
- func (s *Store) KeepVolume(ctx context.Context, v Volume, version string, now time.Time) (KeptVolume, error)
- func (s *Store) KeptVolumes(ctx context.Context, appID string) ([]KeptVolume, error)
- func (s *Store) Links(ctx context.Context, appID, dbID string) ([]Link, error)
- func (s *Store) LiveDeployment(ctx context.Context, appID string) (Deployment, error)
- func (s *Store) LiveDeployments(ctx context.Context) ([]Deployment, error)
- func (s *Store) Metrics(ctx context.Context, appID string, since time.Time) ([]Metric, error)
- func (s *Store) MoveFileFavorites(ctx context.Context, appID, from, to string) error
- func (s *Store) Node(ctx context.Context, id int64) (Node, error)
- func (s *Store) OffsiteDue(ctx context.Context, now time.Time) ([]Backup, error)
- func (s *Store) OffsiteFailedAt(ctx context.Context, id int64, failure msg.Msg, tries int, next time.Time) error
- func (s *Store) OffsiteSent(ctx context.Context, id int64, at time.Time) error
- func (s *Store) Passkeys(ctx context.Context, userID int64) ([]Passkey, error)
- func (s *Store) PruneMetrics(ctx context.Context, before time.Time) error
- func (s *Store) PushTargets(ctx context.Context, repo, branch string) ([]App, error)
- func (s *Store) Recoveries(ctx context.Context, appID string, since time.Time) (int, error)
- func (s *Store) RecoveryCodesLeft(ctx context.Context, userID int64) (int, error)
- func (s *Store) RecoverySavedAt(ctx context.Context) (time.Time, error)
- func (s *Store) RemoveExternalAccess(ctx context.Context, appID string) error
- func (s *Store) RemoveFileFavorite(ctx context.Context, userID int64, appID, path string) error
- func (s *Store) RemoveTOTP(ctx context.Context, userID int64) error
- func (s *Store) ReplaceGamePorts(ctx context.Context, nodeID int64, appID string, ids []int64, port int, ...) error
- func (s *Store) ResetAllFailures(ctx context.Context) error
- func (s *Store) ResetFailures(ctx context.Context, kind string, key []byte) error
- func (s *Store) ResetLogin(ctx context.Context, tokenHash []byte, password string, now time.Time) (User, error)
- func (s *Store) SFTPPassword(ctx context.Context, appID string) (string, error)
- func (s *Store) SFTPPort(ctx context.Context, nodeID int64) (int, error)
- func (s *Store) SSHKeyOwner(ctx context.Context, fingerprint string) (Account, SSHKey, error)
- func (s *Store) SSHKeys(ctx context.Context, userID int64) ([]SSHKey, error)
- func (s *Store) Schedule(ctx context.Context, id int64) (Schedule, error)
- func (s *Store) Schedules(ctx context.Context, app string) ([]Schedule, error)
- func (s *Store) SendOffsite(ctx context.Context, id int64, until time.Time) error
- func (s *Store) Session(ctx context.Context, hash []byte, now time.Time) (Session, error)
- func (s *Store) Sessions(ctx context.Context, userID int64, now time.Time) ([]Session, error)
- func (s *Store) SetAdapted(ctx context.Context, id int64, adapted map[string]int) error
- func (s *Store) SetBackupContents(ctx context.Context, id int64, volumes []string, size int64, changed int) error
- func (s *Store) SetBackupPlan(ctx context.Context, p BackupPlan) error
- func (s *Store) SetDeployment(ctx context.Context, d Deployment, now time.Time) error
- func (s *Store) SetDeploymentImage(ctx context.Context, id int64, image string) error
- func (s *Store) SetDetected(ctx context.Context, appID string, d Detected) error
- func (s *Store) SetEngineVersion(ctx context.Context, appID, image, version string) error
- func (s *Store) SetEnv(ctx context.Context, appID string, vars []EnvVar) error
- func (s *Store) SetExternalAccess(ctx context.Context, x ExternalAccess) error
- func (s *Store) SetGameSettings(ctx context.Context, appID, image, startup string, variables map[string]string) error
- func (s *Store) SetGitHubApp(ctx context.Context, g GitHubApp) error
- func (s *Store) SetInstall(ctx context.Context, appID, state string, deployment int64, ...) error
- func (s *Store) SetLocal(ctx context.Context, id int64, local bool, keep time.Time) error
- func (s *Store) SetPassword(ctx context.Context, userID int64, hash string) error
- func (s *Store) SetPruned(ctx context.Context, appID, image string) error
- func (s *Store) SetPublicAddress(ctx context.Context, id int64, address string) error
- func (s *Store) SetRecoveryCodes(ctx context.Context, userID int64, hashes [][]byte) error
- func (s *Store) SetRecoverySaved(ctx context.Context, at time.Time) error
- func (s *Store) SetResetToken(ctx context.Context, email string, hash []byte, expires time.Time) (User, error)
- func (s *Store) SetRestored(ctx context.Context, id int64, at time.Time) error
- func (s *Store) SetSFTPPassword(ctx context.Context, appID, hash string, at time.Time) error
- func (s *Store) SetSFTPPort(ctx context.Context, nodeID int64, port int) error
- func (s *Store) SetSetupToken(ctx context.Context, hash []byte, expires time.Time) error
- func (s *Store) SetSteamAppID(ctx context.Context, appID string, steamApp int64) error
- func (s *Store) SetSteamAutoUpdate(ctx context.Context, appID string, on bool) error
- func (s *Store) SetStopped(ctx context.Context, appID string, stopped bool) error
- func (s *Store) SetTOTP(ctx context.Context, userID int64, secret []byte, step int64) error
- func (s *Store) SetupOpen(ctx context.Context) (bool, error)
- func (s *Store) StartBackup(ctx context.Context, b Backup) (int64, error)
- func (s *Store) StartRun(ctx context.Context, id int64, at time.Time) error
- func (s *Store) SuggestTest(ctx context.Context, appID, command string) (bool, error)
- func (s *Store) TouchSession(ctx context.Context, hash []byte, seen, expires time.Time) error
- func (s *Store) UnassignAllocations(ctx context.Context, appID string) error
- func (s *Store) UnkeepVolume(ctx context.Context, k KeptVolume, now time.Time) (Volume, error)
- func (s *Store) Unpruned(ctx context.Context, appID string) ([]Deployment, error)
- func (s *Store) UpdateApp(ctx context.Context, a App) error
- func (s *Store) UpdateLink(ctx context.Context, l Link) error
- func (s *Store) UpdatePasskey(ctx context.Context, id, credential []byte, used time.Time) error
- func (s *Store) UpdateSchedule(ctx context.Context, x Schedule) error
- func (s *Store) UpdateVolume(ctx context.Context, v Volume) error
- func (s *Store) UseRecoveryCode(ctx context.Context, userID int64, hash []byte) (bool, error)
- func (s *Store) UseTOTPStep(ctx context.Context, userID, step int64) (bool, error)
- func (s *Store) VerifySession(ctx context.Context, hash []byte, now, expires time.Time) error
- func (s *Store) Volumes(ctx context.Context, appID string) ([]Volume, error)
- type TakenError
- type User
- type Volume
Constants ¶
const ( SourceImage = "image" SourceGitHub = "github" // SourceFiles is an app that runs the files in its volume with the // startup command of an egg. SourceFiles = "files" )
App sources.
const ( KindApp = "app" KindGame = "game" )
What an app is.
const ( DeployQueued = "queued" DeployBuilding = "building" DeployTesting = "testing" DeployStarting = "starting" DeployInstalling = "installing" // a game server's install container runs DeployInstalled = "installed" // the install finished; nothing goes live DeployLive = "live" DeployFailed = "failed" DeployReplaced = "replaced" // was live until a newer one took over DeploySkipped = "skipped" // a newer one came before it started )
Deployment states. A deployment moves forward through them and ends in one of the last four.
const ( CauseManual = "manual" CausePush = "push" CauseRestart = "restart" // the live image again, without a build CauseRollback = "rollback" // an earlier deployment's image CauseRecover = "recover" // the live image again, after it stopped by itself CauseRestore = "restore" // the live image again, after a backup was put back CauseBackup = "backup" // the live image again, after the app was stopped for its backup CauseUpdate = "update" // what the image's tag points at now; a database is backed up first CauseUpgrade = "upgrade" // a database's new major version, with its data dumped and loaded CauseInstall = "install" // a new game server's install container CauseReinstall = "reinstall" // the install again, after a backup of the server's files CauseClone = "clone" // a new server filled with the files of another; Message names it )
What started a deployment.
const ( BackupScheduled = "scheduled" BackupManual = "manual" // BackupRestore is the safety backup taken just before a restore. BackupRestore = "restore" // BackupFound was made elsewhere and found in off-site storage. BackupFound = "found" // BackupUploaded is a dump from another server that someone uploaded. BackupUploaded = "uploaded" // BackupUpdate is taken just before a database moves to a new image. BackupUpdate = "update" // BackupUpgrade is the dump a database's new major version loads. BackupUpgrade = "upgrade" // BackupReinstall is taken just before a game server's install runs // again. BackupReinstall = "reinstall" // BackupSchedule is made by a task of a game server's schedule. BackupSchedule = "schedule" )
Why a backup was made.
const ( BackupRunning = "running" BackupDone = "done" BackupFailed = "failed" )
Backup states.
const ( OffsitePending = "pending" OffsiteDone = "done" OffsiteFailed = "failed" )
Where a backup's off-site copy is. A backup that is not sent has none.
const ( InstallRunning = "installing" InstallDone = "installed" InstallFailed = "failed" )
Install states of a game server.
const ( TaskCommand = "command" TaskPower = "power" TaskBackup = "backup" )
Kinds of schedule task.
const ( RunRunning = "running" RunDone = "done" RunFailed = "failed" RunSkipped = "skipped" )
How the last run of a schedule went.
const AnyAddress = "0.0.0.0"
AnyAddress is the ip of an allocation that covers every address of the machine.
const DefaultSFTPPort = 2222
DefaultSFTPPort is where the SFTP service listens until it is changed. It is Pterodactyl's port too, so a machine that runs Wings may need another.
const MaxFileFavorites = 50
MaxFileFavorites is how many paths an account may star in one server.
const ThisNode = 1
ThisNode is the machine Zelie runs on, the only node until there are more.
Variables ¶
var ( // ErrWhichAccount means there is more than one administrator, so the // reset needs an email. ErrWhichAccount = errors.New("there is more than one administrator; name one by email") // ErrBadResetToken means the reset link is wrong, used or expired. ErrBadResetToken = errors.New("this reset link is not valid") )
var ( // ErrSetupDone means an administrator exists and setup is closed for good. ErrSetupDone = errors.New("setup is already complete") // ErrBadSetupToken means the setup link is wrong, used or expired. ErrBadSetupToken = errors.New("this setup link is not valid; run 'zelie setup-link' on the server for a new one") )
var ( // ErrNotFound means the thing asked for does not exist. ErrNotFound = errors.New("not found") // ErrLastFactor stops an account from removing its only second factor. ErrLastFactor = errors.New("this is the only second step left on the account; add another before removing it") )
var ErrExists = errors.New("already exists")
ErrExists is returned when a name or domain is already taken.
var ErrInUse = errors.New("in use")
ErrInUse means an allocation belongs to a server.
var ErrTooManyFavorites = errors.New("too many favourites")
ErrTooManyFavorites is returned when an account is at MaxFileFavorites.
Functions ¶
This section is empty.
Types ¶
type Account ¶
type Account struct {
User
Password string
TOTPSecret []byte // encrypted; nil until an authenticator app is set up
Passkeys int
}
Account is a user with what is needed to log them in.
func (Account) HasSecondFactor ¶
HasSecondFactor reports whether the account has an authenticator app or a passkey. Until it does, the panel only lets it set one up.
type Allocation ¶ added in v0.6.0
type Allocation struct {
ID int64
NodeID int64
IP string
Port int
AppID string // empty when no server has it
CreatedAt time.Time
}
Allocation is a port a node may give to a server. It covers TCP and UDP.
type App ¶
type App struct {
ID string
Source string
Image string // for SourceImage
Repo string // owner/name, for SourceGitHub
Branch string
Port int
Domain string
MemoryMB int64
CPUs float64
// AutoDeploy deploys each push to the branch, for SourceGitHub.
AutoDeploy bool
// HealthPath is what the health check asks for, when the app has a
// domain.
HealthPath string
// TestCommand runs the app's tests; empty means none. TestSet is false
// until it has been decided, by a build's suggestion or by the user.
TestCommand string
TestSet bool
// Stopped is set when the user stopped the app.
Stopped bool
// The user's own commands; empty means what the build chose.
BuildCommand string
StartCommand string
// Detected is what the last build chose.
Detected Detected
// RestartPulls makes a restart build the branch's newest commit.
RestartPulls bool
// Engine is set for a database: postgres, mariadb or redis, in the
// major version EngineVersion.
Engine string
EngineVersion string
// Kind is KindApp or KindGame. A database is a KindApp with an Engine.
Kind string
CreatedAt time.Time
}
App is something Zelie keeps running.
func (App) IsDatabase ¶
IsDatabase reports whether the app is one of Zelie's databases.
type Backup ¶
type Backup struct {
ID int64
AppID string
Engine string // what the app was when it was made; empty for volumes
Reason string
State string
File string // the core's name for it, once made
Bytes int64
Error *msg.Msg // why it failed
// For a backup of volumes: the folders in it, how much its files take
// and how many changed while they were copied.
Volumes []string
Size int64
Changed int
// For an uploaded dump: what was changed so it loads here, by kind.
Adapted map[string]int
CreatedAt time.Time
FinishedAt time.Time // zero while running
KeepUntil time.Time
RestoredAt time.Time // zero if it was never put back
// The off-site copy: its state (empty when there is none), why it
// failed, how often it was tried, when it was sent or is tried
// again, and until when it is kept.
Offsite string
OffsiteError *msg.Msg
OffsiteTries int
OffsiteAt time.Time
OffsiteUntil time.Time
// Local is false once only the off-site copy is left.
Local bool
}
Backup is one backup, made or tried.
type BackupPlan ¶
type BackupPlan struct {
AppID string
Enabled bool
Minute int // of the day, in the server's time zone
KeepDays int
// Stop stops an app for its volume backup instead of copying the
// files while it runs.
Stop bool
// Offsite sends each backup to the off-site storage, when there is
// one, where it is kept for OffsiteDays.
Offsite bool
OffsiteDays int
}
BackupPlan says when an app is backed up and for how long its backups are kept.
func AppBackupPlan ¶
func AppBackupPlan(app string) BackupPlan
AppBackupPlan is what an app has until its plan is changed: the same hours, but off, since volumes such as game worlds can be large.
func DefaultBackupPlan ¶
func DefaultBackupPlan(app string) BackupPlan
DefaultBackupPlan is what a new database gets: every night at three, kept for a week.
type Deployment ¶
type Deployment struct {
ID int64
AppID string
Version string // a branch until the commit is known
Image string
Cause string
Message string // first line of the pushed commit's message
Pruned bool // its image was deleted
State string
Error *msg.Msg // why it failed
CreatedAt time.Time
FinishedAt time.Time // zero while in progress
}
Deployment is one attempt to put a version of an app live.
type Detected ¶
type Detected struct {
Builder string `json:"builder,omitempty"` // dockerfile or railpack
Build string `json:"build,omitempty"`
Start string `json:"start,omitempty"`
}
Detected is how the last build built an app.
type Egg ¶ added in v0.6.0
type Egg struct {
ID int64
Name string
Source string // a catalog id or an address
Raw []byte
ImportedAt time.Time
}
Egg is an egg file kept as it was fetched.
type EnvVar ¶
EnvVar is one environment variable of an app. For a secret one, Value is sealed for the core and the panel cannot read it.
type ExternalAccess ¶
ExternalAccess is a database open to desktop tools on a loopback port.
type GameServer ¶ added in v0.6.0
type GameServer struct {
AppID string
EggID int64
Image string // the image the server runs, one the egg offers
Startup string
// Variables maps environment variable names to their values.
Variables map[string]string
InstallState string
// InstallID is the deployment of the last install, whose log has its
// output; zero before the first one is queued.
InstallID int64
InstalledAt time.Time // zero until an install has finished
// EULAAcceptedAt is when the game's EULA was accepted; zero until then.
EULAAcceptedAt time.Time
// SteamAppID is the app SteamCMD installs for this server, or 0.
SteamAppID int64
// SteamAutoUpdate lets the panel update the server once it is empty.
SteamAutoUpdate bool
}
GameServer is what a game server has besides its app row.
type GitHubApp ¶
type GitHubApp struct {
AppID int64
Slug string
Owner string
HTMLURL string
BaseURL string
Key []byte
WebhookSecret []byte
CreatedAt time.Time
}
GitHubApp is the panel's own GitHub App. Key and WebhookSecret are encrypted with the panel key; the store never sees them in the clear.
type KeptVolume ¶ added in v0.3.0
type KeptVolume struct {
ID int64
Name string
AppID string
Path string
LimitMB int64
Version string // the engine version the files belong to
KeptAt time.Time
}
KeptVolume is a database's volume from before an upgrade.
type Link ¶
type Link struct {
AppID, DBID string
// Prefix starts the names of the variables the app gets, so one app
// can have several databases.
Prefix string
CreatedAt time.Time
}
Link connects an app to a database.
type Metric ¶ added in v0.5.0
type Metric struct {
AppID string
At time.Time
MemoryBytes int64
CPU float64 // CPUs, on average
RxBytes int64
TxBytes int64
Requests int64
ClientErrors int64 // 4xx answers
ServerErrors int64 // 5xx answers
}
Metric is what an app used in one minute.
type Node ¶ added in v0.6.0
type Node struct {
ID int64
Name string
// PublicAddress is what the administrator says players connect to. It
// is empty when they left it to Zelie to find one.
PublicAddress string
CreatedAt time.Time
}
Node is a machine that runs servers.
type Passkey ¶
type Passkey struct {
ID []byte
UserID int64
Name string
Credential []byte // JSON, owned by the WebAuthn code
CreatedAt time.Time
UsedAt time.Time // zero if never used to log in
}
Passkey is a WebAuthn credential registered to an account.
type SSHKey ¶ added in v0.7.0
type SSHKey struct {
ID int64
UserID int64
Name string
Fingerprint string
// PublicKey is the key in the SSH wire format.
PublicKey []byte
CreatedAt time.Time
}
SSHKey is a public key of an account, for logging in over SFTP.
type Schedule ¶ added in v0.6.0
type Schedule struct {
ID int64
AppID string
Name string
Cron string
OnlyRunning bool
Enabled bool
CreatedAt time.Time
// LastSlot is the minute the schedule last fired for; slots up to it
// are done with.
LastSlot time.Time
// LastRun is when the last run started, zero if there was none.
LastRun time.Time
LastState string
LastError *msg.Msg
Tasks []ScheduleTask
}
Schedule runs its tasks in order whenever its cron expression fires.
type ScheduleTask ¶ added in v0.6.0
type ScheduleTask struct {
ID int64
// Action is TaskCommand, TaskPower or TaskBackup. Data is the console
// command, or the power action; empty for a backup.
Action string
Data string
// Delay is how many seconds to wait before the task.
Delay int
// KeepGoing runs the tasks after this one even if it fails.
KeepGoing bool
}
ScheduleTask is one step of a schedule.
type Session ¶
type Session struct {
Hash []byte
UserID int64
Verified bool // the second factor has been checked
CreatedAt time.Time
SeenAt time.Time
ExpiresAt time.Time
ConfirmedAt time.Time // last time the user proved it was them
IP string
Agent string
}
Session is a logged-in browser. Hash is the SHA-256 of the cookie value.
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store is the panel's database.
func (*Store) AcceptEULA ¶ added in v0.6.0
AcceptEULA records that the game's EULA was accepted for the server.
func (*Store) AccountByEmail ¶
func (*Store) AccountByID ¶
func (*Store) AddAllocations ¶ added in v0.6.0
func (s *Store) AddAllocations(ctx context.Context, nodeID int64, ip string, ports []int, now time.Time) error
AddAllocations adds ports on one address of a node, all or none. A port that is already in the pool is refused with a *TakenError, and so is one that overlaps it: every address covers each specific one.
func (*Store) AddEgg ¶ added in v0.6.0
func (s *Store) AddEgg(ctx context.Context, name, source string, raw []byte, now time.Time) (Egg, error)
AddEgg stores an egg file. The same file from the same source is stored once, so many servers of one game share a row.
func (*Store) AddFailure ¶ added in v0.5.0
func (s *Store) AddFailure(ctx context.Context, kind string, key []byte, at, keepSince time.Time) error
AddFailure records a failed attempt, and forgets those of kind made at keepSince or earlier.
func (*Store) AddFileFavorite ¶ added in v0.7.1
func (s *Store) AddFileFavorite(ctx context.Context, userID int64, appID, path string, at time.Time) error
AddFileFavorite stars a path. Starring it again changes nothing.
func (*Store) AddFoundBackup ¶
AddFoundBackup records a backup found in off-site storage, kept there until offsite_until and not here.
func (*Store) AddMetrics ¶ added in v0.5.0
AddMetrics saves a minute's readings. A second reading for the same app and minute replaces the first.
func (*Store) AddSSHKey ¶ added in v0.7.0
AddSSHKey stores a key. The fingerprint is unique among all accounts, so a key already in use returns ErrExists.
func (*Store) Allocations ¶ added in v0.6.0
Allocations lists a node's ports by number.
func (*Store) AppAllocations ¶ added in v0.6.0
AppAllocations lists the ports a server uses.
func (*Store) AssignAllocations ¶ added in v0.6.0
AssignAllocations gives the allocations to a server, all or none. One that another server took meanwhile fails with ErrInUse.
func (*Store) BackupFiles ¶
BackupFiles returns every backup file on record, as app/file.
func (*Store) BackupPlan ¶
BackupPlan returns an app's plan, or ErrNotFound when it has none.
func (*Store) BackupPlans ¶
func (s *Store) BackupPlans(ctx context.Context) ([]BackupPlan, error)
BackupPlans returns every plan.
func (*Store) Backups ¶
Backups returns an app's backups, newest first. With app empty, it returns every backup whose app no longer exists.
func (*Store) BeginInstall ¶ added in v0.6.0
BeginInstall marks the server as installing, unless it already is. It reports whether it did, so of two requests to install again only one goes ahead.
func (*Store) ClaimSlot ¶ added in v0.6.0
ClaimSlot records that the schedule fires for slot, and reports whether it did so first: false means the slot was already handled.
func (*Store) ConfirmSession ¶
ConfirmSession records that the user proved it was them again.
func (*Store) CreateDeployment ¶
CreateDeployment adds d as a queued deployment and returns its id.
func (*Store) CreateFirstAdmin ¶
func (s *Store) CreateFirstAdmin(ctx context.Context, tokenHash []byte, email, password string, now time.Time) (User, error)
CreateFirstAdmin spends the setup token and creates the first administrator. Once it succeeds, setup is closed.
func (*Store) CreateGameServer ¶ added in v0.6.0
func (s *Store) CreateGameServer(ctx context.Context, g GameServer) error
CreateGameServer adds the game server data of an app that exists. Its install starts out running: the caller queues it next.
func (*Store) CreateSchedule ¶ added in v0.6.0
CreateSchedule adds a schedule and returns its id. Its slots start now: LastSlot is what the caller sets, normally the current minute.
func (*Store) CreateVolume ¶
CreateVolume saves a new volume under a new name for the core.
func (*Store) DeleteAllocation ¶ added in v0.6.0
DeleteAllocation removes a port from a node's pool. One a server uses stays, with ErrInUse.
func (*Store) DeleteExpiredSessions ¶
DeleteExpiredSessions keeps the table from growing forever.
func (*Store) DeleteKeptVolume ¶ added in v0.3.0
func (*Store) DeleteLink ¶
func (*Store) DeleteOtherSessions ¶
DeleteOtherSessions ends every session of the account except keep.
func (*Store) DeletePasskey ¶
DeletePasskey removes a passkey, unless it is the account's last second factor.
func (*Store) DeleteSSHKey ¶ added in v0.7.0
DeleteSSHKey removes one of an account's keys.
func (*Store) DeleteSchedule ¶ added in v0.6.0
func (*Store) DeleteUserSession ¶
DeleteUserSession ends one of an account's sessions. The account is part of the query so no one can end another account's session.
func (*Store) DeleteVolume ¶
func (*Store) Deployment ¶
func (*Store) Deployments ¶
Deployments lists an app's most recent deployments, newest first.
func (*Store) DropOffsiteQueue ¶
DropOffsiteQueue forgets the backups still waiting to be sent, when there is no longer anywhere to send them.
func (*Store) ExpiredBackups ¶
ExpiredBackups returns the backups whose file here is due to go. The newest backup made of an app that still exists is never among them: if backups stop working, the last good one stays.
func (*Store) ExpiredOffsite ¶
ExpiredOffsite returns the backups left only off-site whose time is up there too.
func (*Store) ExternalAccess ¶
ExternalAccess returns the database's, or ErrNotFound.
func (*Store) ExternalAccesses ¶
func (s *Store) ExternalAccesses(ctx context.Context) ([]ExternalAccess, error)
ExternalAccesses lists every database open to desktop tools.
func (*Store) FailUnfinished ¶
FailUnfinished marks deployments that were in progress when the panel stopped as failed. The panel calls it on start.
func (*Store) FailUnfinishedBackups ¶
FailUnfinishedBackups marks backups that were running when the panel stopped as failed. The panel calls it on start.
func (*Store) FailUnfinishedInstalls ¶ added in v0.6.0
FailUnfinishedInstalls marks installs that were running when the panel stopped as failed. The panel calls it on start.
func (*Store) FailUnfinishedRuns ¶ added in v0.6.0
FailUnfinishedRuns marks runs that were going when the panel stopped as failed. The panel calls it on start.
func (*Store) Failures ¶ added in v0.5.0
func (s *Store) Failures(ctx context.Context, kind string, key []byte, since time.Time) (int, time.Time, error)
Failures counts the failed attempts of kind and key after a time, and returns when the oldest of them was.
func (*Store) FileFavorites ¶ added in v0.7.1
FileFavorites lists an account's starred paths in a server, oldest first.
func (*Store) FinishBackup ¶
func (s *Store) FinishBackup(ctx context.Context, id int64, file string, bytes int64, failure *msg.Msg, at time.Time) error
FinishBackup records how a backup ended: with a file, or with why not.
func (*Store) FinishRun ¶ added in v0.6.0
func (s *Store) FinishRun(ctx context.Context, id int64, state string, failure *msg.Msg, at time.Time) error
FinishRun records how a run ended. A skipped run also sets when it was.
func (*Store) FirstDelivery ¶
FirstDelivery records a webhook delivery id and reports whether it is new.
func (*Store) GameServer ¶ added in v0.6.0
GameServer returns the game server data of an app, or ErrNotFound.
func (*Store) GameServers ¶ added in v0.6.0
func (s *Store) GameServers(ctx context.Context) ([]GameServer, error)
GameServers lists every game server by app id.
func (*Store) GoLive ¶
GoLive makes d the app's live deployment and marks the one before it replaced, in one step.
func (*Store) KeepVolume ¶ added in v0.3.0
func (s *Store) KeepVolume(ctx context.Context, v Volume, version string, now time.Time) (KeptVolume, error)
KeepVolume takes v off its app and keeps it as the data of version.
func (*Store) KeptVolumes ¶ added in v0.3.0
KeptVolumes lists an app's kept volumes, newest first; appID "" lists every app's.
func (*Store) Links ¶
Links returns the databases an app is linked to, or with appID empty, the apps linked to the database dbID.
func (*Store) LiveDeployment ¶
LiveDeployment returns the deployment serving an app, if any.
func (*Store) LiveDeployments ¶ added in v0.3.0
func (s *Store) LiveDeployments(ctx context.Context) ([]Deployment, error)
LiveDeployments returns the live deployment of every app.
func (*Store) Metrics ¶ added in v0.5.0
Metrics returns an app's readings since a time, oldest first.
func (*Store) MoveFileFavorites ¶ added in v0.7.1
MoveFileFavorites follows a rename for every account: the path and anything below it changes to sit under the new name. A star whose new path is already starred is left where it was.
func (*Store) OffsiteDue ¶
OffsiteDue returns the backups to send now, oldest first.
func (*Store) OffsiteFailedAt ¶
func (s *Store) OffsiteFailedAt(ctx context.Context, id int64, failure msg.Msg, tries int, next time.Time) error
OffsiteFailedAt records a failed send, to be tried again at next.
func (*Store) OffsiteSent ¶
OffsiteSent records that a backup's copy is off-site.
func (*Store) PruneMetrics ¶ added in v0.5.0
PruneMetrics deletes the readings from before a time.
func (*Store) PushTargets ¶
PushTargets lists the apps that deploy pushes to a repository's branch. GitHub names are case-insensitive.
func (*Store) Recoveries ¶ added in v0.5.0
Recoveries counts the times Zelie brought an app back up after it stopped by itself, since a time.
func (*Store) RecoveryCodesLeft ¶
RecoveryCodesLeft counts the account's unused recovery codes.
func (*Store) RecoverySavedAt ¶
RecoverySavedAt returns when the backup recovery file was last saved, or the zero time.
func (*Store) RemoveExternalAccess ¶
func (*Store) RemoveFileFavorite ¶ added in v0.7.1
RemoveFileFavorite unstars a path. A path that was not starred is fine.
func (*Store) RemoveTOTP ¶
RemoveTOTP turns off the authenticator app, unless the account has no passkey to fall back on.
func (*Store) ReplaceGamePorts ¶ added in v0.7.0
func (s *Store) ReplaceGamePorts(ctx context.Context, nodeID int64, appID string, ids []int64, port int, variables map[string]string) error
ReplaceGamePorts makes ids the ports a server holds, at once: the ones it no longer lists go back to the pool and the new ones are taken. port is the server's main port, and variables the game server's values with the port variables changed. A port another server holds fails with ErrInUse, one that is not on the node with ErrNotFound, and nothing changes then.
func (*Store) ResetAllFailures ¶ added in v0.5.0
ResetAllFailures forgets every failed attempt, for an owner who got back in from the server.
func (*Store) ResetFailures ¶ added in v0.5.0
ResetFailures forgets the failed attempts of kind and key.
func (*Store) ResetLogin ¶ added in v0.5.0
func (s *Store) ResetLogin(ctx context.Context, tokenHash []byte, password string, now time.Time) (User, error)
ResetLogin spends the reset token: the account gets password, loses its second factors and sessions, and every login limit is lifted.
func (*Store) SFTPPassword ¶ added in v0.7.0
SFTPPassword returns the hash of a game server's SFTP password, or "" when it has none.
func (*Store) SFTPPort ¶ added in v0.7.0
SFTPPort is the port the SFTP service listens on for a node.
func (*Store) SSHKeyOwner ¶ added in v0.7.0
SSHKeyOwner finds the account a key belongs to, and the key.
func (*Store) Schedules ¶ added in v0.6.0
Schedules returns a server's schedules, oldest first. An empty app id returns every schedule.
func (*Store) SendOffsite ¶
SendOffsite marks a backup to be sent now, and kept off-site until.
func (*Store) SetAdapted ¶
SetAdapted records what an uploaded dump needed changed to load here.
func (*Store) SetBackupContents ¶
func (s *Store) SetBackupContents(ctx context.Context, id int64, volumes []string, size int64, changed int) error
SetBackupContents records what a volume backup holds.
func (*Store) SetBackupPlan ¶
func (s *Store) SetBackupPlan(ctx context.Context, p BackupPlan) error
SetBackupPlan saves a plan. Backups already made are kept for the new numbers of days, counted from when each was made.
func (*Store) SetDeployment ¶
SetDeployment records progress. Ending states also set the finish time.
func (*Store) SetDeploymentImage ¶ added in v0.3.0
SetDeploymentImage records the image a deployment runs.
func (*Store) SetDetected ¶
SetDetected records how the last build built the app.
func (*Store) SetEngineVersion ¶ added in v0.3.0
SetEngineVersion moves a database to another version of its engine.
func (*Store) SetExternalAccess ¶
func (s *Store) SetExternalAccess(ctx context.Context, x ExternalAccess) error
SetExternalAccess saves the database's port. ErrExists means another database has it.
func (*Store) SetGameSettings ¶ added in v0.6.0
func (s *Store) SetGameSettings(ctx context.Context, appID, image, startup string, variables map[string]string) error
SetGameSettings records the image, the startup command and the variable values a game server starts with from now on.
func (*Store) SetGitHubApp ¶
SetGitHubApp saves the App, replacing the one before, if any.
func (*Store) SetInstall ¶ added in v0.6.0
func (s *Store) SetInstall(ctx context.Context, appID, state string, deployment int64, installed time.Time) error
SetInstall records how an install is going. deployment is the one whose log has its output; installed is when it finished successfully.
func (*Store) SetLocal ¶
SetLocal records whether a backup's file is here. One brought back from off-site is kept here until keep.
func (*Store) SetPassword ¶
SetPassword replaces the account's password hash.
func (*Store) SetPruned ¶
SetPruned records that an image was deleted, for every deployment that used it.
func (*Store) SetPublicAddress ¶ added in v0.6.0
SetPublicAddress sets the address players use for a node's servers. An empty one goes back to the detected address.
func (*Store) SetRecoveryCodes ¶
SetRecoveryCodes replaces the account's recovery codes.
func (*Store) SetRecoverySaved ¶
func (*Store) SetResetToken ¶ added in v0.5.0
func (s *Store) SetResetToken(ctx context.Context, email string, hash []byte, expires time.Time) (User, error)
SetResetToken replaces the reset token with one for the account with email, or for the only administrator when email is empty.
func (*Store) SetRestored ¶
SetRestored records that a backup was put back.
func (*Store) SetSFTPPassword ¶ added in v0.7.0
SetSFTPPassword replaces a server's SFTP password hash. An empty hash removes the password.
func (*Store) SetSFTPPort ¶ added in v0.7.0
SetSFTPPort changes the port the SFTP service listens on.
func (*Store) SetSetupToken ¶
SetSetupToken replaces the setup token. Only the hash of the token is kept.
func (*Store) SetSteamAppID ¶ added in v0.6.0
SetSteamAppID records the Steam app of a game server found in its egg.
func (*Store) SetSteamAutoUpdate ¶ added in v0.6.0
SetSteamAutoUpdate turns updating a game server when it is empty on or off.
func (*Store) SetStopped ¶
SetStopped records whether the user stopped the app.
func (*Store) SetTOTP ¶
SetTOTP stores an encrypted authenticator secret. step is the time step of the code that confirmed it, which may not be used again.
func (*Store) StartBackup ¶
StartBackup records a backup that is about to be made and returns its id.
func (*Store) SuggestTest ¶
SuggestTest stores a build's suggested test command, unless one was decided already. It reports whether it was stored.
func (*Store) TouchSession ¶
TouchSession records activity and moves the expiry.
func (*Store) UnassignAllocations ¶ added in v0.6.0
UnassignAllocations takes every port back from a server. Deleting the server does the same.
func (*Store) UnkeepVolume ¶ added in v0.3.0
UnkeepVolume gives a kept volume back to its app, which must have no other volume at its path.
func (*Store) Unpruned ¶
Unpruned lists the app's deployments that still have an image, newest first.
func (*Store) UpdateApp ¶
UpdateApp saves everything about an app except its id, source and creation time.
func (*Store) UpdatePasskey ¶
UpdatePasskey saves the credential after a login, which carries the authenticator's new signature counter.
func (*Store) UpdateSchedule ¶ added in v0.6.0
UpdateSchedule replaces a schedule's settings and tasks. LastSlot moves too, so a change never fires for a minute that has passed.
func (*Store) UpdateVolume ¶
UpdateVolume changes where the app sees a volume and how large it may grow.
func (*Store) UseRecoveryCode ¶
UseRecoveryCode spends a recovery code. It reports false if the code is wrong or already used.
func (*Store) UseTOTPStep ¶
UseTOTPStep records that a code from this time step was used. It fails if a code from the same or a later step was used before, which stops a code that was seen over someone's shoulder from being replayed.
func (*Store) VerifySession ¶
VerifySession marks the second factor as checked. Finishing a login also counts as confirming.
type TakenError ¶ added in v0.6.0
type TakenError struct{ Port int }
TakenError says which port of a new range clashes with an allocation already there. It matches ErrExists.
func (*TakenError) Error ¶ added in v0.6.0
func (e *TakenError) Error() string
func (*TakenError) Is ¶ added in v0.6.0
func (e *TakenError) Is(target error) bool