auth

package
v0.0.0-...-9139af7 Latest Latest
Warning

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

Go to latest
Published: Apr 19, 2025 License: GPL-3.0 Imports: 37 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrSignUpUsernameAlreadyRegistered = gonethttpresponse.NewFailResponseError(
		"username",
		"username is already registered",
		nil,
		http.StatusBadRequest,
	)
	ErrSignUpEmailAlreadyRegistered = gonethttpresponse.NewFailResponseError(
		"email",
		"email is already registered",
		nil,
		http.StatusBadRequest,
	)
	ErrLogInInvalidUsername = gonethttpresponse.NewFailResponseError(
		"username",
		"user not found by username",
		nil,
		http.StatusUnauthorized,
	)
	ErrLogInTooManyFailedAttempts = gonethttpresponse.NewFailResponseError(
		"password",
		"too many failed login attempts, try again later",
		nil,
		http.StatusUnauthorized,
	)
	ErrLogInInvalidPassword = gonethttpresponse.NewFailResponseError(
		"password",
		"invalid password",
		nil,
		http.StatusUnauthorized,
	)
	ErrLogInRequired2FACode = gonethttpresponse.NewFailResponseError(
		"2fa_code",
		fmt.Sprintf(govalidatormappervalidations.ErrRequiredField, "2fa_code"),
		nil,
		http.StatusBadRequest,
	)
	ErrLogInInvalid2FAMethod = gonethttpresponse.NewFailResponseError(
		"2fa_method",
		"invalid 2FA method",
		nil,
		http.StatusBadRequest,
	)
	ErrLogInInvalid2FARecoveryCode = gonethttpresponse.NewFailResponseError(
		"2fa_code",
		"invalid 2FA recovery code",
		nil,
		http.StatusUnauthorized,
	)
	ErrLogInInvalid2FATOTPCode = gonethttpresponse.NewFailResponseError(
		"2fa_code",
		"invalid 2FA TOTP code",
		nil,
		http.StatusUnauthorized,
	)
	ErrLogInInvalid2FAEmailCode = gonethttpresponse.NewFailResponseError(
		"2fa_code",
		"invalid 2FA email code",
		nil,
		http.StatusUnauthorized,
	)
	ErrGenerate2FATOTP2FAIsNotEnabled = gonethttpresponse.NewFailResponseError(
		"2fa",
		"2FA is not enabled",
		nil,
		http.StatusBadRequest,
	)
	ErrGenerate2FATOTPUrlAlreadyVerified = gonethttpresponse.NewFailResponseError(
		"totp",
		"2FA TOTP is already verified",
		nil,
		http.StatusBadRequest,
	)
	ErrVerify2FATOTPNotGenerated = gonethttpresponse.NewFailResponseError(
		"totp",
		"user has not generated 2FA TOTP",
		nil,
		http.StatusBadRequest,
	)
	ErrVerify2FATOTPInvalidTOTPCode = gonethttpresponse.NewFailResponseError(
		"totp_code",
		"invalid 2FA TOTP code",
		nil,
		http.StatusBadRequest,
	)
	ErrVerify2FATOTPAlreadyVerified = gonethttpresponse.NewFailResponseError(
		"totp",
		"2FA TOTP is already verified",
		nil,
		http.StatusBadRequest,
	)
	ErrGetRefreshTokenNotFound = gonethttpresponse.NewFailResponseError(
		"id",
		"refresh token not found",
		nil,
		http.StatusNotFound,
	)
	ErrVerifyEmailTokenNotFound = gonethttpresponse.NewFailResponseError(
		"token_id",
		"email verification token not found",
		nil,
		http.StatusNotFound,
	)
	ErrSendEmailVerificationTokenAlreadyVerified = gonethttpresponse.NewFailResponseError(
		"email",
		"email is already verified",
		nil,
		http.StatusBadRequest,
	)
	ErrChangeEmailAlreadyRegistered = gonethttpresponse.NewFailResponseError(
		"email",
		"email is already registered",
		nil,
		http.StatusBadRequest,
	)
	ErrVerifyEmailInvalidToken = gonethttpresponse.NewFailResponseError(
		"token",
		"email has already been verified, token has expired, or token is invalid",
		nil,
		http.StatusBadRequest,
	)
	ErrResetPasswordInvalidToken = gonethttpresponse.NewFailResponseError(
		"token",
		"token has expired or is invalid",
		nil,
		http.StatusBadRequest,
	)
	ErrChangePasswordInvalidOldPassword = gonethttpresponse.NewFailResponseError(
		"old_password",
		"invalid old password",
		nil,
		http.StatusBadRequest,
	)
	ErrChangePasswordSamePassword = gonethttpresponse.NewFailResponseError(
		"new_password",
		"new password is the same as the old password",
		nil,
		http.StatusBadRequest,
	)
	ErrEnableUser2FAInvalidPassword = gonethttpresponse.NewFailResponseError(
		"password",
		"invalid password",
		nil,
		http.StatusBadRequest,
	)
	ErrEnableUser2FAEmailNotVerified = gonethttpresponse.NewFailResponseError(
		"email",
		"email is not verified",
		nil,
		http.StatusBadRequest,
	)
	ErrorEnableUser2FA2FAIsAlreadyEnabled = gonethttpresponse.NewFailResponseError(
		"2fa",
		"2FA is already enabled",
		nil,
		http.StatusBadRequest,
	)
	ErrDisableUser2FAInvalidPassword = gonethttpresponse.NewFailResponseError(
		"password",
		"invalid password",
		nil,
		http.StatusBadRequest,
	)
	ErrDisableUser2FA2FAIsNotEnabled = gonethttpresponse.NewFailResponseError(
		"2fa",
		"2FA is not enabled",
		nil,
		http.StatusBadRequest,
	)
	ErrRegenerateUser2FARecoveryCodesInvalidPassword = gonethttpresponse.NewFailResponseError(
		"password",
		"invalid password",
		nil,
		http.StatusBadRequest,
	)
	ErrRegenerateUser2FARecoveryCodes2FAIsNotEnabled = gonethttpresponse.NewFailResponseError(
		"2fa",
		"2FA is not enabled",
		nil,
		http.StatusBadRequest,
	)
	ErrSendUser2FAEmailCode2FAIsNotEnabled = gonethttpresponse.NewFailResponseError(
		"2fa",
		"2FA is not enabled",
		nil,
		http.StatusBadRequest,
	)
	ErrSendUser2FAEmailCodeInvalidUsername = gonethttpresponse.NewFailResponseError(
		"username",
		"user not found by username",
		nil,
		http.StatusUnauthorized,
	)
	ErrSendUser2FAEmailCodeInvalidPassword = gonethttpresponse.NewFailResponseError(
		"password",
		"invalid password",
		nil,
		http.StatusBadRequest,
	)
)
View Source
var (
	Service    = &service{}
	Controller = &controller{}
	Module     = &gonethttp.Module{
		Pattern:    "/auth",
		Service:    Service,
		Controller: Controller,
		RegisterRoutesFn: func(m *gonethttp.Module) {
			m.RegisterExactRoute(
				"POST /signup",
				Controller.SignUp,
				internalmiddleware.Validate(
					&SignUpRequest{},
					func(
						body *SignUpRequest,
						validations *govalidatormappervalidation.StructValidations,
					) {
						internalvalidator.Service.Email(
							"email",
							body.Email,
							validations,
						)
						internalvalidator.Service.Password(
							"password",
							body.Password,
							internal.PasswordOptions,
							validations,
						)
						internalvalidator.Service.Username(
							"username",
							body.Username,
							validations,
						)
					},
				),
			)
			m.RegisterExactRoute(
				"POST /login",
				Controller.LogIn,
				internalmiddleware.Validate(
					&LogInRequest{},
				),
			)
			m.RegisterExactRoute(
				"POST /refresh-token",
				Controller.RefreshToken,
				internalmiddleware.AuthenticateRefreshToken,
			)
			m.RegisterExactRoute(
				"POST /logout",
				Controller.LogOut,
				internalmiddleware.AuthenticateRefreshToken,
			)
			m.RegisterExactRoute(
				"GET /refresh-token",
				Controller.GetRefreshToken,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(
					&GetRefreshTokenRequest{},
				),
			)
			m.RegisterExactRoute(
				"GET /refresh-tokens",
				Controller.ListRefreshTokens,
				internalmiddleware.AuthenticateAccessToken,
			)
			m.RegisterExactRoute(
				"DELETE /refresh-token",
				Controller.RevokeRefreshToken,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(
					&RevokeRefreshTokenRequest{},
				),
			)
			m.RegisterExactRoute(
				"DELETE /refresh-tokens",
				Controller.RevokeRefreshTokens,
				internalmiddleware.AuthenticateAccessToken,
			)
			m.RegisterExactRoute(
				"POST /2fa/totp/generate",
				Controller.Generate2FATOTPUrl,
				internalmiddleware.AuthenticateAccessToken,
			)
			m.RegisterExactRoute(
				"POST /2fa/totp/verify",
				Controller.Verify2FATOTP,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(
					&Verify2FATOTPRequest{},
				),
			)
			m.RegisterExactRoute(
				"DELETE /2fa/totp",
				Controller.Revoke2FATOTP,
				internalmiddleware.AuthenticateAccessToken,
			)
			m.RegisterExactRoute(
				"PUT /password",
				Controller.ChangePassword,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(
					&ChangePasswordRequest{},
					func(
						body *ChangePasswordRequest,
						validations *govalidatormappervalidation.StructValidations,
					) {
						internalvalidator.Service.Password(
							"new_password",
							body.NewPassword,
							internal.PasswordOptions,
							validations,
						)
					},
				),
			)
			m.RegisterExactRoute(
				"POST /password/forgot",
				Controller.ForgotPassword,
				internalmiddleware.Validate(
					&ForgotPasswordRequest{},
				),
			)
			m.RegisterExactRoute(
				"POST /password/reset",
				Controller.ResetPassword,
				internalmiddleware.Validate(
					&ResetPasswordRequest{},
					func(
						body *ResetPasswordRequest,
						validations *govalidatormappervalidation.StructValidations,
					) {
						internalvalidator.Service.Password(
							"new_password",
							body.NewPassword,
							internal.PasswordOptions,
							validations,
						)
					},
				),
			)
			m.RegisterExactRoute(
				"PUT /email",
				Controller.ChangeEmail,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(&ChangeEmailRequest{}),
			)
			m.RegisterExactRoute(
				"POST /email/send-verification",
				Controller.SendEmailVerificationToken,
				internalmiddleware.AuthenticateAccessToken,
			)
			m.RegisterExactRoute(
				"POST /email/verify",
				Controller.VerifyEmail,
				internalmiddleware.Validate(&VerifyEmailRequest{}),
			)
			m.RegisterExactRoute(
				"PUT /phone-number",
				Controller.ChangePhoneNumber,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(&ChangePhoneNumberRequest{}),
			)
			m.RegisterExactRoute(
				"POST /phone-number/send-verification",
				Controller.SendPhoneNumberVerificationCode,
				internalmiddleware.AuthenticateAccessToken,
			)
			m.RegisterExactRoute(
				"POST /phone-number/verify",
				Controller.VerifyPhoneNumber,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(&VerifyPhoneNumberRequest{}),
			)
			m.RegisterExactRoute(
				"POST /2fa/enable",
				Controller.EnableUser2FA,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(&EnableUser2FARequest{}),
			)
			m.RegisterExactRoute(
				"POST /2fa/disable",
				Controller.DisableUser2FA,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(&DisableUser2FARequest{}),
			)
			m.RegisterExactRoute(
				"POST /2fa/recovery-codes/regenerate",
				Controller.RegenerateUser2FARecoveryCodes,
				internalmiddleware.AuthenticateAccessToken,
				internalmiddleware.Validate(&RegenerateUser2FARecoveryCodesRequest{}),
			)
			m.RegisterExactRoute(
				"POST /2fa/email/send-code",
				Controller.SendUser2FAEmailCode,
				internalmiddleware.Validate(&SendUser2FAEmailCodeRequest{}),
			)
		},
	}
)

Functions

This section is empty.

Types

type ChangeEmailRequest

type ChangeEmailRequest struct {
	Email string `json:"email"`
}

ChangeEmailRequest is the request DTO to change email

type ChangePasswordRequest

type ChangePasswordRequest struct {
	OldPassword string `json:"old_password"`
	NewPassword string `json:"new_password"`
}

ChangePasswordRequest is the request DTO to change password

type ChangePhoneNumberRequest

type ChangePhoneNumberRequest struct {
	PhoneNumber string `json:"phone_number"`
}

ChangePhoneNumberRequest is the request DTO to change phone number

type DisableUser2FARequest

type DisableUser2FARequest struct {
	Password string `json:"password"`
}

DisableUser2FARequest is the request DTO to disable user 2FA

type EnableUser2FARequest

type EnableUser2FARequest struct {
	Password string `json:"password"`
}

EnableUser2FARequest is the request DTO to enable user 2FA

type EnableUser2FAResponseBody

type EnableUser2FAResponseBody struct {
	gonethttpresponse.BaseJSendSuccessBody
	Data EnableUser2FAResponseData `json:"data"`
}

EnableUser2FAResponseBody is the response body DTO to enable user 2FA

type EnableUser2FAResponseData

type EnableUser2FAResponseData struct {
	RecoveryCodes []string `json:"recovery_codes"`
}

EnableUser2FAResponseData is the response data DTO to enable user 2FA

type ForgotPasswordRequest

type ForgotPasswordRequest struct {
	Email string `json:"email"`
}

ForgotPasswordRequest is the request DTO to forgot password

type Generate2FATOTPUrlResponseBody

type Generate2FATOTPUrlResponseBody struct {
	gonethttpresponse.BaseJSendSuccessBody
	Data Generate2FATOTPUrlResponseData `json:"data"`
}

Generate2FATOTPUrlResponseBody is the response body DTO to generate 2FA TOTP URL

type Generate2FATOTPUrlResponseData

type Generate2FATOTPUrlResponseData struct {
	TOTPUrl string `json:"totp_url"`
}

Generate2FATOTPUrlResponseData is the response data DTO to generate 2FA TOTP URL

type GetRefreshTokenRequest

type GetRefreshTokenRequest struct {
	RefreshTokenID int64 `json:"refresh_token_id"`
}

GetRefreshTokenRequest is the request DTO to get a refresh token

type GetRefreshTokenResponseBody

type GetRefreshTokenResponseBody struct {
	gonethttpresponse.BaseJSendSuccessBody
	Data GetRefreshTokenResponseData `json:"data"`
}

GetRefreshTokenResponseBody is the response body DTO to get a refresh token that has not been revoked or expired

type GetRefreshTokenResponseData

type GetRefreshTokenResponseData struct {
	RefreshToken *internalpostgresmodel.UserRefreshToken `json:"refresh_token"`
}

GetRefreshTokenResponseData is the response data DTO to get a refresh token that has not been revoked or expired

type ListRefreshTokensResponseBody

type ListRefreshTokensResponseBody struct {
	gonethttpresponse.BaseJSendSuccessBody
	Data ListRefreshTokensResponseData `json:"data"`
}

ListRefreshTokensResponseBody is the response body DTO to list refresh tokens that have not been revoked or expired

type ListRefreshTokensResponseData

type ListRefreshTokensResponseData struct {
	RefreshTokens []*internalpostgresmodel.UserRefreshTokenWithID `json:"refresh_tokens"`
}

ListRefreshTokensResponseData is the response data DTO to list refresh tokens that have not been revoked or expired

type LogInRequest

type LogInRequest struct {
	Username                      string  `json:"username"`
	Password                      string  `json:"password"`
	TwoFactorAuthenticationMethod *string `json:"2fa_method,omitempty"`
	TwoFactorAuthenticationCode   *string `json:"2fa_code,omitempty"`
}

LogInRequest is the request DTO to log in

type LogInResponseBody

type LogInResponseBody struct {
	gonethttpresponse.BaseJSendSuccessBody
	Data LogInResponseData `json:"data"`
}

LogInResponseBody is the response body DTO to log in

type LogInResponseData

type LogInResponseData struct {
	TwoFactorAuthenticationMethods       *[]string `json:"2fa_methods,omitempty"`
	TwoFactorAuthenticationRecoveryCodes *[]string `json:"2fa_recovery_codes,omitempty"`
}

LogInResponseData is the response data DTO to log in

type RegenerateUser2FARecoveryCodesRequest

type RegenerateUser2FARecoveryCodesRequest struct {
	Password string `json:"password"`
}

RegenerateUser2FARecoveryCodesRequest is the request DTO to regenerate user 2FA recovery codes

type RegenerateUser2FARecoveryCodesResponseBody

type RegenerateUser2FARecoveryCodesResponseBody struct {
	gonethttpresponse.BaseJSendSuccessBody
	Data RegenerateUser2FARecoveryCodesResponseData `json:"data"`
}

RegenerateUser2FARecoveryCodesResponseBody is the response body DTO to regenerate user 2FA recovery codes

type RegenerateUser2FARecoveryCodesResponseData

type RegenerateUser2FARecoveryCodesResponseData struct {
	RecoveryCodes []string `json:"recovery_codes"`
}

RegenerateUser2FARecoveryCodesResponseData is the response data DTO to regenerate user 2FA recovery codes

type ResetPasswordRequest

type ResetPasswordRequest struct {
	NewPassword string `json:"new_password"`
	Token       string `json:"token"`
}

ResetPasswordRequest is the request DTO to reset password

type RevokeRefreshTokenRequest

type RevokeRefreshTokenRequest struct {
	RefreshTokenID int64 `json:"refresh_token_id"`
}

RevokeRefreshTokenRequest is the request DTO to revoke a refresh token

type SendUser2FAEmailCodeRequest

type SendUser2FAEmailCodeRequest struct {
	Username string `json:"username"`
	Password string `json:"password"`
}

SendUser2FAEmailCodeRequest is the request DTO to send user 2FA email code

type SignUpRequest

type SignUpRequest struct {
	FirstName string `json:"first_name"`
	LastName  string `json:"last_name"`
	Username  string `json:"username"`
	Password  string `json:"password"`
	Email     string `json:"email"`
}

SignUpRequest is the request DTO to sign up

type Verify2FATOTPRequest

type Verify2FATOTPRequest struct {
	TOTPCode string `json:"totp_code"`
}

Verify2FATOTPRequest is the request DTO to verify 2FA TOTP

type VerifyEmailRequest

type VerifyEmailRequest struct {
	Token string `json:"token"`
}

VerifyEmailRequest is the request DTO to verify email

type VerifyPhoneNumberRequest

type VerifyPhoneNumberRequest struct {
	Token string `json:"token"`
}

VerifyPhoneNumberRequest is the request DTO to verify phone number

Jump to

Keyboard shortcuts

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