diff options
Diffstat (limited to 'api')
-rw-r--r-- | api/admin.go | 35 | ||||
-rw-r--r-- | api/admin_test.go | 15 |
2 files changed, 50 insertions, 0 deletions
diff --git a/api/admin.go b/api/admin.go index d48c8d379..573a22c6b 100644 --- a/api/admin.go +++ b/api/admin.go @@ -48,6 +48,7 @@ func InitAdmin() { BaseRoutes.Admin.Handle("/remove_certificate", ApiAdminSystemRequired(removeCertificate)).Methods("POST") BaseRoutes.Admin.Handle("/saml_cert_status", ApiAdminSystemRequired(samlCertificateStatus)).Methods("GET") BaseRoutes.Admin.Handle("/cluster_status", ApiAdminSystemRequired(getClusterStatus)).Methods("GET") + BaseRoutes.Admin.Handle("/recently_active_users/{team_id:[A-Za-z0-9]+}", ApiUserRequiredActivity(getRecentlyActiveUsers, false)).Methods("GET") } func getLogs(c *Context, w http.ResponseWriter, r *http.Request) { @@ -754,3 +755,37 @@ func samlCertificateStatus(c *Context, w http.ResponseWriter, r *http.Request) { w.Write([]byte(model.StringInterfaceToJson(status))) } + +func getRecentlyActiveUsers(c *Context, w http.ResponseWriter, r *http.Request) { + statusMap := map[string]interface{}{} + + if result := <-Srv.Store.Status().GetAllFromTeam(c.TeamId); result.Err != nil { + c.Err = result.Err + return + } else { + statuses := result.Data.([]*model.Status) + for _, s := range statuses { + statusMap[s.UserId] = s.LastActivityAt + } + } + + if result := <-Srv.Store.User().GetProfiles(c.TeamId); result.Err != nil { + c.Err = result.Err + return + } else { + profiles := result.Data.(map[string]*model.User) + + for k, p := range profiles { + p = sanitizeProfile(c, p) + + if lastActivityAt, ok := statusMap[p.Id].(int64); ok { + p.LastActivityAt = lastActivityAt + } + + profiles[k] = p + } + + w.Write([]byte(model.UserMapToJson(profiles))) + } + +} diff --git a/api/admin_test.go b/api/admin_test.go index 3d8a95676..7f3c584d8 100644 --- a/api/admin_test.go +++ b/api/admin_test.go @@ -527,3 +527,18 @@ func TestAdminLdapSyncNow(t *testing.T) { t.Fatal("Returned Failure") } } + +func TestGetRecentlyActiveUsers(t *testing.T) { + th := Setup().InitBasic() + + user1Id := th.BasicUser.Id + user2Id := th.BasicUser2.Id + + if userMap, err := th.BasicClient.GetRecentlyActiveUsers(th.BasicTeam.Id); err != nil { + t.Fatal(err) + } else if len(userMap.Data.(map[string]*model.User)) != 2 { + t.Fatal("should have been 2") + } else if userMap.Data.(map[string]*model.User)[user1Id].Id != user1Id || userMap.Data.(map[string]*model.User)[user2Id].Id != user2Id { + t.Fatal("should have been valid") + } +} |