Skip to content

Commit

Permalink
add return value for user creationg
Browse files Browse the repository at this point in the history
  • Loading branch information
simonycj committed Nov 20, 2024
1 parent 9ca340d commit d10ec2c
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 18 deletions.
2 changes: 1 addition & 1 deletion pkg/core/auth/abstraction.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type IUserProvider interface {
GetUser(id string, options map[string]struct{}) (*core.CoreUser, error)
UpdateUser(user *core.CoreUser, options map[string]struct{}) error
DeleteUser(id string, options map[string]struct{}) error
CreateUser(user *core.CoreUser, options map[string]struct{}) error
CreateUser(user *core.CoreUser, options map[string]struct{}) (*core.CoreUser, error)
LoginUser(username, password string) (*core.CoreUser, error)
}

Expand Down
10 changes: 5 additions & 5 deletions pkg/core/auth/provider/keystone/train/trian_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1767,11 +1767,11 @@ var _ = Describe("keystone user tests", func() {
Email: "",
Password: "test4",
}
err := keystone.CreateUser(userToCreate, map[string]struct{}{})
_, err := keystone.CreateUser(userToCreate, map[string]struct{}{})
Expect(err).To(BeNil())
// test conflict user will be rejected
userToCreate.Name = "test1"
err = keystone.CreateUser(userToCreate, map[string]struct{}{})
_, err = keystone.CreateUser(userToCreate, map[string]struct{}{})
Expect(err).NotTo(BeNil())
Expect(userCreated.Name).To(Equal("test4"))
})
Expand All @@ -1788,7 +1788,7 @@ var _ = Describe("keystone user tests", func() {
Password: "test4",
Roles: []core.CoreRole{{Id: "test4id"}},
}
err := keystone.CreateUser(userToCreate, map[string]struct{}{})
_, err := keystone.CreateUser(userToCreate, map[string]struct{}{})
Expect(err).NotTo(BeNil())
_, ok := err.(*customErr.NotFound)
Expect(ok).To(BeTrue())
Expand All @@ -1807,7 +1807,7 @@ var _ = Describe("keystone user tests", func() {
Password: "test4",
Groups: []core.CoreGroup{{Id: "test4id"}},
}
err := keystone.CreateUser(userToCreate, map[string]struct{}{})
_, err := keystone.CreateUser(userToCreate, map[string]struct{}{})
Expect(err).NotTo(BeNil())
_, ok := err.(*customErr.NotFound)
Expect(ok).To(BeTrue())
Expand All @@ -1827,7 +1827,7 @@ var _ = Describe("keystone user tests", func() {
Roles: []core.CoreRole{{Id: "test1id"}},
Groups: []core.CoreGroup{{Id: "test1id"}},
}
err := keystone.CreateUser(userToCreate, map[string]struct{}{})
_, err := keystone.CreateUser(userToCreate, map[string]struct{}{})
Expect(err).To(BeNil())
Expect(userCreated.Name).To(Equal("test4"))
Expect(userCreated.CoreUser.Roles[0].Id).To(Equal("test1id"))
Expand Down
37 changes: 28 additions & 9 deletions pkg/core/auth/provider/keystone/train/user_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,35 +207,35 @@ func (up *UserProvider) DeleteUser(id string, options map[string]struct{}) error
}

// create user
func (up *UserProvider) CreateUser(user *core.CoreUser, options map[string]struct{}) error {
func (up *UserProvider) CreateUser(user *core.CoreUser, options map[string]struct{}) (*core.CoreUser, error) {

// get role map
mapRoles, err := getRoleMap(up.Config, up.token, options)
if err != nil {
coreApiLog.Logger.Error("Failed to get role map", "error", err)
return err
return nil, err
}

// check if all roles are valid
for _, role := range user.Roles {
if _, found := mapRoles[role.Id]; !found {
coreApiLog.Logger.Error("Role not found", "role", role.Id, "user", user.Name)
return customErr.NewNotFound(http.StatusNotFound, fmt.Sprintf("Role %s not found", role.Id))
return nil, customErr.NewNotFound(http.StatusNotFound, fmt.Sprintf("Role %s not found", role.Id))
}
}

// get group map
mapGroups, err := getGroupMap(up.Config, up.token, options)
if err != nil {
coreApiLog.Logger.Error("Failed to get group map", "error", err)
return err
return nil, err
}

// check if all groups are valid
for _, group := range user.Groups {
if _, found := mapGroups[group.Id]; !found {
coreApiLog.Logger.Error("Group not found", "group", group.Id, "user", user.Name)
return customErr.NewNotFound(http.StatusNotFound, fmt.Sprintf("Group %s not found", group.Id))
return nil, customErr.NewNotFound(http.StatusNotFound, fmt.Sprintf("Group %s not found", group.Id))
}
}

Expand All @@ -257,16 +257,35 @@ func (up *UserProvider) CreateUser(user *core.CoreUser, options map[string]struc
}{User: userPost})
if err != nil {
coreApiLog.Logger.Error("Failed to marshal user", "error", err)
return err
return nil, err
}

_, _, _, err = commentRequestAutoRenewToken("/v3/users", http.MethodPost, up.Config.AuthConfig.Keystone, up.getToken, up.setToken, postBody)
retBodyBytes, _, retCode, err := commentRequestAutoRenewToken("/v3/users", http.MethodPost, up.Config.AuthConfig.Keystone, up.getToken, up.setToken, postBody)
if err != nil {
coreApiLog.Logger.Error("Failed to create user", "error", err)
return err
return nil, err
}

return nil
if retCode != http.StatusCreated && retCode != http.StatusOK {
coreApiLog.Logger.Error("Failed to create user", "code", retCode, "body", string(retBodyBytes))
return nil, fmt.Errorf("failed to create user")
}

var userContainer struct {
User *User `json:"user"`
}

err = json.Unmarshal(retBodyBytes, &userContainer)
if err != nil {
coreApiLog.Logger.Error("Failed to unmarshal user", "error", err)
return nil, err
}

fmt.Println(userContainer)

user.Id = userContainer.User.ID

return user, nil
}

func (up *UserProvider) getToken() (string, error) {
Expand Down
6 changes: 3 additions & 3 deletions pkg/north/api/route/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -1091,7 +1091,7 @@ func CreateCreateUserHandler(config *config.Config) func(w http.ResponseWriter,
return
}

err = userProvider.CreateUser(userPost, nil)
retUserPost, err := userProvider.CreateUser(userPost, nil)
if err != nil {
// check error is not found error
if _, ok := err.(*customErr.NotFound); ok {
Expand All @@ -1102,7 +1102,7 @@ func CreateCreateUserHandler(config *config.Config) func(w http.ResponseWriter,
return
}

httpHelper.WriteResponseEntity(w, userPost)
httpHelper.WriteResponseEntity(w, retUserPost)
}
}

Expand Down Expand Up @@ -2375,7 +2375,7 @@ func CreateUploadUsersHandler(config *config.Config) func(w http.ResponseWriter,
// create user then
roleId := flatRoles[record[2]].Id
groupId := flatGroup[record[3]].Id
err := userProvider.CreateUser(&coreUserV1.CoreUser{
_, err := userProvider.CreateUser(&coreUserV1.CoreUser{
Name: record[0],
Password: record[1],
Roles: []coreUserV1.CoreRole{
Expand Down

0 comments on commit d10ec2c

Please sign in to comment.