MCPcopy Index your code
hub / github.com/1Panel-dev/KubePi / CreateUser

Method CreateUser

internal/api/v1/user/user.go:109–181  ·  view source on GitHub ↗

Create User @Tags users @Summary Create user @Description Create user @Accept json @Produce json @Param request body docs.UserCreate true "request" @Success 200 {object} v1User.User @Security ApiKeyAuth @Router /users [post]

()

Source from the content-addressed store, hash-verified

107// @Security ApiKeyAuth
108// @Router /users [post]
109func (h *Handler) CreateUser() iris.Handler {
110 return func(ctx *context.Context) {
111 var req User
112 if err := ctx.ReadJSON(&req); err != nil {
113 ctx.StatusCode(iris.StatusBadRequest)
114 ctx.Values().Set("message", err.Error())
115 return
116 }
117 u := ctx.Values().Get("profile")
118 profile := u.(session.UserProfile)
119 //tx
120 tx, err := server.DB().Begin(true)
121 if err != nil {
122 ctx.StatusCode(iris.StatusInternalServerError)
123 ctx.Values().Set("message", err.Error())
124 return
125 }
126 req.CreatedBy = profile.Name
127 if req.Language == "" {
128 req.Language = profile.Language
129 }
130 req.Type = v1User.LOCAL
131 if err := h.userService.Create(&req.User, common.DBOptions{DB: tx}); err != nil {
132 _ = tx.Rollback()
133 if errors.Is(err, storm.ErrAlreadyExists) {
134 u, _ := h.userService.GetByNameOrEmail(req.User.Name, common.DBOptions{})
135 if u != nil {
136 ctx.StatusCode(iris.StatusInternalServerError)
137 ctx.Values().Set("message", "username already exists")
138 return
139 }
140 u, _ = h.userService.GetByNameOrEmail(req.User.Email, common.DBOptions{})
141 if u != nil {
142 ctx.StatusCode(iris.StatusInternalServerError)
143 ctx.Values().Set("message", "email already exists")
144 return
145 }
146 }
147 ctx.StatusCode(iris.StatusInternalServerError)
148 ctx.Values().Set("message", err.Error())
149 return
150 }
151 if len(req.Roles) > 0 {
152 for i := range req.Roles {
153 roleName := req.Roles[i]
154 binding := v1Role.Binding{
155 BaseModel: v1.BaseModel{
156 Kind: "RoleBind",
157 ApiVersion: "v1",
158 CreatedBy: profile.Name,
159 },
160 Metadata: v1.Metadata{
161 Name: fmt.Sprintf("role-binding-%s-%s", roleName, req.Name),
162 },
163 Subject: v1Role.Subject{
164 Kind: "User",
165 Name: req.Name,
166 },

Callers 1

InstallFunction · 0.95

Calls 8

DBFunction · 0.92
sanitizeUserFunction · 0.85
ErrorMethod · 0.80
GetMethod · 0.65
CreateMethod · 0.65
GetByNameOrEmailMethod · 0.65
CreateRoleBindingMethod · 0.65
SetMethod · 0.45

Tested by

no test coverage detected