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
17 lines
480 B
Go
17 lines
480 B
Go
package auth
|
|
|
|
import "golang.org/x/crypto/bcrypt"
|
|
|
|
const bcryptCost = 12
|
|
|
|
// HashPassword returns the bcrypt hash of a plaintext password.
|
|
func HashPassword(plaintext string) (string, error) {
|
|
b, err := bcrypt.GenerateFromPassword([]byte(plaintext), bcryptCost)
|
|
return string(b), err
|
|
}
|
|
|
|
// CheckPassword returns nil if plaintext matches the stored hash.
|
|
func CheckPassword(hash, plaintext string) error {
|
|
return bcrypt.CompareHashAndPassword([]byte(hash), []byte(plaintext))
|
|
}
|