mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-10-28 15:51:26 +00:00
Add cnp_ personal access tokens so the CLI, MCP server, and external agents authenticate without a browser session — the agent-first spine from ROADMAP2 phase A. Modeled on agent_auth_tokens: raw token shown once, only SHA-256 hash stored. - user_tokens table (goose migration + sqlc), name/prefix/scope/expiry, owner-scoped revoke, last_used_at stamping - middleware: cnp_ bearer resolution, read scope gates mutations with 403 SCOPE_INSUFFICIENT, non-admin scopes cap is_admin even for admin owners — a token never outranks its scope or its owner - GET/POST/DELETE /api/v1/user/tokens + OpenAPI + generated types - Settings UI: create with scope/expiry pickers, one-time token display with copy, list with last-used/expiry, confirm-revoke - docs: OPERATIONS.md section, README feature line Verified end-to-end against live Postgres: create/list/revoke, read scope blocks PUT (403), write PAT on admin owner blocked from admin routes (403), admin scope works, revoked token returns 401. Authored By: TDvorak <[email protected]>
233 lines
8.8 KiB
Go
233 lines
8.8 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
|
|
package sqlcdb
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/sqlc-dev/pqtype"
|
|
)
|
|
|
|
type AgentAuthToken struct {
|
|
ID uuid.UUID `json:"id"`
|
|
TokenHash string `json:"token_hash"`
|
|
Label string `json:"label"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
LastUsedAt sql.NullTime `json:"last_used_at"`
|
|
RevokedAt sql.NullTime `json:"revoked_at"`
|
|
}
|
|
|
|
type AgentCommand struct {
|
|
ID string `json:"id"`
|
|
Type string `json:"type"`
|
|
NodeAgentID string `json:"node_agent_id"`
|
|
ContainerID sql.NullString `json:"container_id"`
|
|
Payload pqtype.NullRawMessage `json:"payload"`
|
|
Status sql.NullString `json:"status"`
|
|
Result sql.NullString `json:"result"`
|
|
Error sql.NullString `json:"error"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
CompletedAt sql.NullTime `json:"completed_at"`
|
|
}
|
|
|
|
type AgentHeartbeat struct {
|
|
ID string `json:"id"`
|
|
NodeAgentID string `json:"node_agent_id"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
Status string `json:"status"`
|
|
Resources json.RawMessage `json:"resources"`
|
|
ContainerCount int32 `json:"container_count"`
|
|
SystemLoad json.RawMessage `json:"system_load"`
|
|
Uptime int64 `json:"uptime"`
|
|
Version string `json:"version"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type ContainerInstance struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Image string `json:"image"`
|
|
ProjectID string `json:"project_id"`
|
|
ServiceID string `json:"service_id"`
|
|
NodeAgentID string `json:"node_agent_id"`
|
|
Status pqtype.NullRawMessage `json:"status"`
|
|
Resources pqtype.NullRawMessage `json:"resources"`
|
|
Ports pqtype.NullRawMessage `json:"ports"`
|
|
Environment pqtype.NullRawMessage `json:"environment"`
|
|
Volumes pqtype.NullRawMessage `json:"volumes"`
|
|
Networks pqtype.NullRawMessage `json:"networks"`
|
|
RestartPolicy pqtype.NullRawMessage `json:"restart_policy"`
|
|
HealthCheck pqtype.NullRawMessage `json:"health_check"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
StartedAt sql.NullTime `json:"started_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type DatabaseBackup struct {
|
|
ID string `json:"id"`
|
|
DatabaseID string `json:"database_id"`
|
|
Size string `json:"size"`
|
|
Status string `json:"status"`
|
|
BackupPath sql.NullString `json:"backup_path"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
CompletedAt sql.NullTime `json:"completed_at"`
|
|
}
|
|
|
|
type DatabaseService struct {
|
|
ID string `json:"id"`
|
|
UserID string `json:"user_id"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
Status string `json:"status"`
|
|
Version string `json:"version"`
|
|
Plan string `json:"plan"`
|
|
Region string `json:"region"`
|
|
ConnectionUrl sql.NullString `json:"connection_url"`
|
|
BackupSchedule sql.NullString `json:"backup_schedule"`
|
|
NextBackupAt sql.NullTime `json:"next_backup_at"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type Deployment struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ServiceID uuid.UUID `json:"service_id"`
|
|
Status sql.NullString `json:"status"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type Environment struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
ProjectID uuid.UUID `json:"project_id"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type EnvironmentVariable struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ServiceID uuid.UUID `json:"service_id"`
|
|
Key string `json:"key"`
|
|
Value string `json:"value"`
|
|
IsSecret sql.NullBool `json:"is_secret"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type NodeAgent struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Hostname string `json:"hostname"`
|
|
IpAddress string `json:"ip_address"`
|
|
Port int32 `json:"port"`
|
|
Status sql.NullString `json:"status"`
|
|
Version sql.NullString `json:"version"`
|
|
Capabilities pqtype.NullRawMessage `json:"capabilities"`
|
|
Resources pqtype.NullRawMessage `json:"resources"`
|
|
LastHeartbeat sql.NullTime `json:"last_heartbeat"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
Metadata pqtype.NullRawMessage `json:"metadata"`
|
|
}
|
|
|
|
type Notification struct {
|
|
ID uuid.UUID `json:"id"`
|
|
UserID uuid.UUID `json:"user_id"`
|
|
Kind string `json:"kind"`
|
|
Title string `json:"title"`
|
|
Body sql.NullString `json:"body"`
|
|
ResourceType sql.NullString `json:"resource_type"`
|
|
ResourceID sql.NullString `json:"resource_id"`
|
|
ReadAt sql.NullTime `json:"read_at"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
}
|
|
|
|
type Project struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Description sql.NullString `json:"description"`
|
|
OwnerID uuid.UUID `json:"owner_id"`
|
|
IsApproved bool `json:"is_approved"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type ProjectMember struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ProjectID uuid.UUID `json:"project_id"`
|
|
UserID uuid.UUID `json:"user_id"`
|
|
Role string `json:"role"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
}
|
|
|
|
type Service struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Description sql.NullString `json:"description"`
|
|
ProjectID uuid.UUID `json:"project_id"`
|
|
EnvironmentID uuid.UUID `json:"environment_id"`
|
|
ServiceType string `json:"service_type"`
|
|
SourceType string `json:"source_type"`
|
|
SourceUrl sql.NullString `json:"source_url"`
|
|
ImageName sql.NullString `json:"image_name"`
|
|
BuildCommand sql.NullString `json:"build_command"`
|
|
StartCommand sql.NullString `json:"start_command"`
|
|
CpuLimit sql.NullInt32 `json:"cpu_limit"`
|
|
MemoryLimit sql.NullInt32 `json:"memory_limit"`
|
|
PublicUrl sql.NullString `json:"public_url"`
|
|
HealthCheckUrl sql.NullString `json:"health_check_url"`
|
|
Status sql.NullString `json:"status"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
Type sql.NullString `json:"type"`
|
|
Image sql.NullString `json:"image"`
|
|
Command sql.NullString `json:"command"`
|
|
Environment sql.NullString `json:"environment"`
|
|
GitRepo sql.NullString `json:"git_repo"`
|
|
GitBranch sql.NullString `json:"git_branch"`
|
|
BuildPath sql.NullString `json:"build_path"`
|
|
Cpu sql.NullString `json:"cpu"`
|
|
Memory sql.NullString `json:"memory"`
|
|
Replicas int32 `json:"replicas"`
|
|
Port int32 `json:"port"`
|
|
Domain string `json:"domain"`
|
|
HealthcheckPath string `json:"healthcheck_path"`
|
|
RestartPolicy string `json:"restart_policy"`
|
|
PublishedPort int32 `json:"published_port"`
|
|
}
|
|
|
|
type ServiceTemplate struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Description sql.NullString `json:"description"`
|
|
Category string `json:"category"`
|
|
Logo sql.NullString `json:"logo"`
|
|
Config json.RawMessage `json:"config"`
|
|
Variables pqtype.NullRawMessage `json:"variables"`
|
|
IsOfficial sql.NullBool `json:"is_official"`
|
|
OwnerID uuid.NullUUID `json:"owner_id"`
|
|
IsPublic bool `json:"is_public"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
UpdatedAt sql.NullTime `json:"updated_at"`
|
|
}
|
|
|
|
type UserToken struct {
|
|
ID uuid.UUID `json:"id"`
|
|
UserID uuid.UUID `json:"user_id"`
|
|
Name string `json:"name"`
|
|
KeyPrefix string `json:"key_prefix"`
|
|
TokenHash string `json:"token_hash"`
|
|
Scope string `json:"scope"`
|
|
ExpiresAt sql.NullTime `json:"expires_at"`
|
|
LastUsedAt sql.NullTime `json:"last_used_at"`
|
|
RevokedAt sql.NullTime `json:"revoked_at"`
|
|
CreatedAt sql.NullTime `json:"created_at"`
|
|
}
|