Documentation
¶
Index ¶
- Constants
- Variables
- func InvalidToken() *errs.AuthsomeError
- func MaxSessionsReached(limit int) *errs.AuthsomeError
- func MissingAppContext() *errs.AuthsomeError
- func ParseSameSite(s string) http.SameSite
- func SessionCreationFailed(err error) *errs.AuthsomeError
- func SessionExpired() *errs.AuthsomeError
- func SessionNotFound() *errs.AuthsomeError
- func SessionRevocationFailed(err error) *errs.AuthsomeError
- func SetCookie(c forge.Context, token string, expiresAt time.Time, config *CookieConfig) error
- type Config
- type CookieConfig
- type CreateSessionRequest
- type ListSessionsFilter
- type ListSessionsResponse
- type Repository
- type Service
- func (s *Service) Create(ctx context.Context, req *CreateSessionRequest) (*Session, error)
- func (s *Service) FindByID(ctx context.Context, id xid.ID) (*Session, error)
- func (s *Service) FindByToken(ctx context.Context, token string) (*Session, error)
- func (s *Service) ListSessions(ctx context.Context, filter *ListSessionsFilter) (*ListSessionsResponse, error)
- func (s *Service) Revoke(ctx context.Context, token string) error
- func (s *Service) RevokeByID(ctx context.Context, id xid.ID) error
- type ServiceInterface
- type Session
Constants ¶
const ( CodeSessionNotFound = "SESSION_NOT_FOUND" CodeSessionExpired = "SESSION_EXPIRED" CodeSessionCreationFailed = "SESSION_CREATION_FAILED" CodeSessionRevocationFailed = "SESSION_REVOCATION_FAILED" CodeInvalidToken = "INVALID_TOKEN" CodeMaxSessionsReached = "MAX_SESSIONS_REACHED" CodeMissingAppContext = "MISSING_APP_CONTEXT" )
Variables ¶
var ( ErrSessionNotFound = &errs.AuthsomeError{Code: CodeSessionNotFound} ErrSessionExpired = &errs.AuthsomeError{Code: CodeSessionExpired} ErrSessionCreationFailed = &errs.AuthsomeError{Code: CodeSessionCreationFailed} ErrSessionRevocationFailed = &errs.AuthsomeError{Code: CodeSessionRevocationFailed} ErrInvalidToken = &errs.AuthsomeError{Code: CodeInvalidToken} ErrMaxSessionsReached = &errs.AuthsomeError{Code: CodeMaxSessionsReached} ErrMissingAppContext = &errs.AuthsomeError{Code: CodeMissingAppContext} )
Functions ¶
func InvalidToken ¶
func InvalidToken() *errs.AuthsomeError
func MaxSessionsReached ¶
func MaxSessionsReached(limit int) *errs.AuthsomeError
func MissingAppContext ¶
func MissingAppContext() *errs.AuthsomeError
func ParseSameSite ¶ added in v0.0.2
ParseSameSite converts a string to http.SameSite constant Returns Lax as default for invalid values
func SessionCreationFailed ¶
func SessionCreationFailed(err error) *errs.AuthsomeError
func SessionExpired ¶
func SessionExpired() *errs.AuthsomeError
func SessionNotFound ¶
func SessionNotFound() *errs.AuthsomeError
func SessionRevocationFailed ¶
func SessionRevocationFailed(err error) *errs.AuthsomeError
Types ¶
type Config ¶
type Config struct {
DefaultTTL time.Duration
RememberTTL time.Duration
AllowMultiple bool
RequireUserAuth bool
}
Config represents session service configuration
type CookieConfig ¶ added in v0.0.2
type CookieConfig struct {
Enabled bool `json:"enabled"` // Enable/disable cookie setting
Name string `json:"name"` // Cookie name (default: "authsome_session")
Domain string `json:"domain,omitempty"` // Cookie domain
Path string `json:"path"` // Cookie path (default: "/")
Secure *bool `json:"secure,omitempty"` // Secure flag (nil = auto-detect based on TLS)
HttpOnly bool `json:"httpOnly"` // HttpOnly flag (default: true)
SameSite string `json:"sameSite,omitempty"` // SameSite: "Strict", "Lax", "None" (default: "Lax")
MaxAge *int `json:"maxAge,omitempty"` // MaxAge in seconds (nil = use session duration)
}
CookieConfig represents the configuration for session cookies
func DefaultCookieConfig ¶ added in v0.0.2
func DefaultCookieConfig() CookieConfig
DefaultCookieConfig returns a cookie configuration with sensible defaults
func UnmarshalCookieConfigFromJSON ¶ added in v0.0.2
func UnmarshalCookieConfigFromJSON(data []byte) (*CookieConfig, error)
UnmarshalCookieConfigFromJSON unmarshals cookie config from JSON bytes This is a helper for extracting cookie config from app metadata
func (*CookieConfig) Merge ¶ added in v0.0.2
func (c *CookieConfig) Merge(override *CookieConfig) *CookieConfig
Merge applies per-app overrides to the base config and returns a new merged config The override config takes precedence over the base config for all non-zero values
type CreateSessionRequest ¶
type CreateSessionRequest struct {
AppID xid.ID `json:"appID"`
EnvironmentID *xid.ID `json:"environmentID,omitempty"`
OrganizationID *xid.ID `json:"organizationID,omitempty"`
UserID xid.ID `json:"userId"`
IPAddress string `json:"ipAddress"`
UserAgent string `json:"userAgent"`
Remember bool `json:"remember"`
}
CreateSessionRequest represents the data to create a session
type ListSessionsFilter ¶
type ListSessionsFilter struct {
pagination.PaginationParams
AppID xid.ID `json:"appId" query:"app_id"`
EnvironmentID *xid.ID `json:"environmentId,omitempty" query:"environment_id"`
OrganizationID *xid.ID `json:"organizationId,omitempty" query:"organization_id"`
UserID *xid.ID `json:"userId,omitempty" query:"user_id"`
Active *bool `json:"active,omitempty" query:"active"` // Filter by expired/active
}
ListSessionsFilter represents filter parameters for listing sessions
type ListSessionsResponse ¶
type ListSessionsResponse = pagination.PageResponse[*Session]
ListSessionsResponse is a type alias for paginated response
type Repository ¶
type Repository interface {
// Create/Read operations
CreateSession(ctx context.Context, s *schema.Session) error
FindSessionByID(ctx context.Context, id xid.ID) (*schema.Session, error)
FindSessionByToken(ctx context.Context, token string) (*schema.Session, error)
// List with pagination
ListSessions(ctx context.Context, filter *ListSessionsFilter) (*pagination.PageResponse[*schema.Session], error)
// Update/Delete operations
RevokeSession(ctx context.Context, token string) error
RevokeSessionByID(ctx context.Context, id xid.ID) error
// Count operations
CountSessions(ctx context.Context, appID xid.ID, userID *xid.ID) (int, error)
// Maintenance
CleanupExpiredSessions(ctx context.Context) (int, error)
}
Repository defines session persistence operations Following ISP - works with schema types
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service provides session-related operations
func NewService ¶
func NewService(repo Repository, cfg Config, webhookSvc *webhook.Service) *Service
NewService creates a new session service
func (*Service) FindByToken ¶
FindByToken retrieves a session by token
func (*Service) ListSessions ¶
func (s *Service) ListSessions(ctx context.Context, filter *ListSessionsFilter) (*ListSessionsResponse, error)
ListSessions retrieves sessions with filtering and pagination
type ServiceInterface ¶
type ServiceInterface interface {
Create(ctx context.Context, req *CreateSessionRequest) (*Session, error)
FindByToken(ctx context.Context, token string) (*Session, error)
FindByID(ctx context.Context, id xid.ID) (*Session, error)
ListSessions(ctx context.Context, filter *ListSessionsFilter) (*ListSessionsResponse, error)
Revoke(ctx context.Context, token string) error
RevokeByID(ctx context.Context, id xid.ID) error
}
ServiceInterface defines the contract for session service operations This allows plugins to decorate the service with additional behavior
type Session ¶
Session represents a user session (DTO)
func FromSchemaSession ¶
FromSchemaSession converts schema.Session to Session DTO
func FromSchemaSessions ¶
FromSchemaSessions converts multiple schema.Session to Session DTOs