|
@@ -49,6 +49,8 @@ func userHandlers(r *mux.Router) {
|
|
|
r.HandleFunc("/api/users/{username}", logic.SecurityCheck(false, logic.ContinueIfUserMatch(http.HandlerFunc(getUser)))).Methods(http.MethodGet)
|
|
|
r.HandleFunc("/api/users/{username}/enable", logic.SecurityCheck(true, http.HandlerFunc(enableUserAccount))).Methods(http.MethodPost)
|
|
|
r.HandleFunc("/api/users/{username}/disable", logic.SecurityCheck(true, http.HandlerFunc(disableUserAccount))).Methods(http.MethodPost)
|
|
|
+ r.HandleFunc("/api/users/{username}/settings", logic.SecurityCheck(false, logic.ContinueIfUserMatch(http.HandlerFunc(getUserSettings)))).Methods(http.MethodGet)
|
|
|
+ r.HandleFunc("/api/users/{username}/settings", logic.SecurityCheck(false, logic.ContinueIfUserMatch(http.HandlerFunc(updateUserSettings)))).Methods(http.MethodPut)
|
|
|
r.HandleFunc("/api/v1/users", logic.SecurityCheck(false, logic.ContinueIfUserMatch(http.HandlerFunc(getUserV1)))).Methods(http.MethodGet)
|
|
|
r.HandleFunc("/api/users", logic.SecurityCheck(true, http.HandlerFunc(getUsers))).Methods(http.MethodGet)
|
|
|
r.HandleFunc("/api/v1/users/roles", logic.SecurityCheck(true, http.HandlerFunc(ListRoles))).Methods(http.MethodGet)
|
|
@@ -817,6 +819,46 @@ func disableUserAccount(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnSuccessResponse(w, r, "user account disabled")
|
|
|
}
|
|
|
|
|
|
+// @Summary Get a user's preferences and settings
|
|
|
+// @Router /api/users/{username}/settings [get]
|
|
|
+// @Tags Users
|
|
|
+// @Param username path string true "Username of the user"
|
|
|
+// @Success 200 {object} models.SuccessResponse
|
|
|
+func getUserSettings(w http.ResponseWriter, r *http.Request) {
|
|
|
+ userID := r.Header.Get("user")
|
|
|
+ userSettings := logic.GetUserSettings(userID)
|
|
|
+ logic.ReturnSuccessResponseWithJson(w, r, userSettings, "fetched user settings")
|
|
|
+}
|
|
|
+
|
|
|
+// @Summary Update a user's preferences and settings
|
|
|
+// @Router /api/users/{username}/settings [put]
|
|
|
+// @Tags Users
|
|
|
+// @Param username path string true "Username of the user"
|
|
|
+// @Success 200 {object} models.SuccessResponse
|
|
|
+// @Failure 400 {object} models.ErrorResponse
|
|
|
+// @Failure 500 {object} models.ErrorResponse
|
|
|
+func updateUserSettings(w http.ResponseWriter, r *http.Request) {
|
|
|
+ userID := r.Header.Get("user")
|
|
|
+ var req models.UserSettings
|
|
|
+ err := json.NewDecoder(r.Body).Decode(&req)
|
|
|
+ if err != nil {
|
|
|
+ logger.Log(0, "failed to decode request body: ", err.Error())
|
|
|
+ err = fmt.Errorf("invalid request body: %v", err)
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ err = logic.UpsertUserSettings(userID, req)
|
|
|
+ if err != nil {
|
|
|
+ err = fmt.Errorf("failed to update user settings: %v", err.Error())
|
|
|
+ logger.Log(0, err.Error())
|
|
|
+ logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ logic.ReturnSuccessResponseWithJson(w, r, req, "updated user settings")
|
|
|
+}
|
|
|
+
|
|
|
// swagger:route GET /api/v1/users user getUserV1
|
|
|
//
|
|
|
// Get an individual user with role info.
|
|
@@ -1383,6 +1425,7 @@ func deleteUser(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ _ = logic.DeleteUserInvite(user.UserName)
|
|
|
mq.PublishPeerUpdate(false)
|
|
|
if servercfg.IsDNSMode() {
|
|
|
logic.SetDNS()
|