github.com/vnforks/kid@v5.11.1+incompatible/api4/preference.go (about) 1 // // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // // See License.txt for license information. 3 4 package api4 5 6 import ( 7 "net/http" 8 9 "github.com/mattermost/mattermost-server/model" 10 ) 11 12 func (api *API) InitPreference() { 13 api.BaseRoutes.Preferences.Handle("", api.ApiSessionRequired(getPreferences)).Methods("GET") 14 api.BaseRoutes.Preferences.Handle("", api.ApiSessionRequired(updatePreferences)).Methods("PUT") 15 api.BaseRoutes.Preferences.Handle("/delete", api.ApiSessionRequired(deletePreferences)).Methods("POST") 16 api.BaseRoutes.Preferences.Handle("/{category:[A-Za-z0-9_]+}", api.ApiSessionRequired(getPreferencesByCategory)).Methods("GET") 17 api.BaseRoutes.Preferences.Handle("/{category:[A-Za-z0-9_]+}/name/{preference_name:[A-Za-z0-9_]+}", api.ApiSessionRequired(getPreferenceByCategoryAndName)).Methods("GET") 18 } 19 20 func getPreferences(c *Context, w http.ResponseWriter, r *http.Request) { 21 c.RequireUserId() 22 if c.Err != nil { 23 return 24 } 25 26 if !c.App.SessionHasPermissionToUser(c.App.Session, c.Params.UserId) { 27 c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) 28 return 29 } 30 31 preferences, err := c.App.GetPreferencesForUser(c.Params.UserId) 32 if err != nil { 33 c.Err = err 34 return 35 } 36 37 w.Write([]byte(preferences.ToJson())) 38 } 39 40 func getPreferencesByCategory(c *Context, w http.ResponseWriter, r *http.Request) { 41 c.RequireUserId().RequireCategory() 42 if c.Err != nil { 43 return 44 } 45 46 if !c.App.SessionHasPermissionToUser(c.App.Session, c.Params.UserId) { 47 c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) 48 return 49 } 50 51 preferences, err := c.App.GetPreferenceByCategoryForUser(c.Params.UserId, c.Params.Category) 52 if err != nil { 53 c.Err = err 54 return 55 } 56 57 w.Write([]byte(preferences.ToJson())) 58 } 59 60 func getPreferenceByCategoryAndName(c *Context, w http.ResponseWriter, r *http.Request) { 61 c.RequireUserId().RequireCategory().RequirePreferenceName() 62 if c.Err != nil { 63 return 64 } 65 66 if !c.App.SessionHasPermissionToUser(c.App.Session, c.Params.UserId) { 67 c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) 68 return 69 } 70 71 preferences, err := c.App.GetPreferenceByCategoryAndNameForUser(c.Params.UserId, c.Params.Category, c.Params.PreferenceName) 72 if err != nil { 73 c.Err = err 74 return 75 } 76 77 w.Write([]byte(preferences.ToJson())) 78 } 79 80 func updatePreferences(c *Context, w http.ResponseWriter, r *http.Request) { 81 c.RequireUserId() 82 if c.Err != nil { 83 return 84 } 85 86 if !c.App.SessionHasPermissionToUser(c.App.Session, c.Params.UserId) { 87 c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) 88 return 89 } 90 91 preferences, err := model.PreferencesFromJson(r.Body) 92 if err != nil { 93 c.SetInvalidParam("preferences") 94 return 95 } 96 97 var sanitizedPreferences model.Preferences 98 99 for _, pref := range preferences { 100 if pref.Category == model.PREFERENCE_CATEGORY_FLAGGED_POST { 101 post, err := c.App.GetSinglePost(pref.Name) 102 if err != nil { 103 c.SetInvalidParam("preference.name") 104 return 105 } 106 107 if !c.App.SessionHasPermissionToChannel(c.App.Session, post.ChannelId, model.PERMISSION_READ_CHANNEL) { 108 c.SetPermissionError(model.PERMISSION_READ_CHANNEL) 109 return 110 } 111 } 112 113 sanitizedPreferences = append(sanitizedPreferences, pref) 114 } 115 116 if err := c.App.UpdatePreferences(c.Params.UserId, sanitizedPreferences); err != nil { 117 c.Err = err 118 return 119 } 120 121 ReturnStatusOK(w) 122 } 123 124 func deletePreferences(c *Context, w http.ResponseWriter, r *http.Request) { 125 c.RequireUserId() 126 if c.Err != nil { 127 return 128 } 129 130 if !c.App.SessionHasPermissionToUser(c.App.Session, c.Params.UserId) { 131 c.SetPermissionError(model.PERMISSION_EDIT_OTHER_USERS) 132 return 133 } 134 135 preferences, err := model.PreferencesFromJson(r.Body) 136 if err != nil { 137 c.SetInvalidParam("preferences") 138 return 139 } 140 141 if err := c.App.DeletePreferences(c.Params.UserId, preferences); err != nil { 142 c.Err = err 143 return 144 } 145 146 ReturnStatusOK(w) 147 }