Documentation
¶
Index ¶
- Variables
- func HashSecretKey(secretKey string) string
- func ParseAPIKeyFromAuth(authHeader string) (accessKey, secretKey string, err error)
- func RequireAnyRole(user *types.User, roles ...types.UserRole) error
- func RequirePermission(user *types.User, permission types.Permission) error
- func RequireRole(user *types.User, role types.UserRole) error
- type APIKey
- type APIKeyManager
- func (m *APIKeyManager) DeleteAPIKey(ctx context.Context, accessKey string) error
- func (m *APIKeyManager) GenerateAPIKey(ctx context.Context, name string, expiresIn *time.Duration, ...) (*APIKey, error)
- func (m *APIKeyManager) GetAPIKey(ctx context.Context, accessKey string) (*APIKey, error)
- func (m *APIKeyManager) ListAPIKeys(ctx context.Context) ([]*APIKey, error)
- func (m *APIKeyManager) RevokeAPIKey(ctx context.Context, accessKey string) error
- func (m *APIKeyManager) ValidateAPIKey(ctx context.Context, accessKey, secretKey string) (*APIKey, error)
- type APIKeyStore
- type AccessTokenBuilder
- func (b *AccessTokenBuilder) AddGrant(grant *VideoGrant) *AccessTokenBuilder
- func (b *AccessTokenBuilder) Build() (string, error)
- func (b *AccessTokenBuilder) SetCanPublish(canPublish bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetCanPublishData(canPublishData bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetCanSubscribe(canSubscribe bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetEmail(email string) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetHidden(hidden bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetIdentity(identity string) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetMetadata(metadata map[string]interface{}) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetName(name string) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetNotBefore(notBefore time.Time) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetRecorder(recorder bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetRoomAdmin(isAdmin bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetRoomCreate(canCreate bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetRoomJoin(roomName string) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetRoomList(canList bool) *AccessTokenBuilder
- func (b *AccessTokenBuilder) SetTTL(ttl time.Duration) *AccessTokenBuilder
- type AccessTokenClaims
- type AuthError
- type AuthRateLimiter
- func (arl *AuthRateLimiter) AllowGeneralAuth(ctx context.Context, userID string) error
- func (arl *AuthRateLimiter) AllowLogin(ctx context.Context, key string) error
- func (arl *AuthRateLimiter) AllowTokenRefresh(ctx context.Context, userID string) error
- func (arl *AuthRateLimiter) ResetGeneralAuth(ctx context.Context, userID string) error
- func (arl *AuthRateLimiter) ResetLogin(ctx context.Context, key string) error
- func (arl *AuthRateLimiter) ResetTokenRefresh(ctx context.Context, userID string) error
- type Authenticator
- type Authorizer
- type InMemoryTokenStore
- func (s *InMemoryTokenStore) CleanExpiredTokens(ctx context.Context) error
- func (s *InMemoryTokenStore) IsTokenRevoked(ctx context.Context, token string) (bool, error)
- func (s *InMemoryTokenStore) RevokeToken(ctx context.Context, token string) error
- func (s *InMemoryTokenStore) StoreToken(ctx context.Context, token string, userID string, expiresAt time.Time) error
- type InMemoryUserStore
- func (s *InMemoryUserStore) CreateUser(ctx context.Context, user *types.User, password string) error
- func (s *InMemoryUserStore) DeleteUser(ctx context.Context, userID string) error
- func (s *InMemoryUserStore) GetUserByID(ctx context.Context, userID string) (*types.User, error)
- func (s *InMemoryUserStore) GetUserByUsername(ctx context.Context, username string) (*types.User, error)
- func (s *InMemoryUserStore) UpdatePassword(ctx context.Context, userID string, newPassword string) error
- func (s *InMemoryUserStore) UpdateUser(ctx context.Context, user *types.User) error
- func (s *InMemoryUserStore) ValidatePassword(ctx context.Context, userID string, password string) (bool, error)
- type JWTAuthenticator
- func (j *JWTAuthenticator) Authenticate(ctx context.Context, credentials *types.Credentials) (*types.AuthToken, error)
- func (j *JWTAuthenticator) RefreshToken(ctx context.Context, refreshToken string) (*types.AuthToken, error)
- func (j *JWTAuthenticator) RevokeToken(ctx context.Context, token string) error
- func (j *JWTAuthenticator) SetAccessExpiry(duration time.Duration)
- func (j *JWTAuthenticator) SetRefreshExpiry(duration time.Duration)
- func (j *JWTAuthenticator) ValidateToken(ctx context.Context, token string) (*TokenClaims, error)
- type MemoryAPIKeyStore
- func (s *MemoryAPIKeyStore) DeleteAPIKey(ctx context.Context, accessKey string) error
- func (s *MemoryAPIKeyStore) GetAPIKey(ctx context.Context, accessKey string) (*APIKey, error)
- func (s *MemoryAPIKeyStore) ListAPIKeys(ctx context.Context) ([]*APIKey, error)
- func (s *MemoryAPIKeyStore) StoreAPIKey(ctx context.Context, key *APIKey) error
- func (s *MemoryAPIKeyStore) UpdateAPIKey(ctx context.Context, key *APIKey) error
- type RBACAuthorizer
- func (a *RBACAuthorizer) Authorize(ctx context.Context, user *types.User, permission types.Permission, ...) error
- func (a *RBACAuthorizer) HasAnyRole(user *types.User, roles ...types.UserRole) bool
- func (a *RBACAuthorizer) HasPermission(user *types.User, permission types.Permission) bool
- func (a *RBACAuthorizer) HasRole(user *types.User, role types.UserRole) bool
- type RateLimiter
- type Session
- type SessionManager
- func (sm *SessionManager) CleanExpiredSessions(ctx context.Context) error
- func (sm *SessionManager) CreateSession(ctx context.Context, sessionID string, user *types.User) (*Session, error)
- func (sm *SessionManager) DeleteSession(ctx context.Context, sessionID string) error
- func (sm *SessionManager) DeleteUserSessions(ctx context.Context, userID string) error
- func (sm *SessionManager) GetSession(ctx context.Context, sessionID string) (*Session, error)
- func (sm *SessionManager) GetUserSessions(ctx context.Context, userID string) ([]*Session, error)
- func (sm *SessionManager) SessionCount() int
- func (sm *SessionManager) SetIdleTimeout(duration time.Duration)
- func (sm *SessionManager) SetSessionExpiry(duration time.Duration)
- func (sm *SessionManager) UserSessionCount(userID string) int
- type TokenBucketLimiter
- type TokenClaims
- type TokenStore
- type UserStore
- type VideoGrant
Constants ¶
This section is empty.
Variables ¶
var ( ErrIdentityRequired = &AuthError{Message: "identity is required"} ErrTokenExpired = &AuthError{Message: "token is expired"} ErrTokenNotYetValid = &AuthError{Message: "token is not yet valid"} ErrInvalidToken = &AuthError{Message: "invalid token"} )
Common errors
Functions ¶
func HashSecretKey ¶ added in v1.0.2
HashSecretKey creates a hash of the secret key for secure storage Use this if you want to store hashed secrets instead of plain text
func ParseAPIKeyFromAuth ¶ added in v1.0.2
ParseAPIKeyFromAuth parses an API key from an Authorization header Format: "Bearer API_xxx:SEC_xxx"
func RequireAnyRole ¶
RequireAnyRole is a helper function that returns an error if the user doesn't have any of the roles
func RequirePermission ¶
func RequirePermission(user *types.User, permission types.Permission) error
RequirePermission is a helper function that returns an error if the user doesn't have the permission
Types ¶
type APIKey ¶ added in v1.0.2
type APIKey struct {
// AccessKey is the public identifier (like API Key ID)
AccessKey string `json:"access_key"`
// SecretKey is the private key used for signing (never expose to clients)
SecretKey string `json:"secret_key,omitempty"`
// Name is a friendly name for this API key
Name string `json:"name"`
// CreatedAt is when the key was created
CreatedAt time.Time `json:"created_at"`
// ExpiresAt is when the key expires (optional)
ExpiresAt *time.Time `json:"expires_at,omitempty"`
// IsActive indicates if the key is active
IsActive bool `json:"is_active"`
// Metadata for additional information
Metadata map[string]string `json:"metadata,omitempty"`
}
APIKey represents an API key pair used for authentication
type APIKeyManager ¶ added in v1.0.2
type APIKeyManager struct {
// contains filtered or unexported fields
}
APIKeyManager manages API key generation and validation
func NewAPIKeyManager ¶ added in v1.0.2
func NewAPIKeyManager(store APIKeyStore) *APIKeyManager
NewAPIKeyManager creates a new API key manager
func (*APIKeyManager) DeleteAPIKey ¶ added in v1.0.2
func (m *APIKeyManager) DeleteAPIKey(ctx context.Context, accessKey string) error
DeleteAPIKey deletes an API key permanently
func (*APIKeyManager) GenerateAPIKey ¶ added in v1.0.2
func (m *APIKeyManager) GenerateAPIKey(ctx context.Context, name string, expiresIn *time.Duration, metadata map[string]string) (*APIKey, error)
GenerateAPIKey generates a new API key pair The access key is like: API_xxxxxxxxxxxxxxxx The secret key is like: SEC_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
func (*APIKeyManager) GetAPIKey ¶ added in v1.0.2
GetAPIKey retrieves an API key (without exposing secret)
func (*APIKeyManager) ListAPIKeys ¶ added in v1.0.2
func (m *APIKeyManager) ListAPIKeys(ctx context.Context) ([]*APIKey, error)
ListAPIKeys lists all API keys (without exposing secrets)
func (*APIKeyManager) RevokeAPIKey ¶ added in v1.0.2
func (m *APIKeyManager) RevokeAPIKey(ctx context.Context, accessKey string) error
RevokeAPIKey revokes an API key
func (*APIKeyManager) ValidateAPIKey ¶ added in v1.0.2
func (m *APIKeyManager) ValidateAPIKey(ctx context.Context, accessKey, secretKey string) (*APIKey, error)
ValidateAPIKey validates an API key pair
type APIKeyStore ¶ added in v1.0.2
type APIKeyStore interface {
// StoreAPIKey stores an API key
StoreAPIKey(ctx context.Context, key *APIKey) error
// GetAPIKey retrieves an API key by access key
GetAPIKey(ctx context.Context, accessKey string) (*APIKey, error)
// ListAPIKeys lists all API keys
ListAPIKeys(ctx context.Context) ([]*APIKey, error)
// UpdateAPIKey updates an API key
UpdateAPIKey(ctx context.Context, key *APIKey) error
// DeleteAPIKey deletes an API key
DeleteAPIKey(ctx context.Context, accessKey string) error
}
APIKeyStore is the interface for storing API keys
type AccessTokenBuilder ¶ added in v1.0.2
type AccessTokenBuilder struct {
// contains filtered or unexported fields
}
AccessTokenBuilder helps build access tokens for room joining
func NewAccessTokenBuilder ¶ added in v1.0.2
func NewAccessTokenBuilder(apiKey, apiSecret string) *AccessTokenBuilder
NewAccessTokenBuilder creates a new access token builder
func (*AccessTokenBuilder) AddGrant ¶ added in v1.0.2
func (b *AccessTokenBuilder) AddGrant(grant *VideoGrant) *AccessTokenBuilder
AddGrant adds a video grant for room access
func (*AccessTokenBuilder) Build ¶ added in v1.0.2
func (b *AccessTokenBuilder) Build() (string, error)
Build generates the access token
func (*AccessTokenBuilder) SetCanPublish ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetCanPublish(canPublish bool) *AccessTokenBuilder
SetCanPublish sets whether the user can publish streams
func (*AccessTokenBuilder) SetCanPublishData ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetCanPublishData(canPublishData bool) *AccessTokenBuilder
SetCanPublishData sets whether the user can publish data messages
func (*AccessTokenBuilder) SetCanSubscribe ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetCanSubscribe(canSubscribe bool) *AccessTokenBuilder
SetCanSubscribe sets whether the user can subscribe to streams
func (*AccessTokenBuilder) SetEmail ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetEmail(email string) *AccessTokenBuilder
SetEmail sets the email
func (*AccessTokenBuilder) SetHidden ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetHidden(hidden bool) *AccessTokenBuilder
SetHidden sets whether the participant is hidden
func (*AccessTokenBuilder) SetIdentity ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetIdentity(identity string) *AccessTokenBuilder
SetIdentity sets the user identity (required)
func (*AccessTokenBuilder) SetMetadata ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetMetadata(metadata map[string]interface{}) *AccessTokenBuilder
SetMetadata sets custom metadata
func (*AccessTokenBuilder) SetName ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetName(name string) *AccessTokenBuilder
SetName sets the display name
func (*AccessTokenBuilder) SetNotBefore ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetNotBefore(notBefore time.Time) *AccessTokenBuilder
SetNotBefore sets the not-before time (token not valid before this time)
func (*AccessTokenBuilder) SetRecorder ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetRecorder(recorder bool) *AccessTokenBuilder
SetRecorder marks this as a recorder participant
func (*AccessTokenBuilder) SetRoomAdmin ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetRoomAdmin(isAdmin bool) *AccessTokenBuilder
SetRoomAdmin grants admin privileges
func (*AccessTokenBuilder) SetRoomCreate ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetRoomCreate(canCreate bool) *AccessTokenBuilder
SetRoomCreate allows creating rooms
func (*AccessTokenBuilder) SetRoomJoin ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetRoomJoin(roomName string) *AccessTokenBuilder
SetRoomJoin sets the room name the user can join
func (*AccessTokenBuilder) SetRoomList ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetRoomList(canList bool) *AccessTokenBuilder
SetRoomList allows listing rooms
func (*AccessTokenBuilder) SetTTL ¶ added in v1.0.2
func (b *AccessTokenBuilder) SetTTL(ttl time.Duration) *AccessTokenBuilder
SetTTL sets the token time-to-live (expiration duration)
type AccessTokenClaims ¶ added in v1.0.2
type AccessTokenClaims struct {
// Standard JWT claims
Identity string `json:"sub"` // User identity/ID
Name string `json:"name"` // Display name
Email string `json:"email"` // Email (optional)
Metadata string `json:"metadata,omitempty"` // Custom metadata as JSON string
Video *VideoGrant `json:"video,omitempty"` // Video permissions
IssuedAt int64 `json:"iat"` // Issued at (Unix timestamp)
ExpiresAt int64 `json:"exp"` // Expires at (Unix timestamp)
NotBefore int64 `json:"nbf,omitempty"` // Not valid before (Unix timestamp)
Issuer string `json:"iss,omitempty"` // Issuer (access key)
}
AccessTokenClaims represents the complete claims for a room access token
func ParseAccessToken ¶ added in v1.0.2
func ParseAccessToken(token, apiSecret string) (*AccessTokenClaims, error)
ParseAccessToken parses and validates an access token
type AuthError ¶ added in v1.0.2
type AuthError struct {
Message string
}
AuthError represents an authentication error
type AuthRateLimiter ¶
type AuthRateLimiter struct {
// contains filtered or unexported fields
}
AuthRateLimiter wraps a rate limiter with authentication-specific logic
func NewAuthRateLimiter ¶
func NewAuthRateLimiter() *AuthRateLimiter
NewAuthRateLimiter creates a new authentication rate limiter with default settings
func (*AuthRateLimiter) AllowGeneralAuth ¶
func (arl *AuthRateLimiter) AllowGeneralAuth(ctx context.Context, userID string) error
AllowGeneralAuth checks if a general auth operation is allowed
func (*AuthRateLimiter) AllowLogin ¶
func (arl *AuthRateLimiter) AllowLogin(ctx context.Context, key string) error
AllowLogin checks if a login attempt is allowed
func (*AuthRateLimiter) AllowTokenRefresh ¶
func (arl *AuthRateLimiter) AllowTokenRefresh(ctx context.Context, userID string) error
AllowTokenRefresh checks if a token refresh is allowed
func (*AuthRateLimiter) ResetGeneralAuth ¶
func (arl *AuthRateLimiter) ResetGeneralAuth(ctx context.Context, userID string) error
ResetGeneralAuth resets the general auth rate limit for a user
func (*AuthRateLimiter) ResetLogin ¶
func (arl *AuthRateLimiter) ResetLogin(ctx context.Context, key string) error
ResetLogin resets the login rate limit for a key
func (*AuthRateLimiter) ResetTokenRefresh ¶
func (arl *AuthRateLimiter) ResetTokenRefresh(ctx context.Context, userID string) error
ResetTokenRefresh resets the token refresh rate limit for a user
type Authenticator ¶
type Authenticator interface {
// Authenticate authenticates a user with credentials and returns an auth token
Authenticate(ctx context.Context, credentials *types.Credentials) (*types.AuthToken, error)
// ValidateToken validates an access token and returns the user claims
ValidateToken(ctx context.Context, token string) (*TokenClaims, error)
// RefreshToken refreshes an access token using a refresh token
RefreshToken(ctx context.Context, refreshToken string) (*types.AuthToken, error)
// RevokeToken revokes a token (logout)
RevokeToken(ctx context.Context, token string) error
}
Authenticator is the interface for authentication providers
type Authorizer ¶
type Authorizer interface {
// Authorize checks if a user has permission to perform an action on a resource
Authorize(ctx context.Context, user *types.User, permission types.Permission, resourceID string) error
// HasPermission checks if a user has a specific permission
HasPermission(user *types.User, permission types.Permission) bool
// HasRole checks if a user has a specific role
HasRole(user *types.User, role types.UserRole) bool
// HasAnyRole checks if a user has any of the specified roles
HasAnyRole(user *types.User, roles ...types.UserRole) bool
}
Authorizer is the interface for authorization
type InMemoryTokenStore ¶
type InMemoryTokenStore struct {
// contains filtered or unexported fields
}
InMemoryTokenStore is an in-memory implementation of TokenStore for testing
func NewInMemoryTokenStore ¶
func NewInMemoryTokenStore() *InMemoryTokenStore
NewInMemoryTokenStore creates a new in-memory token store
func (*InMemoryTokenStore) CleanExpiredTokens ¶
func (s *InMemoryTokenStore) CleanExpiredTokens(ctx context.Context) error
CleanExpiredTokens removes expired tokens
func (*InMemoryTokenStore) IsTokenRevoked ¶
IsTokenRevoked checks if a token is revoked
func (*InMemoryTokenStore) RevokeToken ¶
func (s *InMemoryTokenStore) RevokeToken(ctx context.Context, token string) error
RevokeToken revokes a token
func (*InMemoryTokenStore) StoreToken ¶
func (s *InMemoryTokenStore) StoreToken(ctx context.Context, token string, userID string, expiresAt time.Time) error
StoreToken stores a token
type InMemoryUserStore ¶
type InMemoryUserStore struct {
// contains filtered or unexported fields
}
InMemoryUserStore is an in-memory implementation of UserStore for testing
func NewInMemoryUserStore ¶
func NewInMemoryUserStore() *InMemoryUserStore
NewInMemoryUserStore creates a new in-memory user store
func (*InMemoryUserStore) CreateUser ¶
func (s *InMemoryUserStore) CreateUser(ctx context.Context, user *types.User, password string) error
CreateUser creates a new user
func (*InMemoryUserStore) DeleteUser ¶
func (s *InMemoryUserStore) DeleteUser(ctx context.Context, userID string) error
DeleteUser deletes a user
func (*InMemoryUserStore) GetUserByID ¶
GetUserByID gets a user by ID
func (*InMemoryUserStore) GetUserByUsername ¶
func (s *InMemoryUserStore) GetUserByUsername(ctx context.Context, username string) (*types.User, error)
GetUserByUsername gets a user by username or email
func (*InMemoryUserStore) UpdatePassword ¶
func (s *InMemoryUserStore) UpdatePassword(ctx context.Context, userID string, newPassword string) error
UpdatePassword updates a user's password
func (*InMemoryUserStore) UpdateUser ¶
UpdateUser updates a user
func (*InMemoryUserStore) ValidatePassword ¶
func (s *InMemoryUserStore) ValidatePassword(ctx context.Context, userID string, password string) (bool, error)
ValidatePassword validates a user's password
type JWTAuthenticator ¶
type JWTAuthenticator struct {
// contains filtered or unexported fields
}
JWTAuthenticator implements the Authenticator interface using JWT tokens
func NewJWTAuthenticator ¶
func NewJWTAuthenticator(secret string, userStore UserStore, tokenStore TokenStore) *JWTAuthenticator
NewJWTAuthenticator creates a new JWT authenticator
func (*JWTAuthenticator) Authenticate ¶
func (j *JWTAuthenticator) Authenticate(ctx context.Context, credentials *types.Credentials) (*types.AuthToken, error)
Authenticate authenticates a user with credentials and returns an auth token
func (*JWTAuthenticator) RefreshToken ¶
func (j *JWTAuthenticator) RefreshToken(ctx context.Context, refreshToken string) (*types.AuthToken, error)
RefreshToken refreshes an access token using a refresh token
func (*JWTAuthenticator) RevokeToken ¶
func (j *JWTAuthenticator) RevokeToken(ctx context.Context, token string) error
RevokeToken revokes a token (logout)
func (*JWTAuthenticator) SetAccessExpiry ¶
func (j *JWTAuthenticator) SetAccessExpiry(duration time.Duration)
SetAccessExpiry sets the access token expiry duration
func (*JWTAuthenticator) SetRefreshExpiry ¶
func (j *JWTAuthenticator) SetRefreshExpiry(duration time.Duration)
SetRefreshExpiry sets the refresh token expiry duration
func (*JWTAuthenticator) ValidateToken ¶
func (j *JWTAuthenticator) ValidateToken(ctx context.Context, token string) (*TokenClaims, error)
ValidateToken validates an access token and returns the user claims
type MemoryAPIKeyStore ¶ added in v1.0.2
type MemoryAPIKeyStore struct {
// contains filtered or unexported fields
}
MemoryAPIKeyStore is an in-memory implementation of APIKeyStore
func NewMemoryAPIKeyStore ¶ added in v1.0.2
func NewMemoryAPIKeyStore() *MemoryAPIKeyStore
NewMemoryAPIKeyStore creates a new in-memory API key store
func (*MemoryAPIKeyStore) DeleteAPIKey ¶ added in v1.0.2
func (s *MemoryAPIKeyStore) DeleteAPIKey(ctx context.Context, accessKey string) error
DeleteAPIKey deletes an API key
func (*MemoryAPIKeyStore) ListAPIKeys ¶ added in v1.0.2
func (s *MemoryAPIKeyStore) ListAPIKeys(ctx context.Context) ([]*APIKey, error)
ListAPIKeys lists all API keys
func (*MemoryAPIKeyStore) StoreAPIKey ¶ added in v1.0.2
func (s *MemoryAPIKeyStore) StoreAPIKey(ctx context.Context, key *APIKey) error
StoreAPIKey stores an API key
func (*MemoryAPIKeyStore) UpdateAPIKey ¶ added in v1.0.2
func (s *MemoryAPIKeyStore) UpdateAPIKey(ctx context.Context, key *APIKey) error
UpdateAPIKey updates an API key
type RBACAuthorizer ¶
type RBACAuthorizer struct {
}
RBACAuthorizer implements role-based access control authorization
func NewRBACAuthorizer ¶
func NewRBACAuthorizer() *RBACAuthorizer
NewRBACAuthorizer creates a new RBAC authorizer
func (*RBACAuthorizer) Authorize ¶
func (a *RBACAuthorizer) Authorize(ctx context.Context, user *types.User, permission types.Permission, resourceID string) error
Authorize checks if a user has permission to perform an action on a resource
func (*RBACAuthorizer) HasAnyRole ¶
HasAnyRole checks if a user has any of the specified roles
func (*RBACAuthorizer) HasPermission ¶
func (a *RBACAuthorizer) HasPermission(user *types.User, permission types.Permission) bool
HasPermission checks if a user has a specific permission
type RateLimiter ¶
type RateLimiter interface {
// Allow checks if an action is allowed for a key
Allow(ctx context.Context, key string) (bool, error)
// Reset resets the rate limit for a key
Reset(ctx context.Context, key string) error
}
RateLimiter is the interface for rate limiting
type Session ¶
type Session struct {
// SessionID is the unique session identifier
SessionID string
// UserID is the user's ID
UserID string
// User is the user information
User *types.User
// CreatedAt is when the session was created
CreatedAt time.Time
// ExpiresAt is when the session expires
ExpiresAt time.Time
// LastAccessedAt is when the session was last accessed
LastAccessedAt time.Time
// Metadata contains custom session data
Metadata map[string]interface{}
}
Session represents an authenticated user session
type SessionManager ¶
type SessionManager struct {
// contains filtered or unexported fields
}
SessionManager manages user sessions
func NewSessionManager ¶
func NewSessionManager() *SessionManager
NewSessionManager creates a new session manager
func (*SessionManager) CleanExpiredSessions ¶
func (sm *SessionManager) CleanExpiredSessions(ctx context.Context) error
CleanExpiredSessions removes all expired and idle sessions
func (*SessionManager) CreateSession ¶
func (sm *SessionManager) CreateSession(ctx context.Context, sessionID string, user *types.User) (*Session, error)
CreateSession creates a new session for a user
func (*SessionManager) DeleteSession ¶
func (sm *SessionManager) DeleteSession(ctx context.Context, sessionID string) error
DeleteSession deletes a session
func (*SessionManager) DeleteUserSessions ¶
func (sm *SessionManager) DeleteUserSessions(ctx context.Context, userID string) error
DeleteUserSessions deletes all sessions for a user
func (*SessionManager) GetSession ¶
GetSession retrieves a session by session ID
func (*SessionManager) GetUserSessions ¶
GetUserSessions retrieves all sessions for a user
func (*SessionManager) SessionCount ¶
func (sm *SessionManager) SessionCount() int
SessionCount returns the total number of active sessions
func (*SessionManager) SetIdleTimeout ¶
func (sm *SessionManager) SetIdleTimeout(duration time.Duration)
SetIdleTimeout sets the idle timeout duration
func (*SessionManager) SetSessionExpiry ¶
func (sm *SessionManager) SetSessionExpiry(duration time.Duration)
SetSessionExpiry sets the session expiry duration
func (*SessionManager) UserSessionCount ¶
func (sm *SessionManager) UserSessionCount(userID string) int
UserSessionCount returns the number of active sessions for a specific user
type TokenBucketLimiter ¶
type TokenBucketLimiter struct {
// contains filtered or unexported fields
}
TokenBucketLimiter implements token bucket rate limiting
func NewTokenBucketLimiter ¶
func NewTokenBucketLimiter(capacity int, refillRate int, refillPeriod time.Duration) *TokenBucketLimiter
NewTokenBucketLimiter creates a new token bucket rate limiter capacity: maximum number of tokens in the bucket refillRate: number of tokens to add per refill period refillPeriod: how often to refill tokens (e.g., 1 second)
func (*TokenBucketLimiter) CleanupOldBuckets ¶
func (rl *TokenBucketLimiter) CleanupOldBuckets(maxAge time.Duration)
CleanupOldBuckets removes buckets that haven't been used recently
type TokenClaims ¶
type TokenClaims struct {
// UserID is the unique identifier of the user
UserID string
// Username is the username
Username string
// Email is the user's email
Email string
// Role is the user's role
Role types.UserRole
// IssuedAt is when the token was issued
IssuedAt time.Time
// ExpiresAt is when the token expires
ExpiresAt time.Time
// Custom claims
Custom map[string]interface{}
}
TokenClaims represents the claims in a JWT token
func (*TokenClaims) IsExpired ¶
func (c *TokenClaims) IsExpired() bool
IsExpired checks if the token is expired
func (*TokenClaims) TimeUntilExpiry ¶
func (c *TokenClaims) TimeUntilExpiry() time.Duration
TimeUntilExpiry returns the duration until the token expires
type TokenStore ¶
type TokenStore interface {
// StoreToken stores a token
StoreToken(ctx context.Context, token string, userID string, expiresAt time.Time) error
// IsTokenRevoked checks if a token is revoked
IsTokenRevoked(ctx context.Context, token string) (bool, error)
// RevokeToken revokes a token
RevokeToken(ctx context.Context, token string) error
// CleanExpiredTokens removes expired tokens
CleanExpiredTokens(ctx context.Context) error
}
TokenStore is the interface for token storage (for revocation)
type UserStore ¶
type UserStore interface {
// GetUserByUsername gets a user by username or email
GetUserByUsername(ctx context.Context, username string) (*types.User, error)
// GetUserByID gets a user by ID
GetUserByID(ctx context.Context, userID string) (*types.User, error)
// CreateUser creates a new user
CreateUser(ctx context.Context, user *types.User, password string) error
// UpdateUser updates a user
UpdateUser(ctx context.Context, user *types.User) error
// DeleteUser deletes a user
DeleteUser(ctx context.Context, userID string) error
// ValidatePassword validates a user's password
ValidatePassword(ctx context.Context, userID string, password string) (bool, error)
// UpdatePassword updates a user's password
UpdatePassword(ctx context.Context, userID string, newPassword string) error
}
UserStore is the interface for user storage
type VideoGrant ¶ added in v1.0.2
type VideoGrant struct {
// RoomJoin allows joining a specific room
RoomJoin bool `json:"room_join,omitempty"`
// Room specifies the room name (required if RoomJoin is true)
Room string `json:"room,omitempty"`
// RoomCreate allows creating rooms
RoomCreate bool `json:"room_create,omitempty"`
// RoomList allows listing rooms
RoomList bool `json:"room_list,omitempty"`
// RoomAdmin grants admin privileges in the room
RoomAdmin bool `json:"room_admin,omitempty"`
// CanPublish allows publishing streams
CanPublish bool `json:"can_publish,omitempty"`
// CanSubscribe allows subscribing to streams
CanSubscribe bool `json:"can_subscribe,omitempty"`
// CanPublishData allows publishing data messages
CanPublishData bool `json:"can_publish_data,omitempty"`
// Hidden joins the room without being visible to others
Hidden bool `json:"hidden,omitempty"`
// Recorder identifies this as a recorder participant
Recorder bool `json:"recorder,omitempty"`
}
VideoGrant represents permissions for video room access