MCPcopy Create free account
hub / github.com/cloudbase/garm / CreateUser

Method CreateUser

database/sql/users.go:59–93  ·  view source on GitHub ↗
(_ context.Context, user params.NewUserParams)

Source from the content-addressed store, hash-verified

57}
58
59func (s *sqlDatabase) CreateUser(_ context.Context, user params.NewUserParams) (params.User, error) {
60 if user.Username == "" || user.Email == "" || user.Password == "" {
61 return params.User{}, runnerErrors.NewBadRequestError("missing username, password or email")
62 }
63 newUser := User{
64 Username: user.Username,
65 Password: user.Password,
66 FullName: user.FullName,
67 Enabled: user.Enabled,
68 Email: user.Email,
69 IsAdmin: user.IsAdmin,
70 }
71 err := s.conn.Transaction(func(tx *gorm.DB) error {
72 if _, err := s.getUserByUsernameOrEmail(tx, user.Username); err == nil || !errors.Is(err, runnerErrors.ErrNotFound) {
73 return runnerErrors.NewConflictError("username already exists")
74 }
75 if _, err := s.getUserByUsernameOrEmail(tx, user.Email); err == nil || !errors.Is(err, runnerErrors.ErrNotFound) {
76 return runnerErrors.NewConflictError("email already exists")
77 }
78
79 if s.hasAdmin(tx) && user.IsAdmin {
80 return runnerErrors.NewBadRequestError("admin user already exists")
81 }
82
83 q := tx.Save(&newUser)
84 if q.Error != nil {
85 return fmt.Errorf("error creating user: %w", q.Error)
86 }
87 return nil
88 })
89 if err != nil {
90 return params.User{}, fmt.Errorf("error creating user: %w", err)
91 }
92 return s.sqlToParamsUser(newUser), nil
93}
94
95func (s *sqlDatabase) hasAdmin(tx *gorm.DB) bool {
96 var user User

Callers

nothing calls this directly

Calls 3

hasAdminMethod · 0.95
sqlToParamsUserMethod · 0.95

Tested by

no test coverage detected