summaryrefslogtreecommitdiffstats
path: root/api4/preference.go
diff options
context:
space:
mode:
authorRuzette Tanyag <ruzette@users.noreply.github.com>2017-02-28 04:14:16 -0500
committerGeorge Goldberg <george@gberg.me>2017-02-28 09:14:16 +0000
commitcef5028cbeed93b6493f6d1f379afe4ca85535c8 (patch)
tree6424b7878b372c6457845f933d7406c971399f79 /api4/preference.go
parent758402311a97a053a5276049db6dce4f8f8dcfbc (diff)
downloadchat-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.go153
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)
+}