Documentation ¶
Index ¶
- Constants
- Variables
- func Authenticates(authp interface{}, w http.ResponseWriter, r *http.Request, f func(bool))
- func GetUser(ctx context.Context) common.User
- func GetUserI(ctx context.Context) interface{}
- func I18n(key ...string) string
- type Auth
- func (auth *Auth) AfterLogged(f ...func(ctx *LoginContext, claims *claims.Claims) error) *Auth
- func (auth *Auth) AuthPath(pth ...string) string
- func (auth *Auth) BeforeLogin(f ...func(ctx *LoginContext) error) *Auth
- func (auth *Auth) FindUID(ctx *Context, identifier string) (uid string, err error)
- func (auth *Auth) GetCurrentUser(req *http.Request) (currentUser common.User, err error)
- func (auth *Auth) GetCurrentUserClaims(req *http.Request) (currentUser common.User, Claims *claims.Claims, err error)
- func (auth *Auth) GetProvider(name string) Provider
- func (auth *Auth) GetProviders() (providers []Provider)
- func (auth *Auth) I18n(key ...string) string
- func (auth *Auth) Intercept(w http.ResponseWriter, r *http.Request, handler http.Handler)
- func (auth *Auth) InterceptFunc(w http.ResponseWriter, r *http.Request, f func())
- func (auth *Auth) Login(ctx *LoginContext) (Claims *claims.Claims, err error)
- func (auth *Auth) LoginInfo(f ...func(ctx *LoginContext, info *auth_identity.Basic) error) *Auth
- func (auth *Auth) Logout(w http.ResponseWriter, req *http.Request)
- func (auth *Auth) Middleware() *xroute.Middleware
- func (auth *Auth) NewContextFromRequest(r *http.Request, values ...interface{}) (*http.Request, *Context)
- func (auth *Auth) NewContextFromRequestPair(w http.ResponseWriter, r *http.Request, values ...interface{}) (*http.Request, *Context)
- func (auth *Auth) NewContextFromSite(site *core.Site) *Context
- func (auth *Auth) NewServeMux() http.Handler
- func (auth *Auth) RegisterProvider(provider Provider)
- func (auth *Auth) Registrable(context *core.Context) bool
- func (auth *Auth) Signed(ctx *core.Context, Claims *claims.Claims) (err error)
- func (auth *Auth) SignedCallback(f ...func(ctx *core.Context, Claims *claims.Claims) error) *Auth
- func (auth *Auth) URL(r *http.Request) *AuthURL
- type AuthBeforer
- type AuthFailurer
- type AuthInfor
- type AuthLoggeder
- type AuthURL
- type BeforeLoginCallback
- type Config
- type Context
- func (context *Context) AuthPath(pth ...string) string
- func (context *Context) AuthStaticURL(pth ...string) string
- func (context *Context) AuthURL(pth ...string) string
- func (context *Context) Flashes() []session.Message
- func (context *Context) FormValue(name string) string
- func (context *Context) GetContext() *core.Context
- func (context *Context) Registrable() bool
- func (context *Context) Set(values ...interface{})
- type ErrorCallback
- type InfoCallback
- type Interface
- type LoggedCallback
- type LoginCallbacks
- func (cb *LoginCallbacks) Before(f ...func(ctx *LoginContext) error) *LoginCallbacks
- func (cb *LoginCallbacks) Failure(f ...func(ctx *LoginContext, err error)) *LoginCallbacks
- func (cb *LoginCallbacks) Info(f ...func(ctx *LoginContext, info *auth_identity.Basic) error) *LoginCallbacks
- func (cb *LoginCallbacks) Logged(f ...func(ctx *LoginContext, claims *claims.Claims) error) *LoginCallbacks
- type LoginContext
- func (this *LoginContext) Before(f ...func(ctx *LoginContext) error) *LoginContext
- func (this *LoginContext) Failure(f ...func(ctx *LoginContext, err error)) *LoginContext
- func (this *LoginContext) Info(f ...func(ctx *LoginContext, info *auth_identity.Basic) error) *LoginContext
- func (this *LoginContext) Logged(f ...func(ctx *LoginContext, claims *claims.Claims) error) *LoginContext
- func (this *LoginContext) Login() (Claims *claims.Claims, err error)
- type Plugin
- type Provider
- type Redirector
- type RedirectorInterface
- type Schema
- type SessionStorer
- func (sessionStorer *SessionStorer) Delete(manager session.RequestSessionManager) error
- func (sessionStorer *SessionStorer) Flash(manager session.RequestSessionManager, message session.Message) error
- func (sessionStorer *SessionStorer) Flashes(manager session.RequestSessionManager) []session.Message
- func (sessionStorer *SessionStorer) Get(manager session.RequestSessionManager) (*claims.Claims, error)
- func (sessionStorer *SessionStorer) SignedToken(claims *claims.Claims) (string, error)
- func (sessionStorer *SessionStorer) Update(manager session.RequestSessionManager, claims *claims.Claims) (err error)
- func (sessionStorer *SessionStorer) ValidateClaims(tokenString string) (*claims.Claims, error)
- type SessionStorerInterface
- type SignedCallbacker
- type UIDFinder
- type UIDFinders
- type User
- type UserStorer
- type UserStorerInterface
Constants ¶
const ( ErrInvalidPassword = auth_errors.ErrInvalidPassword ErrInvalidAccount = auth_errors.ErrInvalidAccount ErrUidBlank = auth_errors.ErrUidBlank ErrMaximumNumberOfAccessesReached = auth_errors.ErrMaximumNumberOfAccessesReached )
const CurrentUser utils.ContextKey = "qor:auth.current_user"
CurrentUser context key to get current user from Request
Variables ¶
var AUTH_URL_KEY = PREFIX + ".auth.url"
var DefaultAssetHandler = func(context *Context) { pth := strings.TrimPrefix(context.Request.URL.Path, context.Auth.URLPrefix) if context.Request.Header.Get("If-Modified-Since") == cacheSince { context.Writer.WriteHeader(http.StatusNotModified) return } context.Writer.Header().Set("Last-Modified", cacheSince) if asset, err := context.Auth.Config.Render.Asset(path.Join("/auth", pth)); err == nil { etag := fmt.Sprintf("%x", md5.Sum(assetfs.MustData(asset))) if context.Request.Header.Get("If-None-Match") == etag { context.Writer.WriteHeader(http.StatusNotModified) return } if ctype := mime.TypeByExtension(filepath.Ext(pth)); ctype != "" { context.Writer.Header().Set("Content-Type", ctype) } context.Writer.Header().Set("Cache-control", "private, must-revalidate, max-age=300") context.Writer.Header().Set("ETag", etag) context.Writer.Write(assetfs.MustData(asset)) } else { http.NotFound(context.Writer, context.Request) } }
DefaultAssetHandler render auth asset file
var DefaultLoginHandler = func(context *LoginContext, authorize func(*LoginContext) (*claims.Claims, error)) (claims *claims.Claims, err error) { if claims, err = authorize(context); err == nil { if err = context.Auth.Signed(context.Context.Context, claims); err != nil { if err == ErrMaximumNumberOfAccessesReached { http.Error(context.Writer, err.Error(), http.StatusForbidden) return } http.Error(context.Writer, err.Error(), http.StatusInternalServerError) return } return } return }
DefaultLoginHandler default login behaviour
var DefaultLogoutHandler = func(context *Context) {
context.SessionStorer.Delete(context.SessionManager())
context.Auth.Redirector.Redirect(context.Writer, context.Request, "logout")
}
DefaultLogoutHandler default logout behaviour
var DefaultProfileHandler = func(context *Context) { responder.With("html", func() { context.Auth.Config.Render.Execute("auth/profile", context, context.Context) }).With([]string{"json"}, func() { }).Respond(context.Request) }
DefaultProfileHandler default profile behaviour
var DefaultRegisterHandler = func(context *Context, register func(*Context) (*claims.Claims, error)) { claims, _ := register(context) respond(&LoginContext{Context: context}, claims, "auth/register") }
DefaultRegisterHandler default register behaviour
var ErrNoSession = errors.New("no session")
var I18N_GROUP = i18nmod.PkgToGroup(PREFIX)
var PREFIX = path_helpers.GetCalledDir()
Functions ¶
func Authenticates ¶
func Authenticates(authp interface{}, w http.ResponseWriter, r *http.Request, f func(bool))
Types ¶
type Auth ¶
type Auth struct { *Config // Embed SessionStorer to match Authority's AuthInterface SessionStorerInterface Funcs funcs.FuncValues // contains filtered or unexported fields }
Auth auth struct
func (*Auth) AfterLogged ¶
func (*Auth) BeforeLogin ¶
func (auth *Auth) BeforeLogin(f ...func(ctx *LoginContext) error) *Auth
func (*Auth) GetCurrentUser ¶
GetCurrentUser get current user from request
func (*Auth) GetCurrentUserClaims ¶
func (auth *Auth) GetCurrentUserClaims(req *http.Request) (currentUser common.User, Claims *claims.Claims, err error)
GetCurrentUserClaims get current user and Claims from request
func (*Auth) GetProvider ¶
GetProvider get provider with name
func (*Auth) GetProviders ¶
GetProviders return registered providers
func (*Auth) InterceptFunc ¶
func (auth *Auth) InterceptFunc(w http.ResponseWriter, r *http.Request, f func())
func (*Auth) Login ¶
func (auth *Auth) Login(ctx *LoginContext) (Claims *claims.Claims, err error)
Login sign user in
func (*Auth) LoginInfo ¶
func (auth *Auth) LoginInfo(f ...func(ctx *LoginContext, info *auth_identity.Basic) error) *Auth
func (*Auth) Logout ¶
func (auth *Auth) Logout(w http.ResponseWriter, req *http.Request)
Logout sign current user out
func (*Auth) Middleware ¶
func (auth *Auth) Middleware() *xroute.Middleware
func (*Auth) NewContextFromRequest ¶
func (*Auth) NewContextFromRequestPair ¶
func (*Auth) NewServeMux ¶
NewServeMux generate http.Handler for auth
func (*Auth) RegisterProvider ¶
RegisterProvider register auth provider
func (*Auth) SignedCallback ¶
type AuthBeforer ¶
type AuthBeforer interface {
BeforeAuth(ctx *LoginContext) error
}
type AuthFailurer ¶
type AuthFailurer interface {
AuthFailure(ctx *LoginContext, info *auth_identity.Basic, err error)
}
type AuthInfor ¶
type AuthInfor interface {
AuthInfo(ctx *LoginContext, info *auth_identity.Basic) error
}
type AuthLoggeder ¶
type AuthLoggeder interface {
AuthLogged(ctx *LoginContext, claims *claims.Claims) error
}
type AuthURL ¶
type AuthURL struct { Prefix string // contains filtered or unexported fields }
func AuthURLFromContext ¶
func (*AuthURL) LoginReturn ¶
func (a *AuthURL) LoginReturn()
func (*AuthURL) LogoutPage ¶
type BeforeLoginCallback ¶
type BeforeLoginCallback = func(ctx *LoginContext) error
type Config ¶
type Config struct { *sites.SiteConfig // AuthIdentityModel a model used to save auth info, like email/password, OAuth token, linked user's BID, https://github.com/ecletus/auth/blob/master/auth_identity/auth_identity.go is the default implemention AuthIdentityModel interface{} // UserModel should be point of user struct's instance, it could be nil, then Auth will assume there is no user linked to auth info, and will return current auth info when get current user UserModel interface{} // Mount Auth into router with URLPrefix's value as prefix, default value is `/auth`. URLPrefix string // Auth is using [Render](https://github.com/ecletus/render) to render pages, you could configure it with your project's Render if you have advanced usage like [BindataFS](https://github.com/ecletus/bindatafs) Render *render.Render // Auth is using [NotifyMailer](https://github.com/ecletus/mailer) to send email, by default, it will print email into console, you need to configure it to send real one Mailer *mailer.Mailer // UserStorer is an interface that defined how to get/save user, Auth provides a default one based on AuthIdentityModel, UserModel's definition UserStorer UserStorerInterface // SessionStorer is an interface that defined how to encode/validate/save/destroy session data and flash messages between requests, Auth provides a default method do the job, to use the default value, don't forgot to mount SessionManager's middleware into your router to save session data correctly. refer [session](https://github.com/ecletus/session) for more details SessionStorer SessionStorerInterface // Redirector redirect user to a new page after registered, logged, confirmed... Redirector RedirectorInterface // LoginHandler defined behaviour when request `{Auth Prefix}/login`, default behaviour defined in http://godoc.org/github.com/ecletus/auth#pkg-variables LoginHandler func(*LoginContext, func(*LoginContext) (*claims.Claims, error)) (*claims.Claims, error) // RegisterHandler defined behaviour when request `{Auth Prefix}/register`, default behaviour defined in http://godoc.org/github.com/ecletus/auth#pkg-variables RegisterHandler func(*Context, func(*Context) (*claims.Claims, error)) // LogoutHandler defined behaviour when request `{Auth Prefix}/logout`, default behaviour defined in http://godoc.org/github.com/ecletus/auth#pkg-variables LogoutHandler func(*Context) // ProfileHandler defined behaviour when request `{Auth Prefix}/profile`, default behaviour defined in http://godoc.org/github.com/ecletus/auth#pkg-variables ProfileHandler func(*Context) // RegistrableFunc Check if Allow register new users RegistrableFunc func(auth *Auth, ctx *core.Context) bool LoginPageRedirectTo string ContextFactory *core.ContextFactory LoginCallbacks LoginCallbacks UIDFinders UIDFinders // contains filtered or unexported fields }
Config auth config
type Context ¶
Context context
func (*Context) AuthStaticURL ¶
func (*Context) GetContext ¶
func (*Context) Registrable ¶
type ErrorCallback ¶
type ErrorCallback = func(ctx *LoginContext, err error)
type InfoCallback ¶
type InfoCallback = func(ctx *LoginContext, info *auth_identity.Basic) error
type Interface ¶
type Interface interface { GetCurrentUser(*Context) common.User LoginURL(*Context) string LogoutURL(*Context) string ProfileURL(c *Context) string Auth() *Auth }
Interface is an auth interface that used to qor admin If you want to implement an authorization gateway for admin interface, you could implement this interface, and set it to the admin with `admin.SetAuth(auth)`
type LoggedCallback ¶
type LoggedCallback = func(ctx *LoginContext, claims *claims.Claims) error
type LoginCallbacks ¶
type LoginCallbacks struct { BeforeLoginCallbacks []BeforeLoginCallback InfoCallbacks []InfoCallback LoggedCallbacks []LoggedCallback ErrorCallbacks []ErrorCallback }
func (*LoginCallbacks) Before ¶
func (cb *LoginCallbacks) Before(f ...func(ctx *LoginContext) error) *LoginCallbacks
func (*LoginCallbacks) Failure ¶
func (cb *LoginCallbacks) Failure(f ...func(ctx *LoginContext, err error)) *LoginCallbacks
func (*LoginCallbacks) Info ¶
func (cb *LoginCallbacks) Info(f ...func(ctx *LoginContext, info *auth_identity.Basic) error) *LoginCallbacks
func (*LoginCallbacks) Logged ¶
func (cb *LoginCallbacks) Logged(f ...func(ctx *LoginContext, claims *claims.Claims) error) *LoginCallbacks
type LoginContext ¶
type LoginContext struct { *Context LoginCallbacks UID string LoginData maps.Map Silent bool SilentError bool }
func (*LoginContext) Before ¶
func (this *LoginContext) Before(f ...func(ctx *LoginContext) error) *LoginContext
func (*LoginContext) Failure ¶
func (this *LoginContext) Failure(f ...func(ctx *LoginContext, err error)) *LoginContext
func (*LoginContext) Info ¶
func (this *LoginContext) Info(f ...func(ctx *LoginContext, info *auth_identity.Basic) error) *LoginContext
func (*LoginContext) Logged ¶
func (this *LoginContext) Logged(f ...func(ctx *LoginContext, claims *claims.Claims) error) *LoginContext
type Provider ¶
type Provider interface { GetName() string ConfigAuth(*Auth) PrepareLoginContext(*LoginContext) error Login(*LoginContext) (*claims.Claims, error) Logout(*Context) Register(*Context) Callback(*Context) ServeHTTP(*Context) I18n(key ...string) string }
Provider define Provider interface
type Redirector ¶
type Redirector struct {
*redirect_back.RedirectBack
}
Redirector default redirector
func (Redirector) Redirect ¶
func (redirector Redirector) Redirect(w http.ResponseWriter, req *http.Request, action string)
Redirect redirect back after action
type RedirectorInterface ¶
type RedirectorInterface interface { // Redirect redirect after action Redirect(w http.ResponseWriter, req *http.Request, action string) Middleware() *xroute.Middleware }
RedirectorInterface redirector interface
type Schema ¶
type Schema struct { Provider string UID string Name string Email string FirstName string LastName string Location string Lang []string Image string Phone string URL string RawInfo interface{} }
Schema auth schema
func (*Schema) MailAddress ¶
type SessionStorer ¶
type SessionStorer struct { SessionName string SigningMethod jwt.SigningMethod SignedString string }
SessionStorer default session storer
func (*SessionStorer) Delete ¶
func (sessionStorer *SessionStorer) Delete(manager session.RequestSessionManager) error
Delete delete claims from session manager
func (*SessionStorer) Flash ¶
func (sessionStorer *SessionStorer) Flash(manager session.RequestSessionManager, message session.Message) error
Flash add flash message to session data
func (*SessionStorer) Flashes ¶
func (sessionStorer *SessionStorer) Flashes(manager session.RequestSessionManager) []session.Message
Flashes returns a slice of flash messages from session data
func (*SessionStorer) Get ¶
func (sessionStorer *SessionStorer) Get(manager session.RequestSessionManager) (*claims.Claims, error)
Get get claims from request
func (*SessionStorer) SignedToken ¶
func (sessionStorer *SessionStorer) SignedToken(claims *claims.Claims) (string, error)
SignedToken generate signed token with Claims
func (*SessionStorer) Update ¶
func (sessionStorer *SessionStorer) Update(manager session.RequestSessionManager, claims *claims.Claims) (err error)
Update update claims with session manager
func (*SessionStorer) ValidateClaims ¶
func (sessionStorer *SessionStorer) ValidateClaims(tokenString string) (*claims.Claims, error)
ValidateClaims validate auth token
type SessionStorerInterface ¶
type SessionStorerInterface interface { // Get get claims from request Get(manager session.RequestSessionManager) (*claims.Claims, error) // Update update claims with session manager Update(manager session.RequestSessionManager, claims *claims.Claims) error // Delete delete session Delete(manager session.RequestSessionManager) error // Flash add flash message to session data Flash(manager session.RequestSessionManager, message session.Message) error // Flashes returns a slice of flash messages from session data Flashes(manager session.RequestSessionManager) []session.Message // SignedToken generate signed token with Claims SignedToken(claims *claims.Claims) (string, error) // ValidateClaims validate auth token ValidateClaims(tokenString string) (*claims.Claims, error) }
SessionStorerInterface session storer interface for Auth
type SignedCallbacker ¶
type UIDFinders ¶
type UIDFinders []UIDFinder
func (*UIDFinders) Add ¶
func (this *UIDFinders) Add(finder ...UIDFinder)
func (UIDFinders) Append ¶
func (this UIDFinders) Append(finder ...UIDFinder) UIDFinders