mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 05:51:51 +08:00
merge create user handlers
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -389,7 +390,7 @@ func createUser(name string, role string, isAdmin bool) m.User {
|
|||||||
setting.AutoAssignOrgRole = role
|
setting.AutoAssignOrgRole = role
|
||||||
|
|
||||||
currentUserCmd := m.CreateUserCommand{Login: name, Email: name + "@test.com", Name: "a " + name, IsAdmin: isAdmin}
|
currentUserCmd := m.CreateUserCommand{Login: name, Email: name + "@test.com", Name: "a " + name, IsAdmin: isAdmin}
|
||||||
err := CreateUser(¤tUserCmd)
|
err := CreateUser(context.Background(), ¤tUserCmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
q1 := m.GetUserOrgListQuery{UserId: currentUserCmd.Result.Id}
|
q1 := m.GetUserOrgListQuery{UserId: currentUserCmd.Result.Id}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -22,9 +23,9 @@ func TestAccountDataAccess(t *testing.T) {
|
|||||||
ac1cmd := m.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"}
|
ac1cmd := m.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"}
|
||||||
ac2cmd := m.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name"}
|
ac2cmd := m.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name"}
|
||||||
|
|
||||||
err := CreateUser(&ac1cmd)
|
err := CreateUser(context.Background(), &ac1cmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
err = CreateUser(&ac2cmd)
|
err = CreateUser(context.Background(), &ac2cmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
q1 := m.GetUserOrgListQuery{UserId: ac1cmd.Result.Id}
|
q1 := m.GetUserOrgListQuery{UserId: ac1cmd.Result.Id}
|
||||||
@ -43,8 +44,8 @@ func TestAccountDataAccess(t *testing.T) {
|
|||||||
ac1cmd := m.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"}
|
ac1cmd := m.CreateUserCommand{Login: "ac1", Email: "ac1@test.com", Name: "ac1 name"}
|
||||||
ac2cmd := m.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name", IsAdmin: true}
|
ac2cmd := m.CreateUserCommand{Login: "ac2", Email: "ac2@test.com", Name: "ac2 name", IsAdmin: true}
|
||||||
|
|
||||||
err := CreateUser(&ac1cmd)
|
err := CreateUser(context.Background(), &ac1cmd)
|
||||||
err = CreateUser(&ac2cmd)
|
err = CreateUser(context.Background(), &ac2cmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
|
|
||||||
ac1 := ac1cmd.Result
|
ac1 := ac1cmd.Result
|
||||||
@ -182,7 +183,7 @@ func TestAccountDataAccess(t *testing.T) {
|
|||||||
|
|
||||||
Convey("Given an org user with dashboard permissions", func() {
|
Convey("Given an org user with dashboard permissions", func() {
|
||||||
ac3cmd := m.CreateUserCommand{Login: "ac3", Email: "ac3@test.com", Name: "ac3 name", IsAdmin: false}
|
ac3cmd := m.CreateUserCommand{Login: "ac3", Email: "ac3@test.com", Name: "ac3 name", IsAdmin: false}
|
||||||
err := CreateUser(&ac3cmd)
|
err := CreateUser(context.Background(), &ac3cmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
ac3 := ac3cmd.Result
|
ac3 := ac3cmd.Result
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ func TestTeamCommandsAndQueries(t *testing.T) {
|
|||||||
Name: fmt.Sprint("user", i),
|
Name: fmt.Sprint("user", i),
|
||||||
Login: fmt.Sprint("loginuser", i),
|
Login: fmt.Sprint("loginuser", i),
|
||||||
}
|
}
|
||||||
err := CreateUser(userCmd)
|
err := CreateUser(context.Background(), userCmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
userIds = append(userIds, userCmd.Result.Id)
|
userIds = append(userIds, userCmd.Result.Id)
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
bus.AddHandler("sql", CreateUser)
|
//bus.AddHandler("sql", CreateUser)
|
||||||
bus.AddHandler("sql", GetUserById)
|
bus.AddHandler("sql", GetUserById)
|
||||||
bus.AddHandler("sql", UpdateUser)
|
bus.AddHandler("sql", UpdateUser)
|
||||||
bus.AddHandler("sql", ChangeUserPassword)
|
bus.AddHandler("sql", ChangeUserPassword)
|
||||||
@ -31,7 +31,7 @@ func init() {
|
|||||||
bus.AddHandler("sql", DeleteUser)
|
bus.AddHandler("sql", DeleteUser)
|
||||||
bus.AddHandler("sql", UpdateUserPermissions)
|
bus.AddHandler("sql", UpdateUserPermissions)
|
||||||
bus.AddHandler("sql", SetUserHelpFlag)
|
bus.AddHandler("sql", SetUserHelpFlag)
|
||||||
bus.AddHandlerCtx("sql", CreateUserCtx)
|
bus.AddHandlerCtx("sql", CreateUser)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getOrgIdForNewUser(cmd *m.CreateUserCommand, sess *DBSession) (int64, error) {
|
func getOrgIdForNewUser(cmd *m.CreateUserCommand, sess *DBSession) (int64, error) {
|
||||||
@ -81,90 +81,80 @@ func getOrgIdForNewUser(cmd *m.CreateUserCommand, sess *DBSession) (int64, error
|
|||||||
return org.Id, nil
|
return org.Id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func internalCreateUser(sess *DBSession, cmd *m.CreateUserCommand) error {
|
func CreateUser(ctx context.Context, cmd *m.CreateUserCommand) error {
|
||||||
orgId, err := getOrgIdForNewUser(cmd, sess)
|
return inTransactionWithRetryCtx(ctx, func(sess *DBSession) error {
|
||||||
if err != nil {
|
orgId, err := getOrgIdForNewUser(cmd, sess)
|
||||||
return err
|
if err != nil {
|
||||||
}
|
return err
|
||||||
|
|
||||||
if cmd.Email == "" {
|
|
||||||
cmd.Email = cmd.Login
|
|
||||||
}
|
|
||||||
|
|
||||||
// create user
|
|
||||||
user := m.User{
|
|
||||||
Email: cmd.Email,
|
|
||||||
Name: cmd.Name,
|
|
||||||
Login: cmd.Login,
|
|
||||||
Company: cmd.Company,
|
|
||||||
IsAdmin: cmd.IsAdmin,
|
|
||||||
OrgId: orgId,
|
|
||||||
EmailVerified: cmd.EmailVerified,
|
|
||||||
Created: time.Now(),
|
|
||||||
Updated: time.Now(),
|
|
||||||
LastSeenAt: time.Now().AddDate(-10, 0, 0),
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(cmd.Password) > 0 {
|
|
||||||
user.Salt = util.GetRandomString(10)
|
|
||||||
user.Rands = util.GetRandomString(10)
|
|
||||||
user.Password = util.EncodePassword(cmd.Password, user.Salt)
|
|
||||||
}
|
|
||||||
|
|
||||||
sess.UseBool("is_admin")
|
|
||||||
|
|
||||||
if _, err := sess.Insert(&user); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
sess.publishAfterCommit(&events.UserCreated{
|
|
||||||
Timestamp: user.Created,
|
|
||||||
Id: user.Id,
|
|
||||||
Name: user.Name,
|
|
||||||
Login: user.Login,
|
|
||||||
Email: user.Email,
|
|
||||||
})
|
|
||||||
|
|
||||||
cmd.Result = user
|
|
||||||
|
|
||||||
// create org user link
|
|
||||||
if !cmd.SkipOrgSetup {
|
|
||||||
orgUser := m.OrgUser{
|
|
||||||
OrgId: orgId,
|
|
||||||
UserId: user.Id,
|
|
||||||
Role: m.ROLE_ADMIN,
|
|
||||||
Created: time.Now(),
|
|
||||||
Updated: time.Now(),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if setting.AutoAssignOrg && !user.IsAdmin {
|
if cmd.Email == "" {
|
||||||
if len(cmd.DefaultOrgRole) > 0 {
|
cmd.Email = cmd.Login
|
||||||
orgUser.Role = m.RoleType(cmd.DefaultOrgRole)
|
}
|
||||||
} else {
|
|
||||||
orgUser.Role = m.RoleType(setting.AutoAssignOrgRole)
|
// create user
|
||||||
|
user := m.User{
|
||||||
|
Email: cmd.Email,
|
||||||
|
Name: cmd.Name,
|
||||||
|
Login: cmd.Login,
|
||||||
|
Company: cmd.Company,
|
||||||
|
IsAdmin: cmd.IsAdmin,
|
||||||
|
OrgId: orgId,
|
||||||
|
EmailVerified: cmd.EmailVerified,
|
||||||
|
Created: time.Now(),
|
||||||
|
Updated: time.Now(),
|
||||||
|
LastSeenAt: time.Now().AddDate(-10, 0, 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cmd.Password) > 0 {
|
||||||
|
user.Salt = util.GetRandomString(10)
|
||||||
|
user.Rands = util.GetRandomString(10)
|
||||||
|
user.Password = util.EncodePassword(cmd.Password, user.Salt)
|
||||||
|
}
|
||||||
|
|
||||||
|
sess.UseBool("is_admin")
|
||||||
|
|
||||||
|
if _, err := sess.Insert(&user); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
sess.publishAfterCommit(&events.UserCreated{
|
||||||
|
Timestamp: user.Created,
|
||||||
|
Id: user.Id,
|
||||||
|
Name: user.Name,
|
||||||
|
Login: user.Login,
|
||||||
|
Email: user.Email,
|
||||||
|
})
|
||||||
|
|
||||||
|
cmd.Result = user
|
||||||
|
|
||||||
|
// create org user link
|
||||||
|
if !cmd.SkipOrgSetup {
|
||||||
|
orgUser := m.OrgUser{
|
||||||
|
OrgId: orgId,
|
||||||
|
UserId: user.Id,
|
||||||
|
Role: m.ROLE_ADMIN,
|
||||||
|
Created: time.Now(),
|
||||||
|
Updated: time.Now(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if setting.AutoAssignOrg && !user.IsAdmin {
|
||||||
|
if len(cmd.DefaultOrgRole) > 0 {
|
||||||
|
orgUser.Role = m.RoleType(cmd.DefaultOrgRole)
|
||||||
|
} else {
|
||||||
|
orgUser.Role = m.RoleType(setting.AutoAssignOrgRole)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err = sess.Insert(&orgUser); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = sess.Insert(&orgUser); err != nil {
|
return nil
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateUserCtx(ctx context.Context, cmd *m.CreateUserCommand) error {
|
|
||||||
return inTransactionWithRetryCtx(ctx, func(sess *DBSession) error {
|
|
||||||
return internalCreateUser(sess, cmd)
|
|
||||||
}, 0)
|
}, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateUser(cmd *m.CreateUserCommand) error {
|
|
||||||
return inTransaction(func(sess *DBSession) error {
|
|
||||||
return internalCreateUser(sess, cmd)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUserById(query *m.GetUserByIdQuery) error {
|
func GetUserById(query *m.GetUserByIdQuery) error {
|
||||||
user := new(m.User)
|
user := new(m.User)
|
||||||
has, err := x.Id(query.Id).Get(user)
|
has, err := x.Id(query.Id).Get(user)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -22,7 +23,7 @@ func TestUserAuth(t *testing.T) {
|
|||||||
Name: fmt.Sprint("user", i),
|
Name: fmt.Sprint("user", i),
|
||||||
Login: fmt.Sprint("loginuser", i),
|
Login: fmt.Sprint("loginuser", i),
|
||||||
}
|
}
|
||||||
err = CreateUser(cmd)
|
err = CreateUser(context.Background(), cmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
users = append(users, cmd.Result)
|
users = append(users, cmd.Result)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package sqlstore
|
package sqlstore
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
@ -24,7 +25,7 @@ func TestUserDataAccess(t *testing.T) {
|
|||||||
Name: fmt.Sprint("user", i),
|
Name: fmt.Sprint("user", i),
|
||||||
Login: fmt.Sprint("loginuser", i),
|
Login: fmt.Sprint("loginuser", i),
|
||||||
}
|
}
|
||||||
err = CreateUser(cmd)
|
err = CreateUser(context.Background(), cmd)
|
||||||
So(err, ShouldBeNil)
|
So(err, ShouldBeNil)
|
||||||
users = append(users, cmd.Result)
|
users = append(users, cmd.Result)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user