Documentation ¶
Index ¶
- Variables
- type Config
- type Provider
- func (provider Provider) Callback(context *auth.Context)
- func (provider Provider) ConfigAuth(auth *auth.Auth)
- func (Provider) GetName() string
- func (provider Provider) Login(context *auth.Context)
- func (provider Provider) Logout(context *auth.Context)
- func (provider Provider) Register(context *auth.Context)
- func (provider Provider) ServeHTTP(context *auth.Context)
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // ConfirmationMailSubject confirmation mail's subject ConfirmationMailSubject = "Please confirm your account" // ConfirmedAccountFlashMessage confirmed your account message ConfirmedAccountFlashMessage = template.HTML("Confirmed your account!") // ConfirmFlashMessage confirm account flash message ConfirmFlashMessage = template.HTML("Please confirm your account") // ErrAlreadyConfirmed account already confirmed error ErrAlreadyConfirmed = errors.New("Your account already been confirmed") // ErrUnconfirmed unauthorized error ErrUnconfirmed = errors.New("You have to confirm your account before continuing") )
View Source
var ( // ResetPasswordMailSubject reset password mail's subject ResetPasswordMailSubject = "Reset your password" // SendChangePasswordMailFlashMessage send change password mail flash message SendChangePasswordMailFlashMessage = template.HTML("You will receive an email with instructions on how to reset your password in a few minutes") // ChangedPasswordFlashMessage changed password success flash message ChangedPasswordFlashMessage = template.HTML("Changed your password!") )
View Source
var DefaultAuthorizeHandler = func(context *auth.Context) (*claims.Claims, error) { var ( authInfo auth_identity.Basic req = context.Request tx = context.Auth.GetDB(req) provider, _ = context.Provider.(*Provider) ) req.ParseForm() authInfo.Provider = provider.GetName() authInfo.UID = strings.TrimSpace(req.Form.Get("login")) if tx.Model(context.Auth.AuthIdentityModel).Where("provider = ? AND uid = ?", authInfo.Provider, authInfo.UID).Scan(&authInfo).RecordNotFound() { return nil, auth.ErrInvalidAccount } if provider.Config.Confirmable && authInfo.ConfirmedAt == nil { currentUser, _ := context.Auth.UserStorer.Get(authInfo.ToClaims(), context) provider.Config.ConfirmMailer(authInfo.UID, context, authInfo.ToClaims(), currentUser) return nil, ErrUnconfirmed } if err := provider.Encryptor.Compare(authInfo.EncryptedPassword, strings.TrimSpace(req.Form.Get("password"))); err == nil { return authInfo.ToClaims(), err } return nil, auth.ErrInvalidPassword }
DefaultAuthorizeHandler default authorize handler
View Source
var DefaultConfirmHandler = func(context *auth.Context) error { var ( authInfo auth_identity.Basic provider, _ = context.Provider.(*Provider) tx = context.Auth.GetDB(context.Request) token = context.Request.URL.Query().Get("token") ) claims, err := context.SessionStorer.ValidateClaims(token) if err == nil { if err = claims.Valid(); err == nil { authInfo.Provider = provider.GetName() authInfo.UID = claims.Id authIdentity := reflect.New(utils.ModelType(context.Auth.Config.AuthIdentityModel)).Interface() if tx.Where("provider = ? AND uid = ?", authInfo.Provider, authInfo.UID).First(authIdentity).RecordNotFound() { err = auth.ErrInvalidAccount } if err == nil { if authInfo.ConfirmedAt == nil { now := time.Now() authInfo.ConfirmedAt = &now if err = tx.Model(authIdentity).Update(authInfo).Error; err == nil { context.SessionStorer.Flash(context.Writer, context.Request, session.Message{Message: ConfirmedAccountFlashMessage, Type: "success"}) context.Auth.Redirector.Redirect(context.Writer, context.Request, "confirm") return nil } } err = ErrAlreadyConfirmed } } } return err }
DefaultConfirmHandler default confirm handler
View Source
var DefaultConfirmationMailer = func(email string, context *auth.Context, claims *claims.Claims, currentUser interface{}) error { claims.Subject = "confirm" return context.Auth.Mailer.Send( mailer.Email{ TO: []mail.Address{{Address: email}}, Subject: ConfirmationMailSubject, }, mailer.Template{ Name: "auth/confirmation", Data: context, Request: context.Request, Writer: context.Writer, }.Funcs(template.FuncMap{ "current_user": func() interface{} { return currentUser }, "confirm_url": func() string { confirmURL := utils.GetAbsURL(context.Request) confirmURL.Path = path.Join(context.Auth.AuthURL("password/confirm")) qry := confirmURL.Query() qry.Set("token", context.SessionStorer.SignedToken(claims)) confirmURL.RawQuery = qry.Encode() return confirmURL.String() }, })) }
DefaultConfirmationMailer default confirm mailer
View Source
var DefaultRecoverPasswordHandler = func(context *auth.Context) error { context.Request.ParseForm() var ( authInfo auth_identity.Basic email = context.Request.Form.Get("email") provider, _ = context.Provider.(*Provider) ) authInfo.Provider = provider.GetName() authInfo.UID = strings.TrimSpace(email) currentUser, err := context.Auth.UserStorer.Get(authInfo.ToClaims(), context) if err != nil { return err } err = provider.ResetPasswordMailer(email, context, authInfo.ToClaims(), currentUser) if err == nil { context.SessionStorer.Flash(context.Writer, context.Request, session.Message{Message: SendChangePasswordMailFlashMessage, Type: "success"}) context.Auth.Redirector.Redirect(context.Writer, context.Request, "send_recover_password_mail") } return err }
DefaultRecoverPasswordHandler default reset password handler
View Source
var DefaultRegisterHandler = func(context *auth.Context) (*claims.Claims, error) { var ( err error currentUser interface{} schema auth.Schema authInfo auth_identity.Basic req = context.Request tx = context.Auth.GetDB(req) provider, _ = context.Provider.(*Provider) ) req.ParseForm() if req.Form.Get("login") == "" { return nil, auth.ErrInvalidAccount } if req.Form.Get("password") == "" { return nil, auth.ErrInvalidPassword } authInfo.Provider = provider.GetName() authInfo.UID = strings.TrimSpace(req.Form.Get("login")) if !tx.Model(context.Auth.AuthIdentityModel).Where("provider = ? AND uid = ?", authInfo.Provider, authInfo.UID).Scan(&authInfo).RecordNotFound() { return nil, auth.ErrInvalidAccount } if authInfo.EncryptedPassword, err = provider.Encryptor.Digest(strings.TrimSpace(req.Form.Get("password"))); err == nil { schema.Provider = authInfo.Provider schema.UID = authInfo.UID schema.Email = authInfo.UID schema.RawInfo = req currentUser, authInfo.UserID, err = context.Auth.UserStorer.Save(&schema, context) if err != nil { return nil, err } authIdentity := reflect.New(utils.ModelType(context.Auth.Config.AuthIdentityModel)).Interface() copier.Copy(authIdentity, authInfo) if err = tx.Where("provider = ? AND uid = ?", authInfo.Provider, authInfo.UID).FirstOrCreate(authIdentity).Error; err == nil { if provider.Config.Confirmable { context.SessionStorer.Flash(context.Writer, req, session.Message{Message: ConfirmFlashMessage, Type: "success"}) err = provider.Config.ConfirmMailer(schema.Email, context, authInfo.ToClaims(), currentUser) } return authInfo.ToClaims(), err } } return nil, err }
DefaultRegisterHandler default register handler
View Source
var DefaultResetPasswordHandler = func(context *auth.Context) error { context.Request.ParseForm() var ( authInfo auth_identity.Basic token = context.Request.Form.Get("reset_password_token") provider, _ = context.Provider.(*Provider) tx = context.Auth.GetDB(context.Request) ) claims, err := context.SessionStorer.ValidateClaims(token) if err == nil { if err = claims.Valid(); err == nil { authInfo.Provider = provider.GetName() authInfo.UID = claims.Id authIdentity := reflect.New(utils.ModelType(context.Auth.Config.AuthIdentityModel)).Interface() if tx.Where("provider = ? AND uid = ?", authInfo.Provider, authInfo.UID).First(authIdentity).RecordNotFound() { return auth.ErrInvalidAccount } if authInfo.EncryptedPassword, err = provider.Encryptor.Digest(strings.TrimSpace(context.Request.Form.Get("new_password"))); err == nil { if provider.Config.Confirmable && authInfo.ConfirmedAt == nil { now := time.Now() authInfo.ConfirmedAt = &now } err = tx.Model(authIdentity).Update(authInfo).Error } } } if err == nil { context.SessionStorer.Flash(context.Writer, context.Request, session.Message{Message: ChangedPasswordFlashMessage, Type: "success"}) context.Auth.Redirector.Redirect(context.Writer, context.Request, "reset_password") } return err }
DefaultResetPasswordHandler default reset password handler
View Source
var DefaultResetPasswordMailer = func(email string, context *auth.Context, claims *claims.Claims, currentUser interface{}) error { claims.Subject = "reset_password" return context.Auth.Mailer.Send( mailer.Email{ TO: []mail.Address{{Address: email}}, Subject: ResetPasswordMailSubject, }, mailer.Template{ Name: "auth/reset_password", Data: context, Request: context.Request, Writer: context.Writer, }.Funcs(template.FuncMap{ "current_user": func() interface{} { return currentUser }, "reset_password_url": func() string { resetPasswordURL := utils.GetAbsURL(context.Request) resetPasswordURL.Path = path.Join(context.Auth.AuthURL("password/edit")) qry := resetPasswordURL.Query() qry.Set("token", context.SessionStorer.SignedToken(claims)) resetPasswordURL.RawQuery = qry.Encode() return resetPasswordURL.String() }, }), ) }
DefaultResetPasswordMailer default reset password mailer
View Source
var ( // ErrInvalidResetPasswordToken invalid reset password token ErrInvalidResetPasswordToken = errors.New("Invalid Token") )
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { Confirmable bool ConfirmMailer func(email string, context *auth.Context, claims *claims.Claims, currentUser interface{}) error ConfirmHandler func(*auth.Context) error ResetPasswordMailer func(email string, context *auth.Context, claims *claims.Claims, currentUser interface{}) error ResetPasswordHandler func(*auth.Context) error RecoverPasswordHandler func(*auth.Context) error Encryptor encryptor.Interface AuthorizeHandler func(*auth.Context) (*claims.Claims, error) RegisterHandler func(*auth.Context) (*claims.Claims, error) }
Config password config
type Provider ¶
type Provider struct {
*Config
}
Provider provide login with password method
func (Provider) ConfigAuth ¶
ConfigAuth config auth
Click to show internal directories.
Click to hide internal directories.