diff options
author | Ruzette Tanyag <ruzette@users.noreply.github.com> | 2017-02-28 04:14:16 -0500 |
---|---|---|
committer | George Goldberg <george@gberg.me> | 2017-02-28 09:14:16 +0000 |
commit | cef5028cbeed93b6493f6d1f379afe4ca85535c8 (patch) | |
tree | 6424b7878b372c6457845f933d7406c971399f79 /api4/preference.go | |
parent | 758402311a97a053a5276049db6dce4f8f8dcfbc (diff) | |
download | chat-cef5028cbeed93b6493f6d1f379afe4ca85535c8.tar.gz chat-cef5028cbeed93b6493f6d1f379afe4ca85535c8.tar.bz2 chat-cef5028cbeed93b6493f6d1f379afe4ca85535c8.zip |
Implemented preferences endpoints for apiv4 (#5531)
* implemented preferences endpoints for apiv4
* added user id in preferences endpoints
Diffstat (limited to 'api4/preference.go')
-rw-r--r-- | api4/preference.go | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/api4/preference.go b/api4/preference.go new file mode 100644 index 000000000..9ba6b85d2 --- /dev/null +++ b/api4/preference.go @@ -0,0 +1,153 @@ +// // Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// // See License.txt for license information. + +package api4 + +import ( + "net/http" + + l4g "github.com/alecthomas/log4go" + "github.com/mattermost/platform/app" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" +) + +func InitPreference() { + l4g.Debug(utils.T("api.preference.init.debug")) + + BaseRoutes.Preferences.Handle("", ApiSessionRequired(getPreferences)).Methods("GET") + BaseRoutes.Preferences.Handle("", ApiSessionRequired(updatePreferences)).Methods("PUT") + BaseRoutes.Preferences.Handle("/delete", ApiSessionRequired(deletePreferences)).Methods("POST") + BaseRoutes.Preferences.Handle("/{category:[A-Za-z0-9_]+}", ApiSessionRequired(getPreferencesByCategory)).Methods("GET") + BaseRoutes.Preferences.Handle("/{category:[A-Za-z0-9_]+}/name/{preference_name:[A-Za-z0-9_]+}", ApiSessionRequired(getPreferenceByCategoryAndName)).Methods("GET") +} + +func getPreferences(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUserId() + if c.Err != nil { + return + } + + if !app.SessionHasPermissionToUser(c.Session, c.Params.UserId) { + c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) + return + } + + if preferences, err := app.GetPreferencesForUser(c.Params.UserId); err != nil { + c.Err = err + return + } else { + w.Write([]byte(preferences.ToJson())) + return + } +} + +func getPreferencesByCategory(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUserId().RequireCategory() + if c.Err != nil { + return + } + + if !app.SessionHasPermissionToUser(c.Session, c.Params.UserId) { + c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) + return + } + + if preferences, err := app.GetPreferenceByCategoryForUser(c.Params.UserId, c.Params.Category); err != nil { + c.Err = err + return + } else { + w.Write([]byte(preferences.ToJson())) + return + } +} + +func getPreferenceByCategoryAndName(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUserId().RequireCategory().RequirePreferenceName() + if c.Err != nil { + return + } + + if !app.SessionHasPermissionToUser(c.Session, c.Params.UserId) { + c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) + return + } + + if preferences, err := app.GetPreferenceByCategoryAndNameForUser(c.Params.UserId, c.Params.Category, c.Params.PreferenceName); err != nil { + c.Err = err + return + } else { + w.Write([]byte(preferences.ToJson())) + return + } +} + +func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUserId() + if c.Err != nil { + return + } + + if !app.SessionHasPermissionToUser(c.Session, c.Params.UserId) { + c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) + return + } + + preferences, err := model.PreferencesFromJson(r.Body) + if err != nil { + c.SetInvalidParam("preferences") + return + } + + for _, preference := range preferences { + if c.Params.UserId != preference.UserId { + c.Err = model.NewAppError("savePreferences", "api.preference.update_preferences.set.app_error", nil, + c.T("api.preference.update_preferences.set_details.app_error", + map[string]interface{}{"SessionUserId": c.Params.UserId, "PreferenceUserId": preference.UserId}), + http.StatusForbidden) + return + } + } + + if _, err := app.UpdatePreferences(preferences); err != nil { + c.Err = err + return + } + + ReturnStatusOK(w) +} + +func deletePreferences(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUserId() + if c.Err != nil { + return + } + + if !app.SessionHasPermissionToUser(c.Session, c.Params.UserId) { + c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) + return + } + + preferences, err := model.PreferencesFromJson(r.Body) + if err != nil { + c.SetInvalidParam("preferences") + return + } + + for _, preference := range preferences { + if c.Params.UserId != preference.UserId { + c.Err = model.NewAppError("deletePreferences", "api.preference.delete_preferences.delete.app_error", nil, + c.T("api.preference.delete_preferences.delete.app_error", + map[string]interface{}{"SessionUserId": c.Params.UserId, "PreferenceUserId": preference.UserId}), + http.StatusForbidden) + return + } + } + + if _, err := app.DeletePreferences(c.Params.UserId, preferences); err != nil { + c.Err = err + return + } + + ReturnStatusOK(w) +} |