From b57b5abce814cfcdf3889d4e267492e809245593 Mon Sep 17 00:00:00 2001 From: Carlos Tadeu Panato Junior Date: Fri, 21 Apr 2017 11:16:35 +0200 Subject: implement POST /logs for apiV4 (#6143) --- api4/system.go | 29 +++++++++++++++++++++++++++++ api4/system_test.go | 20 ++++++++++++++++++++ 2 files changed, 49 insertions(+) (limited to 'api4') diff --git a/api4/system.go b/api4/system.go index dfc702c8c..55be559bf 100644 --- a/api4/system.go +++ b/api4/system.go @@ -29,6 +29,7 @@ func InitSystem() { BaseRoutes.ApiRoot.Handle("/caches/invalidate", ApiSessionRequired(invalidateCaches)).Methods("POST") BaseRoutes.ApiRoot.Handle("/logs", ApiSessionRequired(getLogs)).Methods("GET") + BaseRoutes.ApiRoot.Handle("/logs", ApiSessionRequired(postLog)).Methods("POST") } func getSystemPing(c *Context, w http.ResponseWriter, r *http.Request) { @@ -160,6 +161,34 @@ func getLogs(c *Context, w http.ResponseWriter, r *http.Request) { w.Write([]byte(model.ArrayToJson(lines))) } +func postLog(c *Context, w http.ResponseWriter, r *http.Request) { + if !*utils.Cfg.ServiceSettings.EnableDeveloper && !app.SessionHasPermissionTo(c.Session, model.PERMISSION_MANAGE_SYSTEM) { + c.SetPermissionError(model.PERMISSION_MANAGE_SYSTEM) + return + } + + m := model.MapFromJson(r.Body) + lvl := m["level"] + msg := m["message"] + + if len(msg) > 400 { + msg = msg[0:399] + } + + if lvl == "ERROR" { + err := &model.AppError{} + err.Message = msg + err.Id = msg + err.Where = "client" + c.LogError(err) + } else { + l4g.Debug(msg) + } + + m["message"] = msg + w.Write([]byte(model.MapToJson(m))) +} + func getClientConfig(c *Context, w http.ResponseWriter, r *http.Request) { format := r.URL.Query().Get("format") diff --git a/api4/system_test.go b/api4/system_test.go index b2b5d3f43..ba30dd1eb 100644 --- a/api4/system_test.go +++ b/api4/system_test.go @@ -317,3 +317,23 @@ func TestGetLogs(t *testing.T) { _, resp = Client.GetLogs(0, 10) CheckUnauthorizedStatus(t, resp) } + +func TestPostLog(t *testing.T) { + th := Setup().InitBasic().InitSystemAdmin() + defer TearDown() + Client := th.Client + + message := make(map[string]string) + message["level"] = "ERROR" + message["message"] = "this is a test" + + _, resp := Client.PostLog(message) + CheckForbiddenStatus(t, resp) + + logMessage, resp := th.SystemAdminClient.PostLog(message) + CheckNoError(t, resp) + if len(logMessage) == 0 { + t.Fatal("should return the log message") + } + +} -- cgit v1.2.3-1-g7c22