controllers

package
v0.0.9 Latest Latest
Warning

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

Go to latest
Published: Apr 15, 2025 License: MIT Imports: 22 Imported by: 0

Documentation

Overview

Package controllers provides the controllers for the API

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AuthenticationController

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

AuthenticationController is the controller for the authentication routes

func NewAuthenticationController

func NewAuthenticationController(
	s models.Querier,
	rdb *redis.Client,
	t func() time.Time,
) *AuthenticationController

NewAuthenticationController returns a new AuthenticationController

func (*AuthenticationController) Login

func (ctr *AuthenticationController) Login(c echo.Context) error

Login godoc @Summary Login @Description Authenticates a user and returns an authentication token, which can be a JWT token or a state token. @Description If the user has enabled multi-factor authentication (MFA), a state token will be returned instead of a JWT token. @Description The state token is used in conjunction with the OTP (one-time password) to retrieve the actual JWT token. @Description To obtain the JWT token, the state token and OTP must be sent to the `/authn/verify_factor` endpoint. @Tags auth @Accept json @Produce json @Param data body loginRequest true "Login request" @Success 200 {object} LoginResponse @Failure 401 {object} customError "Invalid username or password" @Router /login [post]

func (*AuthenticationController) Logout

func (ctr *AuthenticationController) Logout(c echo.Context) error

Logout godoc @Summary Logout @Description Logs out the user by deleting the refresh token from the database. If `{logout_all: true}` is posted, @Description all refresh tokens for the user will be deleted, invalidating all refresh tokens. @Tags auth @Accept json @Produce json @Param data body logoutRequest true "Logout request" @Success 200 {string} string "Logged out" @Failure 401 {object} customError "Unauthorized" @Security JWTBearerToken @Router /logout [post]

func (*AuthenticationController) RefreshToken

func (ctr *AuthenticationController) RefreshToken(c echo.Context) error

RefreshToken godoc @Summary Refresh JWT token @Description Refreshes the JWT token using the refresh token stored in the client's cookie. @Tags auth @Accept json @Produce json @Success 200 {object} LoginResponse @Failure 400 {object} customError "Bad request" @Failure 401 {object} customError "Unauthorized" @Router /authn/refresh [post]

func (*AuthenticationController) Register added in v0.0.4

func (ctr *AuthenticationController) Register(c echo.Context) error

Register example @Summary Register @Description Creates a new user account. @Tags auth @Accept json @Produce json @Param data body RegisterRequest true "Register request" @Success 201 "User created" @Failure 400 {object} customError "Bad request" @Failure 500 {object} customError "Internal server error" @Router /register [post]

func (*AuthenticationController) VerifyFactor added in v0.0.2

func (ctr *AuthenticationController) VerifyFactor(c echo.Context) error

VerifyFactor is used to verify the user factor (OTP) @Summary Verify MFA factor @Description Verifies the user's MFA factor (OTP) and returns a JWT token if successful. @Description The state token, returned from `/login` if the user has TOTP enabled, it is used in conjunction with @Description the OTP (one-time password) to retrieve the actual JWT token @Tags auth @Accept json @Produce json @Param data body factorRequest true "State token and OTP" @Success 200 {object} LoginResponse @Failure 400 {object} customError "Bad request" @Failure 401 {object} customError "Unauthorized" @Router /authn/factor_verify [post]

type ChannelController

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

func NewChannelController

func NewChannelController(s models.Querier) *ChannelController

func (*ChannelController) GetChannel

func (ctr *ChannelController) GetChannel()

type DBInterface added in v0.0.9

type DBInterface interface {
	Ping(ctx context.Context) error
}

DBInterface defines the interface for database operations

type HealthCheckController

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

func NewHealthCheckController

func NewHealthCheckController(dbPool *pgxpool.Pool, rdb *redis.Client) *HealthCheckController

func (*HealthCheckController) HealthCheck

func (ctr *HealthCheckController) HealthCheck(c echo.Context) error

type HealthCheckResponse

type HealthCheckResponse struct {
	Status   string `json:"status"`
	Postgres string `json:"postgres,omitempty"`
	Redis    string `json:"redis,omitempty"`
}

type LoginResponse

type LoginResponse struct {
	AccessToken  string `` /* 219-byte string literal not displayed */
	RefreshToken string `` /* 219-byte string literal not displayed */
}

LoginResponse is the response sent to a client upon successful FULL authentication

type MeChannelResponse

type MeChannelResponse struct {
	Name         string `json:"name"`
	ChannelID    int32  `json:"channel_id"`
	Access       int32  `json:"access"`
	LastModified int32  `json:"last_modified,omitempty"`
}

MeChannelResponse represents a channel associated with the current user

type MeController

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

MeController handles requests related to the current authenticated user

func NewMeController

func NewMeController(s models.Querier) *MeController

NewMeController creates a new instance of MeController

func (*MeController) GetMe

func (ctr *MeController) GetMe(c echo.Context) error

GetMe returns detailed information about the current user @Summary Get current user information @Description Get current user information @Tags users @Accept json @Produce json @Success 200 {object} MeResponse @Failure 401 "Authorization information is missing or invalid." @Failure 404 "User not found." @Failure 500 "Internal server error." @Router /me [get] @Security JWTBearerToken

type MeResponse

type MeResponse struct {
	ID           int32               `json:"id"                      extensions:"x-order=0"`
	Username     string              `json:"username"                extensions:"x-order=1"`
	Email        string              `json:"email,omitempty"         extensions:"x-order=2"`
	MaxLogins    int32               `json:"max_logins"              extensions:"x-order=3"`
	LanguageCode string              `json:"language_code,omitempty" extensions:"x-order=4"`
	LanguageName string              `json:"language_name,omitempty" extensions:"x-order=5"`
	LastSeen     int32               `json:"last_seen,omitempty"     extensions:"x-order=6"`
	TotpEnabled  bool                `json:"totp_enabled"            extensions:"x-order=8"`
	Channels     []MeChannelResponse `json:"channels,omitempty"      extensions:"x-order=9"`
}

MeResponse represents the response structure for the current user

type RedisInterface added in v0.0.9

type RedisInterface interface {
	Ping(ctx context.Context) *redis.StatusCmd
}

RedisInterface defines the interface for Redis operations

type RegisterRequest added in v0.0.4

type RegisterRequest struct {
	Username string `json:"username" validate:"required,min=2,max=12"  extensions:"x-order=0"`
	Password string `json:"password" validate:"required,min=10,max=72" extensions:"x-order=1"`
	Email    string `json:"email"    validate:"required,email"         extensions:"x-order=2"`
	EULA     bool   `json:"eula"     validate:"required,eq=true"       extensions:"x-order=3"`
	COPPA    bool   `json:"coppa"    validate:"required,eq=true"       extensions:"x-order=4"`
}

RegisterRequest is the request body for the register route

type Role added in v0.0.6

type Role struct {
	ID          int32  `json:"id"          extensions:"x-order=0"`
	Name        string `json:"name"        extensions:"x-order=1"`
	Description string `json:"description" extensions:"x-order=2"`
}

type UserChannelResponse

type UserChannelResponse struct {
	Name         string `json:"name"`
	ChannelID    int32  `json:"channel_id"`
	Access       int32  `json:"access"`
	LastModified int32  `json:"last_modified,omitempty"`
}

type UserController

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

func NewUserController

func NewUserController(s models.Querier) *UserController

func (*UserController) GetUser

func (ctr *UserController) GetUser(c echo.Context) error

GetUser returns a user by id @Summary Get user data by id @Description Returns a user by id @Tags users @Produce json @Param id path int true "User ID" @Success 200 {object} UserResponse @Router /users/{id} [get] @Security JWTBearerToken

func (*UserController) GetUserChannels added in v0.0.8

func (ctr *UserController) GetUserChannels(c echo.Context) error

func (*UserController) GetUserRoles added in v0.0.6

func (ctr *UserController) GetUserRoles(c echo.Context) error

GetUserRoles returns the roles for a given user @Summary Get the roles for a given user @Description Get the roles for a given user @Tags users @Produce json @Param id path int true "User ID" @Success 200 {object} UserRolesResponse @Failure 400 {string} string "Invalid user ID" @Failure 404 {string} string "User not found" @Failure 500 {string} string "Internal server error" @Router /users/{id}/roles [get] @Security JWTBearerToken

type UserResponse

type UserResponse struct {
	ID           int32                 `json:"id"                      extensions:"x-order=0"`
	Username     string                `json:"username"                extensions:"x-order=1"`
	Email        string                `json:"email,omitempty"         extensions:"x-order=2"`
	MaxLogins    int32                 `json:"max_logins"              extensions:"x-order=3"`
	LanguageCode string                `json:"language_code,omitempty" extensions:"x-order=4"`
	LanguageName string                `json:"language_name,omitempty" extensions:"x-order=5"`
	LastSeen     int32                 `json:"last_seen,omitempty"     extensions:"x-order=6"`
	TotpEnabled  bool                  `json:"totp_enabled"            extensions:"x-order=7"`
	Channels     []UserChannelResponse `json:"channels,omitempty"      extensions:"x-order=8"`
}

type UserRolesResponse added in v0.0.6

type UserRolesResponse struct {
	User struct {
		ID       int32  `json:"id" extensions:"x-order=0"`
		Username string `json:"username" extensions:"x-order=1"`
		Roles    []Role `json:"roles" extensions:"x-order=1"`
	} `json:"user" extensions:"x-order=0"`
}

Directories

Path Synopsis
Package admin defines the admin controllers.
Package admin defines the admin controllers.

Jump to

Keyboard shortcuts

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