Browse Source

#3515 use alert instead 500 for duplicated login source name

pull/3558/head
Unknwon 8 years ago
parent
commit
99c2ae7b35
  1. 1
      conf/locale/locale_en-US.ini
  2. 37
      models/error.go
  3. 18
      models/login.go
  4. 1
      models/user.go
  5. 4
      modules/bindata/bindata.go
  6. 9
      routers/admin/auths.go
  7. 2
      routers/api/v1/admin/user.go

1
conf/locale/locale_en-US.ini

@ -1028,6 +1028,7 @@ auths.delete_auth_title = Authentication Deletion
auths.delete_auth_desc = This authentication is going to be deleted, do you want to continue? auths.delete_auth_desc = This authentication is going to be deleted, do you want to continue?
auths.still_in_used = This authentication is still used by some users, please delete or convert these users to another login type first. auths.still_in_used = This authentication is still used by some users, please delete or convert these users to another login type first.
auths.deletion_success = Authentication has been deleted successfully! auths.deletion_success = Authentication has been deleted successfully!
auths.login_source_exist = Login source '%s' already exists.
config.server_config = Server Configuration config.server_config = Server Configuration
config.app_name = Application Name config.app_name = Application Name

37
models/error.go

@ -602,24 +602,37 @@ func (err ErrAttachmentNotExist) Error() string {
return fmt.Sprintf("attachment does not exist [id: %d, uuid: %s]", err.ID, err.UUID) return fmt.Sprintf("attachment does not exist [id: %d, uuid: %s]", err.ID, err.UUID)
} }
// _____ __ .__ __ .__ __ .__ // .____ .__ _________
// / _ \ __ ___/ |_| |__ ____ _____/ |_|__| ____ _____ _/ |_|__| ____ ____ // | | ____ ____ |__| ____ / _____/ ____ __ _________ ____ ____
// / /_\ \| | \ __\ | \_/ __ \ / \ __\ |/ ___\\__ \\ __\ |/ _ \ / \ // | | / _ \ / ___\| |/ \ \_____ \ / _ \| | \_ __ \_/ ___\/ __ \
// / | \ | /| | | Y \ ___/| | \ | | \ \___ / __ \| | | ( <_> ) | \ // | |__( <_> ) /_/ > | | \ / ( <_> ) | /| | \/\ \__\ ___/
// \____|__ /____/ |__| |___| /\___ >___| /__| |__|\___ >____ /__| |__|\____/|___| / // |_______ \____/\___ /|__|___| / /_______ /\____/|____/ |__| \___ >___ >
// \/ \/ \/ \/ \/ \/ \/ // \/ /_____/ \/ \/ \/ \/
type ErrAuthenticationNotExist struct { type ErrLoginSourceNotExist struct {
ID int64 ID int64
} }
func IsErrAuthenticationNotExist(err error) bool { func IsErrLoginSourceNotExist(err error) bool {
_, ok := err.(ErrAuthenticationNotExist) _, ok := err.(ErrLoginSourceNotExist)
return ok return ok
} }
func (err ErrAuthenticationNotExist) Error() string { func (err ErrLoginSourceNotExist) Error() string {
return fmt.Sprintf("authentication does not exist [id: %d]", err.ID) return fmt.Sprintf("login source does not exist [id: %d]", err.ID)
}
type ErrLoginSourceAlreadyExist struct {
Name string
}
func IsErrLoginSourceAlreadyExist(err error) bool {
_, ok := err.(ErrLoginSourceAlreadyExist)
return ok
}
func (err ErrLoginSourceAlreadyExist) Error() string {
return fmt.Sprintf("login source already exists [name: %s]", err.Name)
} }
// ___________ // ___________

18
models/login.go

@ -25,8 +25,7 @@ import (
) )
var ( var (
ErrAuthenticationAlreadyExist = errors.New("Authentication already exist") ErrAuthenticationUserUsed = errors.New("Authentication has been used by some users")
ErrAuthenticationUserUsed = errors.New("Authentication has been used by some users")
) )
type LoginType int type LoginType int
@ -230,8 +229,15 @@ func CountLoginSources() int64 {
return count return count
} }
func CreateSource(source *LoginSource) error { func CreateLoginSource(source *LoginSource) error {
_, err := x.Insert(source) has, err := x.Get(&LoginSource{Name: source.Name})
if err != nil {
return err
} else if has {
return ErrLoginSourceAlreadyExist{source.Name}
}
_, err = x.Insert(source)
return err return err
} }
@ -247,7 +253,7 @@ func GetLoginSourceByID(id int64) (*LoginSource, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} else if !has { } else if !has {
return nil, ErrAuthenticationNotExist{id} return nil, ErrLoginSourceNotExist{id}
} }
return source, nil return source, nil
} }
@ -542,7 +548,7 @@ func UserSignIn(uname, passwd string) (*User, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} else if !hasSource { } else if !hasSource {
return nil, ErrLoginSourceNotExist return nil, ErrLoginSourceNotExist{u.LoginSource}
} }
return ExternalUserLogin(u, u.LoginName, passwd, &source, false) return ExternalUserLogin(u, u.LoginName, passwd, &source, false)

1
models/user.go

@ -46,7 +46,6 @@ var (
ErrEmailNotExist = errors.New("E-mail does not exist") ErrEmailNotExist = errors.New("E-mail does not exist")
ErrEmailNotActivated = errors.New("E-mail address has not been activated") ErrEmailNotActivated = errors.New("E-mail address has not been activated")
ErrUserNameIllegal = errors.New("User name contains illegal characters") ErrUserNameIllegal = errors.New("User name contains illegal characters")
ErrLoginSourceNotExist = errors.New("Login source does not exist")
ErrLoginSourceNotActived = errors.New("Login source is not actived") ErrLoginSourceNotActived = errors.New("Login source is not actived")
ErrUnsupportedLoginType = errors.New("Login source is unknown") ErrUnsupportedLoginType = errors.New("Login source is unknown")
) )

4
modules/bindata/bindata.go

File diff suppressed because one or more lines are too long

9
routers/admin/auths.go

@ -146,13 +146,18 @@ func NewAuthSourcePost(ctx *context.Context, form auth.AuthenticationForm) {
return return
} }
if err := models.CreateSource(&models.LoginSource{ if err := models.CreateLoginSource(&models.LoginSource{
Type: models.LoginType(form.Type), Type: models.LoginType(form.Type),
Name: form.Name, Name: form.Name,
IsActived: form.IsActive, IsActived: form.IsActive,
Cfg: config, Cfg: config,
}); err != nil { }); err != nil {
ctx.Handle(500, "CreateSource", err) if models.IsErrLoginSourceAlreadyExist(err) {
ctx.Data["Err_Name"] = true
ctx.RenderWithErr(ctx.Tr("admin.auths.login_source_exist", err.(models.ErrLoginSourceAlreadyExist).Name), AUTH_NEW, form)
} else {
ctx.Handle(500, "CreateSource", err)
}
return return
} }

2
routers/api/v1/admin/user.go

@ -21,7 +21,7 @@ func parseLoginSource(ctx *context.APIContext, u *models.User, sourceID int64, l
source, err := models.GetLoginSourceByID(sourceID) source, err := models.GetLoginSourceByID(sourceID)
if err != nil { if err != nil {
if models.IsErrAuthenticationNotExist(err) { if models.IsErrLoginSourceNotExist(err) {
ctx.Error(422, "", err) ctx.Error(422, "", err)
} else { } else {
ctx.Error(500, "GetLoginSourceByID", err) ctx.Error(500, "GetLoginSourceByID", err)

Loading…
Cancel
Save