@ -86,104 +86,98 @@ func (ss *SQLStore) getOrgIDForNewUser(sess *DBSession, args userCreationArgs) (
}
// createUser creates a user in the database.
func ( ss * SQLStore ) createUser ( ctx context . Context , args userCreationArgs , skipOrgSetup bool ) ( models . User , error ) {
func ( ss * SQLStore ) createUser ( ctx context . Context , sess * DBSession , args userCreationArgs , skipOrgSetup bool ) ( models . User , error ) {
var user models . User
if err := inTransactionWithRetryCtx ( ctx , ss . engine , func ( sess * DBSession ) error {
var orgID int64 = - 1
if ! skipOrgSetup {
var err error
orgID , err = ss . getOrgIDForNewUser ( sess , args )
if err != nil {
return err
}
}
if args . Email == "" {
args . Email = args . Login
}
exists , err := sess . Where ( "email=? OR login=?" , args . Email , args . Login ) . Get ( & models . User { } )
var orgID int64 = - 1
if ! skipOrgSetup {
var err error
orgID , err = ss . getOrgIDForNewUser ( sess , args )
if err != nil {
return err
}
if exists {
return models . ErrUserAlreadyExists
return user , err
}
}
// create user
user = models . User {
Email : args . Email ,
Name : args . Name ,
Login : args . Login ,
Company : args . Company ,
IsAdmin : args . IsAdmin ,
IsDisabled : args . IsDisabled ,
OrgId : orgID ,
EmailVerified : args . EmailVerified ,
Created : time . Now ( ) ,
Updated : time . Now ( ) ,
LastSeenAt : time . Now ( ) . AddDate ( - 10 , 0 , 0 ) ,
}
if args . Email == "" {
args . Email = args . Login
}
salt , err := util . GetRandomString ( 10 )
if err != nil {
return err
}
user . Salt = salt
rands , err := util . GetRandomString ( 10 )
if err != nil {
return err
}
user . Rands = rands
exists , err := sess . Where ( "email=? OR login=?" , args . Email , args . Login ) . Get ( & models . User { } )
if err != nil {
return user , err
}
if exists {
return user , models . ErrUserAlreadyExists
}
if len ( args . Password ) > 0 {
encodedPassword , err := util . EncodePassword ( args . Password , user . Salt )
if err != nil {
return err
}
user . Password = encodedPassword
}
// create user
user = models . User {
Email : args . Email ,
Name : args . Name ,
Login : args . Login ,
Company : args . Company ,
IsAdmin : args . IsAdmin ,
IsDisabled : args . IsDisabled ,
OrgId : orgID ,
EmailVerified : args . EmailVerified ,
Created : time . Now ( ) ,
Updated : time . Now ( ) ,
LastSeenAt : time . Now ( ) . AddDate ( - 10 , 0 , 0 ) ,
}
sess . UseBool ( "is_admin" )
salt , err := util . GetRandomString ( 10 )
if err != nil {
return user , err
}
user . Salt = salt
rands , err := util . GetRandomString ( 10 )
if err != nil {
return user , err
}
user . Rands = rands
if _ , err := sess . Insert ( & user ) ; err != nil {
return err
if len ( args . Password ) > 0 {
encodedPassword , err := util . EncodePassword ( args . Password , user . Salt )
if err != nil {
return user , err
}
user . Password = encodedPassword
}
sess . publishAfterCommit ( & events . UserCreated {
Timestamp : user . Created ,
Id : user . Id ,
Name : user . Name ,
Login : user . Login ,
Email : user . Email ,
} )
sess . UseBool ( "is_admin" )
// create org user link
if ! skipOrgSetup {
orgUser := models . OrgUser {
OrgId : orgID ,
UserId : user . Id ,
Role : models . ROLE_ADMIN ,
Created : time . Now ( ) ,
Updated : time . Now ( ) ,
}
if _ , err := sess . Insert ( & user ) ; err != nil {
return user , err
}
if ss . Cfg . AutoAssignOrg && ! user . IsAdmin {
if len ( args . DefaultOrgRole ) > 0 {
orgUser . Role = models . RoleType ( args . DefaultOrgRole )
} else {
orgUser . Role = models . RoleType ( ss . Cfg . AutoAssignOrgRole )
}
}
sess . publishAfterCommit ( & events . UserCreated {
Timestamp : user . Created ,
Id : user . Id ,
Name : user . Name ,
Login : user . Login ,
Email : user . Email ,
} )
if _ , err = sess . Insert ( & orgUser ) ; err != nil {
return err
// create org user link
if ! skipOrgSetup {
orgUser := models . OrgUser {
OrgId : orgID ,
UserId : user . Id ,
Role : models . ROLE_ADMIN ,
Created : time . Now ( ) ,
Updated : time . Now ( ) ,
}
if ss . Cfg . AutoAssignOrg && ! user . IsAdmin {
if len ( args . DefaultOrgRole ) > 0 {
orgUser . Role = models . RoleType ( args . DefaultOrgRole )
} else {
orgUser . Role = models . RoleType ( ss . Cfg . AutoAssignOrgRole )
}
}
return nil
} , 0 ) ; err != nil {
return user , err
if _ , err = sess . Insert ( & orgUser ) ; err != nil {
return user , err
}
}
return user , nil