MCPcopy
hub / github.com/semaphoreui/semaphore / AddUser

Method AddUser

api/users.go:62–109  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

60}
61
62func (c *UsersController) AddUser(w http.ResponseWriter, r *http.Request) {
63 var user db.UserWithPwd
64 if !helpers.Bind(w, r, &user) {
65 return
66 }
67
68 editor := helpers.GetFromContext(r, "user").(*db.User)
69 if !editor.Admin {
70 log.Warn(editor.Username + " is not permitted to create users")
71 w.WriteHeader(http.StatusUnauthorized)
72 return
73 }
74
75 if user.Pro {
76 ok, err := c.subscriptionService.CanAddProUser()
77
78 if err != nil {
79 w.WriteHeader(http.StatusInternalServerError)
80 return
81 }
82
83 if !ok {
84 helpers.WriteErrorStatus(
85 w,
86 "You have reached the limit of Pro users for your subscription.",
87 http.StatusForbidden,
88 )
89 return
90 }
91 }
92
93 var err error
94 var newUser db.User
95
96 if user.External {
97 newUser, err = helpers.Store(r).CreateUserWithoutPassword(user.User)
98 } else {
99 newUser, err = helpers.Store(r).CreateUser(user)
100 }
101
102 if err != nil {
103 log.Warn(editor.Username + " is not created: " + err.Error())
104 w.WriteHeader(http.StatusBadRequest)
105 return
106 }
107
108 helpers.WriteJSON(w, http.StatusCreated, newUser)
109}
110func readonlyUserMiddleware(next http.Handler) http.Handler {
111 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
112 userID, err := helpers.GetIntParam("user_id", w, r)

Callers

nothing calls this directly

Calls 9

BindFunction · 0.92
GetFromContextFunction · 0.92
WriteErrorStatusFunction · 0.92
StoreFunction · 0.92
WriteJSONFunction · 0.92
CanAddProUserMethod · 0.65
CreateUserMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected