diff options
Diffstat (limited to 'api/admin.go')
-rw-r--r-- | api/admin.go | 35 |
1 files changed, 35 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))) + } + +} |