MCPcopy Create free account
hub / github.com/0xUnixIO/pulse / handleUpdateUser

Method handleUpdateUser

internal/serverapi/users.go:246–350  ·  view source on GitHub ↗
(w http.ResponseWriter, r *http.Request, userID string)

Source from the content-addressed store, hash-verified

244}
245
246func (a *userAPI) handleUpdateUser(w http.ResponseWriter, r *http.Request, userID string) {
247 user, err := a.users.GetUser(userID)
248 if err != nil {
249 writeUserError(w, err)
250 return
251 }
252
253 var req updateUserRequest
254 if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
255 writeJSON(w, http.StatusBadRequest, map[string]any{"error": "invalid json body"})
256 return
257 }
258
259 if req.Status != "" {
260 if !validStatus(req.Status) {
261 writeJSON(w, http.StatusBadRequest, map[string]any{"error": "invalid status"})
262 return
263 }
264 user.Status = req.Status
265 }
266 if req.ExpireAt != nil {
267 user.ExpireAt = req.ExpireAt
268 }
269 if req.DataLimitResetStrategy != "" {
270 if !validResetStrategy(req.DataLimitResetStrategy) {
271 writeJSON(w, http.StatusBadRequest, map[string]any{"error": "invalid data_limit_reset_strategy"})
272 return
273 }
274 user.DataLimitResetStrategy = req.DataLimitResetStrategy
275 }
276 // 在字段赋值前记录变更,避免赋值后比较恒为 false
277 proxyFieldChanged := req.Status != "" ||
278 req.ExpireAt != nil ||
279 (req.TrafficLimit >= 0 && req.TrafficLimit != user.TrafficLimit) ||
280 req.DataLimitResetStrategy != ""
281
282 if req.TrafficLimit >= 0 && req.TrafficLimit != user.TrafficLimit {
283 user.TrafficLimit = req.TrafficLimit
284 user.PlanTrafficLimit = req.TrafficLimit
285 }
286 if req.PlanTrafficLimit != nil {
287 user.PlanTrafficLimit = *req.PlanTrafficLimit
288 }
289 if req.Note != nil {
290 user.Note = strings.TrimSpace(*req.Note)
291 }
292 if req.OnHoldExpireAt != nil {
293 user.OnHoldExpireAt = req.OnHoldExpireAt
294 }
295 if req.ClearOnHoldExpireAt {
296 user.OnHoldExpireAt = nil
297 }
298 if req.LastTrafficResetAt != nil {
299 user.LastTrafficResetAt = req.LastTrafficResetAt
300 }
301 if req.ClearLastTrafficReset {
302 user.LastTrafficResetAt = nil
303 }

Callers 1

handleUserMethod · 0.95

Calls 12

syncUserInboundsMethod · 0.95
applyNodesMethod · 0.95
triggerUserApplyMethod · 0.95
writeUserErrorFunction · 0.85
validStatusFunction · 0.85
validResetStrategyFunction · 0.85
internalErrorFunction · 0.85
writeJSONFunction · 0.70
GetUserMethod · 0.65
UpsertUserMethod · 0.65
SetPasswordMethod · 0.65
DeleteByUserIDMethod · 0.65

Tested by

no test coverage detected