authelia/middlewares/types.go
Clement Michaud 828f565290 Bootstrap Go implementation of Authelia.
This is going to be the v4.

Expected improvements:
- More reliable due to static typing.
- Bump of performance.
- Improvement of logging.
- Authelia can be shipped as a single binary.
- Will likely work on ARM architecture.
2019-10-28 23:28:59 +01:00

102 lines
3.3 KiB
Go

package middlewares
import (
"github.com/clems4ever/authelia/authentication"
"github.com/clems4ever/authelia/authorization"
"github.com/clems4ever/authelia/configuration/schema"
"github.com/clems4ever/authelia/notification"
"github.com/clems4ever/authelia/regulation"
"github.com/clems4ever/authelia/session"
"github.com/clems4ever/authelia/storage"
jwt "github.com/dgrijalva/jwt-go"
"github.com/sirupsen/logrus"
"github.com/valyala/fasthttp"
)
// AutheliaCtx contains all server variables related to Authelia.
type AutheliaCtx struct {
*fasthttp.RequestCtx
Logger *logrus.Entry
Providers Providers
Configuration schema.Configuration
userSession session.UserSession
}
// Providers contain all provider provided to Authelia.
type Providers struct {
Authorizer *authorization.Authorizer
SessionProvider *session.Provider
Regulator *regulation.Regulator
UserProvider authentication.UserProvider
StorageProvider storage.Provider
Notifier notification.Notifier
}
// RequestHandler represents an Authelia request handler.
type RequestHandler = func(*AutheliaCtx)
// Middleware represent an Authelia middleware.
type Middleware = func(RequestHandler) RequestHandler
// IdentityVerificationStartArgs represent the arguments used to customize the starting phase
// of the identity verification process.
type IdentityVerificationStartArgs struct {
// Email template needs a subject, a title and the content of the button.
MailSubject string
MailTitle string
MailButtonContent string
// The target endpoint where to redirect the user when verification process
// is completed successfully.
TargetEndpoint string
// The action claim that will be stored in the JWT token
ActionClaim string
// The function retrieving the identity to who the email will be sent.
IdentityRetrieverFunc func(ctx *AutheliaCtx) (*session.Identity, error)
// The function for checking the user in the token is valid for the current action
IsTokenUserValidFunc func(ctx *AutheliaCtx, username string) bool
}
// IdentityVerificationFinishArgs represent the arguments used to customize the finishing phase
// of the identity verification process.
type IdentityVerificationFinishArgs struct {
// The action claim that should be in the token to consider the action legitimate
ActionClaim string
// The function for checking the user in the token is valid for the current action
IsTokenUserValidFunc func(ctx *AutheliaCtx, username string) bool
}
// IdentityVerificationClaim custom claim for specifying the action claim.
// The action can be to register a TOTP device, a U2F device or reset one's password.
type IdentityVerificationClaim struct {
jwt.StandardClaims
// The action this token has been crafted for.
Action string `json:"action"`
// The user this token has been crafted for.
Username string `json:"username"`
}
// IdentityVerificationFinishBody type of the body received by the finish endpoint.
type IdentityVerificationFinishBody struct {
Token string `json:"token"`
}
// OKResponse model of a status OK response
type OKResponse struct {
Status string `json:"status"`
Data interface{} `json:"data"`
}
// ErrorResponse model of an error response
type ErrorResponse struct {
Status string `json:"status"`
Message string `json:"message"`
}