diff options
author | Ruzette Tanyag <ruzette@users.noreply.github.com> | 2017-02-08 05:00:16 -0500 |
---|---|---|
committer | Joram Wilander <jwawilander@gmail.com> | 2017-02-08 02:00:16 -0800 |
commit | 0162d8ad08815b9b833fc651c7e185eab48cbbb2 (patch) | |
tree | 384c0032d766ad4a017a8a232590709134df8462 /api4/user.go | |
parent | 5462f0119edb788428f90fc61c8651e4a8cd9ad1 (diff) | |
download | chat-0162d8ad08815b9b833fc651c7e185eab48cbbb2.tar.gz chat-0162d8ad08815b9b833fc651c7e185eab48cbbb2.tar.bz2 chat-0162d8ad08815b9b833fc651c7e185eab48cbbb2.zip |
Implement GET `/users/username/{username}` endpoint for APIv4 (#5310)
* added get user by username endpoint
* added get user by username unit test and driver
* changed username length to 22 characters max
* changed Params to UserName to Username
* reorganized get user by username and get user by email formatting in model/client4
Diffstat (limited to 'api4/user.go')
-rw-r--r-- | api4/user.go | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/api4/user.go b/api4/user.go index 348ccf46c..d8d071cd2 100644 --- a/api4/user.go +++ b/api4/user.go @@ -30,6 +30,7 @@ func InitUser() { BaseRoutes.Users.Handle("/login", ApiHandler(login)).Methods("POST") BaseRoutes.Users.Handle("/logout", ApiHandler(logout)).Methods("POST") + BaseRoutes.UserByUsername.Handle("", ApiSessionRequired(getUserByUsername)).Methods("GET") BaseRoutes.UserByEmail.Handle("", ApiSessionRequired(getUserByEmail)).Methods("GET") } @@ -93,6 +94,34 @@ func getUser(c *Context, w http.ResponseWriter, r *http.Request) { } } +func getUserByUsername(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUsername() + if c.Err != nil { + return + } + + // No permission check required + + var user *model.User + var err *model.AppError + + if user, err = app.GetUserByUsername(c.Params.Username); err != nil { + c.Err = err + return + } + + etag := user.Etag(utils.Cfg.PrivacySettings.ShowFullName, utils.Cfg.PrivacySettings.ShowEmailAddress) + + if HandleEtag(etag, "Get User", w, r) { + return + } else { + app.SanitizeProfile(user, c.IsSystemAdmin()) + w.Header().Set(model.HEADER_ETAG_SERVER, etag) + w.Write([]byte(user.ToJson())) + return + } +} + func getUserByEmail(c *Context, w http.ResponseWriter, r *http.Request) { c.RequireEmail() if c.Err != nil { |