services

package
v0.9.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 16, 2025 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type JwtGenerator

type JwtGenerator struct {
	// TODO(UMV): we should add possibility to regenerate SignKey (probably via CLI)
	SignKey []byte
	Logger  *logging.AppLogger
}

JwtGenerator is useful struct that has methods to generate JWT tokens using golang-jwt utility

func (*JwtGenerator) GenerateJwtAccessToken

func (generator *JwtGenerator) GenerateJwtAccessToken(realmBaseUrl string, tokenType string, scope string, sessionData *data.UserSession,
	userData data.User) string

GenerateJwtAccessToken generates encoded string of access token in JWT format

This function combines a lot of arguments into one big JSON and encode it using SignKey (should be loaded by application)
* Parameters:
*    - realmBaseUrl - common path of all routes, usually ~/auth/realms/{realm}/ (see api/rest/getRealmBaseUrl)
*    - tokenType - string with type of token, rest.Bearer
*    - scope - verification scope, currently used only globals.ProfileEmailScope
*    - sessionData - full session data of authorized user
*    - userData - full public user data
* Returns: JWT-encoded string with access token

func (*JwtGenerator) GenerateJwtRefreshToken

func (generator *JwtGenerator) GenerateJwtRefreshToken(realmBaseUrl string, tokenType string, scope string, sessionData *data.UserSession) string

GenerateJwtRefreshToken generates encoded string of refresh token in JWT format

This function combines a lot of arguments into one big JSON and encode it using SignKey (should be loaded by application).
* FULLY SIMILAR To GenerateJwtAccessToken except it has not userData like previous func
* Parameters:
*    - realmBaseUrl - common path of all routes, usually ~/auth/realms/{realm}/ (see api/rest/getRealmBaseUrl)
*    - tokenType - string with type of token, rest.Refresh
*    - scope - verification scope, currently used only globals.ProfileEmailScope
*    - sessionData - full session data of authorized user
* Returns: JWT-encoded string with refresh token

type SecurityService

type SecurityService interface {
	// Validate checks whether provided tokenIssueData could be used for token generation or not
	Validate(tokenIssueData *dto.TokenGenerationData, realm *data.Realm) *data.OperationError
	// CheckCredentials validates provided in tokenIssueData pairs of clientId+clientSecret and username+password
	CheckCredentials(tokenIssueData *dto.TokenGenerationData, realmName string) *data.OperationError
	// GetCurrentUserByName return CurrentUser data by name
	GetCurrentUserByName(realmName string, userName string) data.User
	// GetCurrentUserById return CurrentUser data by id
	GetCurrentUserById(realmName string, userId uuid.UUID) data.User
	// StartOrUpdateSession starting new session on new successful token issue request or updates existing one with new request with valid token
	StartOrUpdateSession(realm string, userId uuid.UUID, duration int, refresh int) uuid.UUID
	// AssignTokens this function creates relation between userId and issued tokens (access and refresh)
	AssignTokens(realm string, userId uuid.UUID, accessToken *string, refreshToken *string)
	// GetSession returns user session data
	GetSession(realm string, userId uuid.UUID) *data.UserSession
	// GetSessionByAccessToken returns session data by access token
	GetSessionByAccessToken(realm string, token *string) *data.UserSession
	// GetSessionByRefreshToken returns session data by access token
	GetSessionByRefreshToken(realm string, token *string) *data.UserSession
	// CheckSessionAndRefreshExpired checks is user tokens expired or not (could user use them or should get new ones)
	CheckSessionAndRefreshExpired(realm string, userId uuid.UUID) (bool, bool)
}

SecurityService is an interface that implements all checks and manipulation with sessions data

func CreateSecurityService

func CreateSecurityService(dataProvider *managers.DataContext, logger *logging.AppLogger) SecurityService

CreateSecurityService creates instance of TokenBasedSecurityService as SecurityService

This function creates SecurityService based on dataProvider as managers.DataContext
* Parameters:
*    - dataProvider - any managers.DataContext implementation (config.FILE, config.REDIS)
*    - logger - logger service
* Returns instance of TokenBasedSecurityService as SecurityService

type TokenBasedSecurityService

type TokenBasedSecurityService struct {
	DataProvider *managers.DataContext
	UserSessions map[string][]data.UserSession
	// contains filtered or unexported fields
}

TokenBasedSecurityService structure that implements SecurityService

func (*TokenBasedSecurityService) AssignTokens

func (service *TokenBasedSecurityService) AssignTokens(realm string, userId uuid.UUID, accessToken *string, refreshToken *string)

AssignTokens saves obtained tokens in existing UserSession

This function saves tokens in existing session searching it by userId (session must exist)
* Parameters:
*    - realm - name of realm
*    - userId - user identifier
*    - accessToken - obtained access token
*    - refreshToken - obtained refresh token
* Returns nothing

func (*TokenBasedSecurityService) CheckCredentials

func (service *TokenBasedSecurityService) CheckCredentials(tokenIssueData *dto.TokenGenerationData, realmName string) *data.OperationError

CheckCredentials function that checks provided credentials (username and password)

This function extracts data.User from DataProvider and also this function checks password from user credentials
* Parameters:
*    - tokenIssueData - issues token
*    - realm - name of a data.Realm
* Returns: nil if credentials are valid, otherwise error (data.OperationError) with description

func (*TokenBasedSecurityService) CheckSessionAndRefreshExpired added in v0.9.1

func (service *TokenBasedSecurityService) CheckSessionAndRefreshExpired(realm string, userId uuid.UUID) (bool, bool)

CheckSessionAndRefreshExpired this function checks both token are expired or not

This function compares current time with expiration time (usually refresh token expires earlier than access)
* Parameters:
*    - realm - name of a realm
*    - userId - user identifier
* Returns tuple of (bool, bool) with values for access token (first) and refresh token (second) expired. If token expired value is true.

func (*TokenBasedSecurityService) GetCurrentUserById added in v0.9.1

func (service *TokenBasedSecurityService) GetCurrentUserById(realmName string, userId uuid.UUID) data.User

GetCurrentUserById return public user info by username

This function simply return user by id, by querying user from DataProvider
* Parameters:
*    - realm - realm previously obtained from DataProvider
*    - userId - user identifier
* Returns user from DataProvider or nil (user not found)

func (*TokenBasedSecurityService) GetCurrentUserByName added in v0.9.1

func (service *TokenBasedSecurityService) GetCurrentUserByName(realmName string, userName string) data.User

GetCurrentUserByName return public user info by username

This function simply return user by name, by querying user from DataProvider
* Parameters:
*    - realm - realm previously obtained from DataProvider
*    - userName - name of user
* Returns user from DataProvider or nil (user not found)

func (*TokenBasedSecurityService) GetSession

func (service *TokenBasedSecurityService) GetSession(realm string, userId uuid.UUID) *data.UserSession

GetSession returns user session related to user

Function iterates over sessions and searches appropriate session by comparing userId with s.UserId
* Parameters:
*    - realm - name of a realm
*    - userId - user identifier
* Returns data.UserSession if found or nil

func (*TokenBasedSecurityService) GetSessionByAccessToken

func (service *TokenBasedSecurityService) GetSessionByAccessToken(realm string, token *string) *data.UserSession

GetSessionByAccessToken returns user session related to user by access token

Function iterates over sessions and searches appropriate session by comparing token with s.JwtAccessToken
* Parameters:
*    - realm - name of a realm
*    - token - access token
* Returns data.UserSession if found or nil

func (*TokenBasedSecurityService) GetSessionByRefreshToken added in v0.9.1

func (service *TokenBasedSecurityService) GetSessionByRefreshToken(realm string, token *string) *data.UserSession

GetSessionByRefreshToken returns user session related to user by refresh token

Function iterates over sessions and searches appropriate session by comparing token with s.JwtRefreshToken
* Parameters:
*    - realm - name of a realm
*    - token - refresh token
* Returns data.UserSession if found or nil

func (*TokenBasedSecurityService) StartOrUpdateSession

func (service *TokenBasedSecurityService) StartOrUpdateSession(realm string, userId uuid.UUID, duration int, refresh int) uuid.UUID

StartOrUpdateSession this function starts new session or updates existing one

This function starts new session when user successfully gets access token, duration && refresh takes from data.Realm data.Client
* Sessions storing in internal memory, probably it will be changed and store as temporary key
* Parameters:
*    - realm - realm name
*    - userId - user identifier
*    - duration - access token == session duration
*    - refresh - refresh token duration
* Returns: identifier of session

func (*TokenBasedSecurityService) Validate

func (service *TokenBasedSecurityService) Validate(tokenIssueData *dto.TokenGenerationData, realm *data.Realm) *data.OperationError

Validate functions that check whether provided clientId and clientSecret valid or not

First this function get find data.Realm data.Client by clientId, if client is data.Public there is nothing to do, for confidential
* clients function checks provided clientSecret
* Parameters:
*    - tokenIssueData data required for issue new token
*    - realm - obtained from managers.DataContext realm
* Returns: nil if Validation passed, otherwise error (data.OperationError) with description

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL