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
32 lines
710 B
SQL
32 lines
710 B
SQL
-- +goose Up
|
|
|
|
ALTER TABLE sandboxes
|
|
ADD COLUMN team_id TEXT NOT NULL DEFAULT '';
|
|
|
|
UPDATE sandboxes SET team_id = owner_id WHERE owner_id != '';
|
|
|
|
ALTER TABLE sandboxes
|
|
DROP COLUMN owner_id;
|
|
|
|
ALTER TABLE templates
|
|
ADD COLUMN team_id TEXT NOT NULL DEFAULT '';
|
|
|
|
CREATE INDEX idx_sandboxes_team ON sandboxes(team_id);
|
|
CREATE INDEX idx_templates_team ON templates(team_id);
|
|
|
|
-- +goose Down
|
|
|
|
ALTER TABLE sandboxes
|
|
ADD COLUMN owner_id TEXT NOT NULL DEFAULT '';
|
|
|
|
UPDATE sandboxes SET owner_id = team_id WHERE team_id != '';
|
|
|
|
ALTER TABLE sandboxes
|
|
DROP COLUMN team_id;
|
|
|
|
ALTER TABLE templates
|
|
DROP COLUMN team_id;
|
|
|
|
DROP INDEX IF EXISTS idx_sandboxes_team;
|
|
DROP INDEX IF EXISTS idx_templates_team;
|