storage

package
v0.0.0-...-726ff5c Latest Latest
Warning

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

Go to latest
Published: Apr 3, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewDefaultAccountRepository

func NewDefaultAccountRepository(db *pgxpool.Pool) repository.AccountRepository

func NewDefaultCredentialRepository

func NewDefaultCredentialRepository(db *pgxpool.Pool) repository.CredentialRepository

func NewDefaultIdentityRepository

func NewDefaultIdentityRepository(db *pgxpool.Pool) repository.IdentityRepository

func NewDefaultResetPasswordRequestRepository

func NewDefaultResetPasswordRequestRepository(
	db *pgxpool.Pool,
	config ResetPasswordConfig,
) repository.ResetPasswordRequestRepository

func NewDefaultTokenRepository

func NewDefaultTokenRepository(
	db *pgxpool.Pool,
	hashStrategy hash.TokenHashStrategy,
) repository.TokenRepository

Types

type AccessToken

type AccessToken struct {
	Hash       string    `db:"hash" json:"hash"`
	IdentityID uuid.UUID `db:"identity_id" json:"identityId"`
	SessionID  uuid.UUID `db:"session_id" json:"sessionId"`
	AccountID  uuid.UUID `db:"account_id" json:"accountId"`
	Roles      []string  `db:"roles" json:"roles"`
	Data       []byte    `db:"data" json:"data"`
	RevokedAt  null.Time `db:"revoked_at" json:"revokedAt"`
	ExpiresAt  time.Time `db:"expires_at" json:"expiresAt"`
	CreatedAt  time.Time `db:"created_at" json:"createdAt"`
}

type Account

type Account struct {
	ID        uuid.UUID     `db:"id" json:"id"`
	Status    AccountStatus `db:"status" json:"status"`
	Roles     []string      `db:"roles" json:"roles"`
	Data      []byte        `db:"data" json:"data"`
	UpdatedAt time.Time     `db:"updated_at" json:"updatedAt"`
	CreatedAt time.Time     `db:"created_at" json:"createdAt"`
}

type AccountStatus

type AccountStatus string
const (
	AccountStatusActive  AccountStatus = "active"
	AccountStatusBlocked AccountStatus = "blocked"
)

func AllAccountStatusValues

func AllAccountStatusValues() []AccountStatus

func (*AccountStatus) Scan

func (e *AccountStatus) Scan(src interface{}) error

type AddRolesParams

type AddRolesParams struct {
	Roles []string  `db:"roles" json:"roles"`
	ID    uuid.UUID `db:"id" json:"id"`
}

type CreateAccessTokenParams

type CreateAccessTokenParams struct {
	Hash       string    `db:"hash" json:"hash"`
	IdentityID uuid.UUID `db:"identity_id" json:"identityId"`
	SessionID  uuid.UUID `db:"session_id" json:"sessionId"`
	AccountID  uuid.UUID `db:"account_id" json:"accountId"`
	Roles      []string  `db:"roles" json:"roles"`
	Data       []byte    `db:"data" json:"data"`
	ExpiresAt  time.Time `db:"expires_at" json:"expiresAt"`
}

type CreateCredentialParams

type CreateCredentialParams struct {
	AccountID uuid.UUID `db:"account_id" json:"accountId"`
	Type      string    `db:"type" json:"type"`
	Hash      string    `db:"hash" json:"hash"`
	ExpiredAt null.Time `db:"expired_at" json:"expiredAt"`
}

type CreateIdentityParams

type CreateIdentityParams struct {
	ID        uuid.UUID `db:"id" json:"id"`
	Identity  string    `db:"identity" json:"identity"`
	AccountID uuid.UUID `db:"account_id" json:"accountId"`
	Data      []byte    `db:"data" json:"data"`
	Type      string    `db:"type" json:"type"`
}

type CreateRefreshTokenParams

type CreateRefreshTokenParams struct {
	Hash       string    `db:"hash" json:"hash"`
	SessionID  uuid.UUID `db:"session_id" json:"sessionId"`
	IdentityID uuid.UUID `db:"identity_id" json:"identityId"`
	ExpiresAt  time.Time `db:"expires_at" json:"expiresAt"`
}

type CreateResetPasswordRequestParams

type CreateResetPasswordRequestParams struct {
	ID        uuid.UUID `db:"id" json:"id"`
	AccountID uuid.UUID `db:"account_id" json:"accountId"`
	Token     string    `db:"token" json:"token"`
}

type Credential

type Credential struct {
	Hash      string    `db:"hash" json:"hash"`
	AccountID uuid.UUID `db:"account_id" json:"accountId"`
	Type      string    `db:"type" json:"type"`
	ExpiredAt null.Time `db:"expired_at" json:"expiredAt"`
	CreatedAt time.Time `db:"created_at" json:"createdAt"`
}

type DBTX

type DBTX interface {
	Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
	Query(context.Context, string, ...interface{}) (pgx.Rows, error)
	QueryRow(context.Context, string, ...interface{}) pgx.Row
}

type DefaultAccountRepository

type DefaultAccountRepository struct {
	// contains filtered or unexported fields
}

func (*DefaultAccountRepository) AddRoles

func (r *DefaultAccountRepository) AddRoles(
	ctx context.Context,
	accountID uuid.UUID,
	roles ...string,
) error

func (*DefaultAccountRepository) BlockAccount

func (r *DefaultAccountRepository) BlockAccount(ctx context.Context, ID uuid.UUID) error

func (*DefaultAccountRepository) Create

func (r *DefaultAccountRepository) Create(
	ctx context.Context,
	ID uuid.UUID,
	roles []string,
	userInfo map[string]interface{},
) (repository.Account, error)

func (*DefaultAccountRepository) Get

func (*DefaultAccountRepository) RemoveAccount

func (r *DefaultAccountRepository) RemoveAccount(ctx context.Context, ID uuid.UUID) error

func (*DefaultAccountRepository) RemoveRoles

func (r *DefaultAccountRepository) RemoveRoles(
	ctx context.Context,
	accountID uuid.UUID,
	roles ...string,
) error

func (*DefaultAccountRepository) Transform

func (r *DefaultAccountRepository) Transform(
	account Account,
) repository.Account

type DefaultCredentialRepository

type DefaultCredentialRepository struct {
	// contains filtered or unexported fields
}

func (*DefaultCredentialRepository) Create

func (r *DefaultCredentialRepository) Create(
	ctx context.Context,
	accountID uuid.UUID,
	credentialHash string,
	credType repository.CredentialType,
	expiredAt *time.Time,
) (repository.Credential, error)

func (*DefaultCredentialRepository) GetLast

func (r *DefaultCredentialRepository) GetLast(
	ctx context.Context,
	accountID uuid.UUID,
	credType string,
) (repository.Credential, error)

func (*DefaultCredentialRepository) RemoveCredentials

func (r *DefaultCredentialRepository) RemoveCredentials(ctx context.Context, accountID uuid.UUID) error

type DefaultIdentityRepository

type DefaultIdentityRepository struct {
	// contains filtered or unexported fields
}

func (*DefaultIdentityRepository) BlockIdentity

func (r *DefaultIdentityRepository) BlockIdentity(ctx context.Context, identity string) error

func (*DefaultIdentityRepository) Create

func (r *DefaultIdentityRepository) Create(
	ctx context.Context,
	identity string,
	accountID uuid.UUID,
	identityType repository.IdentityType,
	additionalData map[string]interface{},
) (repository.Identity, error)

func (*DefaultIdentityRepository) Get

func (*DefaultIdentityRepository) GetByAccountID

func (r *DefaultIdentityRepository) GetByAccountID(ctx context.Context, accountID uuid.UUID) (
	[]repository.Identity,
	error,
)

func (*DefaultIdentityRepository) GetById

func (*DefaultIdentityRepository) RemoveAccountIdentities

func (r *DefaultIdentityRepository) RemoveAccountIdentities(ctx context.Context, accountID uuid.UUID) error

func (*DefaultIdentityRepository) RemoveIdentity

func (r *DefaultIdentityRepository) RemoveIdentity(ctx context.Context, identity string) error

func (*DefaultIdentityRepository) Transform

func (r *DefaultIdentityRepository) Transform(
	identity Identity,
) repository.Identity

type DefaultResetPasswordRequestRepository

type DefaultResetPasswordRequestRepository struct {
	// contains filtered or unexported fields
}

func (*DefaultResetPasswordRequestRepository) CreateResetPassword

func (r *DefaultResetPasswordRequestRepository) CreateResetPassword(
	ctx context.Context,
	id uuid.UUID,
	accountID uuid.UUID,
	token string,
) (repository.ResetPasswordRequest, error)

func (*DefaultResetPasswordRequestRepository) ExpireRequest

func (*DefaultResetPasswordRequestRepository) GetActiveRequest

func (*DefaultResetPasswordRequestRepository) GetResetPasswordByToken

func (*DefaultResetPasswordRequestRepository) Transform

func (*DefaultResetPasswordRequestRepository) UpdateLastSent

func (*DefaultResetPasswordRequestRepository) UseResetPassword

func (r *DefaultResetPasswordRequestRepository) UseResetPassword(ctx context.Context, ID uuid.UUID) error

type DefaultTokenRepository

type DefaultTokenRepository struct {
	// contains filtered or unexported fields
}

func (*DefaultTokenRepository) CreateAccessToken

func (r *DefaultTokenRepository) CreateAccessToken(
	ctx context.Context,
	accessToken string,
	identityId uuid.UUID,
	roles []string,
	sessionId uuid.UUID,
	data map[string]interface{},
	expiresAt time.Time,
) (repository.AccessToken, error)

func (*DefaultTokenRepository) CreateRefreshToken

func (r *DefaultTokenRepository) CreateRefreshToken(
	ctx context.Context,
	refreshToken string,
	sessionId uuid.UUID,
	identityID uuid.UUID,
	expiresAt time.Time,
) (repository.RefreshToken, error)

func (*DefaultTokenRepository) ExpireTokens

func (r *DefaultTokenRepository) ExpireTokens(
	ctx context.Context,
	sessionId uuid.UUID,
	lag time.Duration,
	tokenType repository.ExpirationTokenType,
) error

ExpireTokens makes the valid tokens of the given session expired. It returns an error if the operation failed. Params:

  • sessionId - the session where we want to expire the tokens.
  • lag - the parameter is used to make the tokens expired in the future. It is helpful to avoid race conditions in the token refreshing. We make tokens expired in several seconds to get the time for frontend to refresh the tokens in local storage and get the responses from simultaneous requests to the backend without error.
  • tokenType - the type of tokens that we want to expire.

func (*DefaultTokenRepository) GetAccessToken

func (r *DefaultTokenRepository) GetAccessToken(ctx context.Context, accessToken string) (
	repository.AccessToken,
	error,
)

func (*DefaultTokenRepository) GetRefreshToken

func (r *DefaultTokenRepository) GetRefreshToken(ctx context.Context, refreshToken string) (
	repository.RefreshToken,
	error,
)

func (*DefaultTokenRepository) RevokeAccountTokens

func (r *DefaultTokenRepository) RevokeAccountTokens(ctx context.Context, accountId uuid.UUID) error

func (*DefaultTokenRepository) RevokeSessionTokens

func (r *DefaultTokenRepository) RevokeSessionTokens(ctx context.Context, sessionId uuid.UUID) error

type ExpireSessionAccessTokensParams

type ExpireSessionAccessTokensParams struct {
	ExpiresAt time.Time `db:"expires_at" json:"expiresAt"`
	SessionID uuid.UUID `db:"session_id" json:"sessionId"`
}

type ExpireSessionRefreshTokensParams

type ExpireSessionRefreshTokensParams struct {
	ExpiresAt time.Time `db:"expires_at" json:"expiresAt"`
	SessionID uuid.UUID `db:"session_id" json:"sessionId"`
}

type FindLastCredentialOfTypeParams

type FindLastCredentialOfTypeParams struct {
	AccountID uuid.UUID `db:"account_id" json:"accountId"`
	Type      string    `db:"type" json:"type"`
}

type Identity

type Identity struct {
	ID        uuid.UUID      `db:"id" json:"id"`
	Identity  string         `db:"identity" json:"identity"`
	AccountID uuid.UUID      `db:"account_id" json:"accountId"`
	Status    IdentityStatus `db:"status" json:"status"`
	Data      []byte         `db:"data" json:"data"`
	UpdatedAt time.Time      `db:"updated_at" json:"updatedAt"`
	CreatedAt time.Time      `db:"created_at" json:"createdAt"`
	// Type of the identity (eg. email, phone, google-auth, etc.).
	Type string `db:"type" json:"type"`
}

type IdentityStatus

type IdentityStatus string
const (
	IdentityStatusActive      IdentityStatus = "active"
	IdentityStatusBlocked     IdentityStatus = "blocked"
	IdentityStatusNotVerified IdentityStatus = "not-verified"
)

func AllIdentityStatusValues

func AllIdentityStatusValues() []IdentityStatus

func (*IdentityStatus) Scan

func (e *IdentityStatus) Scan(src interface{}) error

type NullAccountStatus

type NullAccountStatus struct {
	AccountStatus AccountStatus `json:"accountStatus"`
	Valid         bool          `json:"valid"` // Valid is true if AccountStatus is not NULL
}

func (*NullAccountStatus) Scan

func (ns *NullAccountStatus) Scan(value interface{}) error

Scan implements the Scanner interface.

func (NullAccountStatus) Value

func (ns NullAccountStatus) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type NullIdentityStatus

type NullIdentityStatus struct {
	IdentityStatus IdentityStatus `json:"identityStatus"`
	Valid          bool           `json:"valid"` // Valid is true if IdentityStatus is not NULL
}

func (*NullIdentityStatus) Scan

func (ns *NullIdentityStatus) Scan(value interface{}) error

Scan implements the Scanner interface.

func (NullIdentityStatus) Value

func (ns NullIdentityStatus) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type NullResetPasswordStatus

type NullResetPasswordStatus struct {
	ResetPasswordStatus ResetPasswordStatus `json:"resetPasswordStatus"`
	Valid               bool                `json:"valid"` // Valid is true if ResetPasswordStatus is not NULL
}

func (*NullResetPasswordStatus) Scan

func (ns *NullResetPasswordStatus) Scan(value interface{}) error

Scan implements the Scanner interface.

func (NullResetPasswordStatus) Value

func (ns NullResetPasswordStatus) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type Queries

type Queries struct {
	// contains filtered or unexported fields
}

func New

func New(db DBTX) *Queries

func (*Queries) ActivateIdentity

func (q *Queries) ActivateIdentity(ctx context.Context, id uuid.UUID) error

func (*Queries) AddRoles

func (q *Queries) AddRoles(ctx context.Context, arg AddRolesParams) error

func (*Queries) BlockAccount

func (q *Queries) BlockAccount(ctx context.Context, id uuid.UUID) error

func (*Queries) BlockIdentitiesOfAccount

func (q *Queries) BlockIdentitiesOfAccount(ctx context.Context, accountID uuid.UUID) error

func (*Queries) BlockIdentity

func (q *Queries) BlockIdentity(ctx context.Context, id uuid.UUID) error

func (*Queries) CreateAccessToken

func (q *Queries) CreateAccessToken(ctx context.Context, arg CreateAccessTokenParams) (AccessToken, error)

func (*Queries) CreateCredential

func (q *Queries) CreateCredential(ctx context.Context, arg CreateCredentialParams) (Credential, error)

func (*Queries) CreateIdentity

func (q *Queries) CreateIdentity(ctx context.Context, arg CreateIdentityParams) (Identity, error)

func (*Queries) CreateRefreshToken

func (q *Queries) CreateRefreshToken(ctx context.Context, arg CreateRefreshTokenParams) (RefreshToken, error)

func (*Queries) CreateResetPasswordRequest

func (q *Queries) CreateResetPasswordRequest(ctx context.Context, arg CreateResetPasswordRequestParams) (ResetPasswordRequest, error)

func (*Queries) DeleteResetPasswordRequests

func (q *Queries) DeleteResetPasswordRequests(ctx context.Context, accountID uuid.UUID) error

func (*Queries) ExpireResetPasswordRequest

func (q *Queries) ExpireResetPasswordRequest(ctx context.Context, id uuid.UUID) error

func (*Queries) ExpireSessionAccessTokens

func (q *Queries) ExpireSessionAccessTokens(ctx context.Context, arg ExpireSessionAccessTokensParams) error

func (*Queries) ExpireSessionRefreshTokens

func (q *Queries) ExpireSessionRefreshTokens(ctx context.Context, arg ExpireSessionRefreshTokensParams) error

func (*Queries) FindAccessTokenByHash

func (q *Queries) FindAccessTokenByHash(ctx context.Context, hash string) (AccessToken, error)

func (*Queries) FindAccount

func (q *Queries) FindAccount(ctx context.Context, id uuid.UUID) (Account, error)

func (*Queries) FindAccountIdentities

func (q *Queries) FindAccountIdentities(ctx context.Context, accountID uuid.UUID) ([]Identity, error)

func (*Queries) FindAccountNotRevokedSessionIds

func (q *Queries) FindAccountNotRevokedSessionIds(ctx context.Context, accountID uuid.UUID) ([]uuid.UUID, error)

func (*Queries) FindAllCredentialsOfType

func (q *Queries) FindAllCredentialsOfType(ctx context.Context, type_ string) ([]Credential, error)

func (*Queries) FindIdentity

func (q *Queries) FindIdentity(ctx context.Context, identity string) (Identity, error)

func (*Queries) FindIdentityById

func (q *Queries) FindIdentityById(ctx context.Context, id uuid.UUID) (Identity, error)

func (*Queries) FindLastCredential

func (q *Queries) FindLastCredential(ctx context.Context, accountID uuid.UUID) (Credential, error)

func (*Queries) FindLastCredentialOfType

func (q *Queries) FindLastCredentialOfType(ctx context.Context, arg FindLastCredentialOfTypeParams) (Credential, error)

func (*Queries) FindRefreshTokenByHash

func (q *Queries) FindRefreshTokenByHash(ctx context.Context, hash string) (RefreshToken, error)

func (*Queries) GetReadyForUseResetPasswordRequest

func (q *Queries) GetReadyForUseResetPasswordRequest(ctx context.Context, accountID uuid.UUID) (ResetPasswordRequest, error)

func (*Queries) GetResetPasswordRequestByToken

func (q *Queries) GetResetPasswordRequestByToken(ctx context.Context, token string) (ResetPasswordRequest, error)

func (*Queries) RegisterAccount

func (q *Queries) RegisterAccount(ctx context.Context, arg RegisterAccountParams) (Account, error)

func (*Queries) RemoveAccount

func (q *Queries) RemoveAccount(ctx context.Context, id uuid.UUID) error

func (*Queries) RemoveCredentialsOfAccount

func (q *Queries) RemoveCredentialsOfAccount(ctx context.Context, accountID uuid.UUID) error

func (*Queries) RemoveIdentitiesOfAccount

func (q *Queries) RemoveIdentitiesOfAccount(ctx context.Context, accountID uuid.UUID) error

func (*Queries) RemoveIdentity

func (q *Queries) RemoveIdentity(ctx context.Context, id uuid.UUID) error

func (*Queries) RemoveRoles

func (q *Queries) RemoveRoles(ctx context.Context, arg RemoveRolesParams) error

func (*Queries) RequestIdentityVerification

func (q *Queries) RequestIdentityVerification(ctx context.Context, id uuid.UUID) error

func (*Queries) RevokeAccessToken

func (q *Queries) RevokeAccessToken(ctx context.Context, hash string) error

func (*Queries) RevokeAccountAccessTokens

func (q *Queries) RevokeAccountAccessTokens(ctx context.Context, accountID uuid.UUID) error

func (*Queries) RevokeRefreshToken

func (q *Queries) RevokeRefreshToken(ctx context.Context, hash string) error

func (*Queries) RevokeSessionAccessTokens

func (q *Queries) RevokeSessionAccessTokens(ctx context.Context, sessionID uuid.UUID) error

func (*Queries) RevokeSessionRefreshTokens

func (q *Queries) RevokeSessionRefreshTokens(ctx context.Context, sessionID uuid.UUID) error

func (*Queries) RevokeSessionsRefreshTokens

func (q *Queries) RevokeSessionsRefreshTokens(ctx context.Context, sessionIds []uuid.UUID) error

func (*Queries) UnblockAccount

func (q *Queries) UnblockAccount(ctx context.Context, id uuid.UUID) error

func (*Queries) UpdateLastSentRequest

func (q *Queries) UpdateLastSentRequest(ctx context.Context, id uuid.UUID) error

func (*Queries) UseResetPasswordRequest

func (q *Queries) UseResetPasswordRequest(ctx context.Context, id uuid.UUID) error

func (*Queries) WithTx

func (q *Queries) WithTx(tx pgx.Tx) *Queries

type RefreshToken

type RefreshToken struct {
	Hash       string    `db:"hash" json:"hash"`
	SessionID  uuid.UUID `db:"session_id" json:"sessionId"`
	IdentityID uuid.UUID `db:"identity_id" json:"identityId"`
	RevokedAt  null.Time `db:"revoked_at" json:"revokedAt"`
	ExpiresAt  time.Time `db:"expires_at" json:"expiresAt"`
	CreatedAt  time.Time `db:"created_at" json:"createdAt"`
}

type RegisterAccountParams

type RegisterAccountParams struct {
	ID    uuid.UUID `db:"id" json:"id"`
	Roles []string  `db:"roles" json:"roles"`
	Data  []byte    `db:"data" json:"data"`
}

type RemoveRolesParams

type RemoveRolesParams struct {
	Roles []string  `db:"roles" json:"roles"`
	ID    uuid.UUID `db:"id" json:"id"`
}

type ResetPasswordConfig

type ResetPasswordConfig struct {
	ResetPasswordLife time.Duration `env:"AUTH_RESET_PASSWORD_LIFE, default=1h"`
	ResendCooldown    time.Duration `env:"AUTH_RESET_PASSWORD_RESEND_COOLDOWN, default=5m"`
}

type ResetPasswordRequest

type ResetPasswordRequest struct {
	ID         uuid.UUID           `db:"id" json:"id"`
	AccountID  uuid.UUID           `db:"account_id" json:"accountId"`
	Status     ResetPasswordStatus `db:"status" json:"status"`
	Token      string              `db:"token" json:"token"`
	LastSendAt null.Time           `db:"last_send_at" json:"lastSendAt"`
	UsedAt     null.Time           `db:"used_at" json:"usedAt"`
	CreatedAt  time.Time           `db:"created_at" json:"createdAt"`
}

type ResetPasswordStatus

type ResetPasswordStatus string
const (
	ResetPasswordStatusActive  ResetPasswordStatus = "active"
	ResetPasswordStatusExpired ResetPasswordStatus = "expired"
	ResetPasswordStatusUsed    ResetPasswordStatus = "used"
)

func AllResetPasswordStatusValues

func AllResetPasswordStatusValues() []ResetPasswordStatus

func (*ResetPasswordStatus) Scan

func (e *ResetPasswordStatus) Scan(src interface{}) error

type Session

type Session struct {
	ID         uuid.UUID `db:"id" json:"id"`
	AccountID  uuid.UUID `db:"account_id" json:"accountId"`
	IdentityID uuid.UUID `db:"identity_id" json:"identityId"`
	Data       []byte    `db:"data" json:"data"`
	ExpiresAt  time.Time `db:"expires_at" json:"expiresAt"`
	CreatedAt  time.Time `db:"created_at" json:"createdAt"`
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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