Implement email/password auth with JWT sessions and API key auth for sandbox lifecycle. Users get a default team on signup; sandboxes, snapshots, and API keys are scoped to teams. - Add user, team, users_teams, and team_api_keys tables (goose migrations) - Add JWT middleware (Bearer token) for user management endpoints - Add API key middleware (X-API-Key header, SHA-256 hashed) for sandbox ops - Add signup/login handlers with transactional user+team creation - Add API key CRUD endpoints (create/list/delete) - Replace owner_id with team_id on sandboxes and templates - Update all handlers to use team-scoped queries - Add godotenv for .env file loading - Update OpenAPI spec and test UI with auth flows
41 lines
903 B
Go
41 lines
903 B
Go
package id
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"fmt"
|
|
)
|
|
|
|
func hex8() string {
|
|
b := make([]byte, 4)
|
|
if _, err := rand.Read(b); err != nil {
|
|
panic(fmt.Sprintf("crypto/rand failed: %v", err))
|
|
}
|
|
return hex.EncodeToString(b)
|
|
}
|
|
|
|
// NewSandboxID generates a new sandbox ID in the format "sb-" + 8 hex chars.
|
|
func NewSandboxID() string {
|
|
return "sb-" + hex8()
|
|
}
|
|
|
|
// NewSnapshotName generates a snapshot name in the format "template-" + 8 hex chars.
|
|
func NewSnapshotName() string {
|
|
return "template-" + hex8()
|
|
}
|
|
|
|
// NewUserID generates a new user ID in the format "usr-" + 8 hex chars.
|
|
func NewUserID() string {
|
|
return "usr-" + hex8()
|
|
}
|
|
|
|
// NewTeamID generates a new team ID in the format "team-" + 8 hex chars.
|
|
func NewTeamID() string {
|
|
return "team-" + hex8()
|
|
}
|
|
|
|
// NewAPIKeyID generates a new API key ID in the format "key-" + 8 hex chars.
|
|
func NewAPIKeyID() string {
|
|
return "key-" + hex8()
|
|
}
|