78 lines
1.8 KiB
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")
|
|
)
|