Files
todo-vibe-coding/internal/iam/types.go

78 lines
1.8 KiB
Go

package iam
import (
"errors"
"time"
)
const (
ContextUserIDKey = "user_id"
ContextSessionIDKey = "session_id"
ContextJTIKey = "jti"
)
type tokenKind string
const (
tokenKindAccess tokenKind = "access"
tokenKindRefresh tokenKind = "refresh"
)
type accessClaims struct {
UserID int64 `json:"uid"`
SessionID string `json:"sid"`
JTI string `json:"jti"`
IssuedAt int64 `json:"iat"`
ExpiresAt int64 `json:"exp"`
Type tokenKind `json:"typ"`
}
type refreshClaims struct {
UserID int64 `json:"uid"`
SessionID string `json:"sid"`
RefreshID string `json:"rid"`
IssuedAt int64 `json:"iat"`
ExpiresAt int64 `json:"exp"`
Type tokenKind `json:"typ"`
}
type Session struct {
ID string `json:"id"`
UserID int64 `json:"user_id"`
DeviceInfo string `json:"device_info"`
IP string `json:"ip"`
UserAgent string `json:"user_agent"`
CreatedAt time.Time `json:"created_at"`
ExpiresAt time.Time `json:"expires_at"`
RevokedAt *time.Time `json:"revoked_at,omitempty"`
}
type tokenPair struct {
AccessToken string
AccessTokenExpires time.Time
RefreshToken string
SessionID string
}
type requestMeta struct {
IP string
UserAgent string
DeviceInfo string
}
type AuthResult struct {
AccessToken string `json:"access_token"`
ExpiresIn int64 `json:"expires_in"`
SessionID string `json:"session_id"`
}
var (
errInvalidToken = errors.New("invalid token")
errTokenExpired = errors.New("token expired")
errInvalidCredentials = errors.New("invalid credentials")
errAlreadyExists = errors.New("already exists")
errSessionRevoked = errors.New("session revoked")
errUnauthorized = errors.New("unauthorized")
errForbidden = errors.New("forbidden")
)