func GetDataSourceById(c *middleware.Context) Response { query := m.GetDataSourceByIdQuery{ Id: c.ParamsInt64(":id"), OrgId: c.OrgId, } if err := bus.Dispatch(&query); err != nil { if err == m.ErrDataSourceNotFound { return ApiError(404, "Data source not found", nil) } return ApiError(500, "Failed to query datasources", err) } ds := query.Result return Json(200, &dtos.DataSource{ Id: ds.Id, OrgId: ds.OrgId, Name: ds.Name, Url: ds.Url, Type: ds.Type, Access: ds.Access, Password: ds.Password, Database: ds.Database, User: ds.User, BasicAuth: ds.BasicAuth, BasicAuthUser: ds.BasicAuthUser, BasicAuthPassword: ds.BasicAuthPassword, WithCredentials: ds.WithCredentials, IsDefault: ds.IsDefault, JsonData: ds.JsonData, }) }
func ValidateOrgPlaylist(c *middleware.Context) { id := c.ParamsInt64(":id") query := m.GetPlaylistByIdQuery{Id: id} err := bus.Dispatch(&query) if err != nil { c.JsonApiErr(404, "Playlist not found", err) return } if query.Result.OrgId == 0 { c.JsonApiErr(404, "Playlist not found", err) return } if query.Result.OrgId != c.OrgId { c.JsonApiErr(403, "You are not allowed to edit/view playlist", nil) return } items, itemsErr := LoadPlaylistItemDTOs(id) if itemsErr != nil { c.JsonApiErr(404, "Playlist items not found", err) return } if len(items) == 0 { c.JsonApiErr(404, "Playlist is empty", itemsErr) return } }
func ProxyDataSourceRequest(c *middleware.Context) { ds, err := getDatasource(c.ParamsInt64(":id"), c.OrgId) if err != nil { c.JsonApiErr(500, "Unable to load datasource meta data", err) return } targetUrl, _ := url.Parse(ds.Url) if len(setting.DataProxyWhiteList) > 0 { if _, exists := setting.DataProxyWhiteList[targetUrl.Host]; !exists { c.JsonApiErr(403, "Data proxy hostname and ip are not included in whitelist", nil) return } } keystoneAuth, _ := ds.JsonData["keystoneAuth"].(bool) if keystoneAuth { token, err := keystone.GetToken(c) if err != nil { c.JsonApiErr(500, "Failed to get keystone token", err) } c.Req.Request.Header["X-Auth-Token"] = []string{token} } if ds.Type == m.DS_CLOUDWATCH { cloudwatch.HandleRequest(c, ds) } else { proxyPath := c.Params("*") proxy := NewReverseProxy(ds, proxyPath, targetUrl) proxy.Transport = dataProxyTransport proxy.ServeHTTP(c.Resp, c.Req.Request) c.Resp.Header().Del("Set-Cookie") } }
//ProxyDataSourceRequest TODO need to cache datasources func ProxyDataSourceRequest(c *middleware.Context) { id := c.ParamsInt64(":id") query := m.GetDataSourceByIdQuery{Id: id, OrgId: c.OrgId} if err := bus.Dispatch(&query); err != nil { c.JsonApiErr(500, "Unable to load datasource meta data", err) return } ds := query.Result targetUrl, _ := url.Parse(ds.Url) if len(setting.DataProxyWhiteList) > 0 { if _, exists := setting.DataProxyWhiteList[targetUrl.Host]; !exists { c.JsonApiErr(403, "Data proxy hostname and ip are not included in whitelist", nil) return } } if query.Result.Type == m.DS_CLOUDWATCH { cloudwatch.HandleRequest(c) } else { proxyPath := c.Params("*") proxy := NewReverseProxy(&ds, proxyPath, targetUrl) proxy.Transport = dataProxyTransport proxy.ServeHTTP(c.RW(), c.Req.Request) } }
func GetPendingAlertActionHistory(c *middleware.Context) Response { logger := log.New("main") logger.Info("GetMachine123 %s") alertId := c.ParamsInt64(":id") return GetPendingAlertActionHistoryHelper(alertId) }
func AdminUpdateUserPassword(c *middleware.Context, form dtos.AdminUpdateUserPasswordForm) { userId := c.ParamsInt64(":id") if len(form.Password) < 4 { c.JsonApiErr(400, "New password too short", nil) return } userQuery := m.GetUserByIdQuery{Id: userId} if err := bus.Dispatch(&userQuery); err != nil { c.JsonApiErr(500, "Could not read user from database", err) return } passwordHashed := util.EncodePassword(form.Password, userQuery.Result.Salt) cmd := m.ChangeUserPasswordCommand{ UserId: userId, NewPassword: passwordHashed, } if err := bus.Dispatch(&cmd); err != nil { c.JsonApiErr(500, "Failed to update user password", err) return } c.JsonOK("User password updated") }
func GetDataSourceById(c *middleware.Context) { query := m.GetDataSourceByIdQuery{ Id: c.ParamsInt64(":id"), OrgId: c.OrgId, } if err := bus.Dispatch(&query); err != nil { c.JsonApiErr(500, "Failed to query datasources", err) return } ds := query.Result c.JSON(200, &dtos.DataSource{ Id: ds.Id, OrgId: ds.OrgId, Name: ds.Name, Url: ds.Url, Type: ds.Type, Access: ds.Access, Password: ds.Password, Database: ds.Database, User: ds.User, BasicAuth: ds.BasicAuth, BasicAuthUser: ds.BasicAuthUser, BasicAuthPassword: ds.BasicAuthPassword, IsDefault: ds.IsDefault, JsonData: ds.JsonData, }) }
func GetSubProcessById(c *middleware.Context) Response { logger := log.New("main") logger.Info("GetProcess123 %s") subprocessId := c.ParamsInt64(":subProcessId") logger.Info("GetProcess123 %s", subprocessId) return getSubProcessUserProfile(subprocessId) }
func ProxyDataSourceRequest(c *middleware.Context) { c.TimeRequest(metrics.M_DataSource_ProxyReq_Timer) ds, err := getDatasource(c.ParamsInt64(":id"), c.OrgId) if err != nil { c.JsonApiErr(500, "Unable to load datasource meta data", err) return } targetUrl, _ := url.Parse(ds.Url) if len(setting.DataProxyWhiteList) > 0 { if _, exists := setting.DataProxyWhiteList[targetUrl.Host]; !exists { c.JsonApiErr(403, "Data proxy hostname and ip are not included in whitelist", nil) return } } if ds.Type == m.DS_CLOUDWATCH { cloudwatch.HandleRequest(c, ds) } else { proxyPath := c.Params("*") proxy := NewReverseProxy(ds, proxyPath, targetUrl) proxy.Transport = dataProxyTransport proxy.ServeHTTP(c.Resp, c.Req.Request) c.Resp.Header().Del("Set-Cookie") } }
//POST /api/alerts/:alertId/pause func PauseAlert(c *middleware.Context, dto dtos.PauseAlertCommand) Response { cmd := models.PauseAlertCommand{ OrgId: c.OrgId, AlertId: c.ParamsInt64("alertId"), Paused: dto.Paused, } if err := bus.Dispatch(&cmd); err != nil { return ApiError(500, "", err) } var response models.AlertStateType = models.AlertStatePending pausedState := "un paused" if cmd.Paused { response = models.AlertStatePaused pausedState = "paused" } result := map[string]interface{}{ "alertId": cmd.AlertId, "state": response, "message": "alert " + pausedState, } return Json(200, result) }
func UpdateOrgProcessForCurrentOrg(c *middleware.Context, cmd m.UpdateOrgProcessCommand) Response { cmd.ProcessId = c.ParamsInt64(":processId") logger := log.New("main") logger.Info("updatedProcess1 %s") return updateOrgProcessHelper(cmd) }
func GetMaintenacneById(c *middleware.Context) Response { logger := log.New("main") logger.Info("GetMachine123 %s") Id := c.ParamsInt64(":Id") return getMaintenanceUserProfile(Id) }
func ProxyDataSourceRequest(c *middleware.Context) { c.TimeRequest(metrics.M_DataSource_ProxyReq_Timer) ds, err := getDatasource(c.ParamsInt64(":id"), c.OrgId) if err != nil { c.JsonApiErr(500, "Unable to load datasource meta data", err) return } if ds.Type == m.DS_CLOUDWATCH { cloudwatch.HandleRequest(c, ds) return } if ds.Type == m.DS_INFLUXDB { if c.Query("db") != ds.Database { c.JsonApiErr(403, "Datasource is not configured to allow this database", nil) return } } targetUrl, _ := url.Parse(ds.Url) if len(setting.DataProxyWhiteList) > 0 { if _, exists := setting.DataProxyWhiteList[targetUrl.Host]; !exists { c.JsonApiErr(403, "Data proxy hostname and ip are not included in whitelist", nil) return } } proxyPath := c.Params("*") if ds.Type == m.DS_ES { if c.Req.Request.Method == "DELETE" { c.JsonApiErr(403, "Deletes not allowed on proxied Elasticsearch datasource", nil) return } if c.Req.Request.Method == "PUT" { c.JsonApiErr(403, "Puts not allowed on proxied Elasticsearch datasource", nil) return } if c.Req.Request.Method == "POST" && proxyPath != "_msearch" { c.JsonApiErr(403, "Posts not allowed on proxied Elasticsearch datasource except on /_msearch", nil) return } } proxy := NewReverseProxy(ds, proxyPath, targetUrl) proxy.Transport, err = ds.GetHttpTransport() if err != nil { c.JsonApiErr(400, "Unable to load TLS certificate", err) return } logProxyRequest(ds.Type, c) proxy.ServeHTTP(c.Resp, c.Req.Request) c.Resp.Header().Del("Set-Cookie") }
func GetOrgQuotas(c *middleware.Context) Response { query := m.GetQuotasQuery{OrgId: c.ParamsInt64(":orgId")} if err := bus.Dispatch(&query); err != nil { return ApiError(500, "Failed to get org quotas", err) } return Json(200, query.Result) }
// GET /api/orgs/:orgId func DeleteOrgById(c *middleware.Context) Response { if err := bus.Dispatch(&m.DeleteOrgCommand{Id: c.ParamsInt64(":orgId")}); err != nil { if err == m.ErrOrgNotFound { return ApiError(404, "Failed to delete organization. ID not found", nil) } return ApiError(500, "Failed to update organization", err) } return ApiSuccess("Organization deleted") }
func GetPlaylistDashboards(c *middleware.Context) Response { playlistId := c.ParamsInt64(":id") playlists, err := LoadPlaylistDashboards(c.OrgId, c.UserId, playlistId) if err != nil { return ApiError(500, "Could not load dashboards", err) } return Json(200, playlists) }
// GET /api/alerts/:id func GetAlert(c *middleware.Context) Response { id := c.ParamsInt64(":alertId") query := models.GetAlertByIdQuery{Id: id} if err := bus.Dispatch(&query); err != nil { return ApiError(500, "List alerts failed", err) } return Json(200, &query.Result) }
func DeletePlaylist(c *middleware.Context) Response { id := c.ParamsInt64(":id") cmd := m.DeletePlaylistCommand{Id: id, OrgId: c.OrgId} if err := bus.Dispatch(&cmd); err != nil { return ApiError(500, "Failed to delete playlist", err) } return Json(200, "") }
func GetPlaylistItems(c *middleware.Context) Response { id := c.ParamsInt64(":id") playlistDTOs, err := LoadPlaylistItemDTOs(id) if err != nil { return ApiError(500, "Could not load playlist items", err) } return Json(200, playlistDTOs) }
func GetCollectorById(c *middleware.Context) Response { id := c.ParamsInt64(":id") query := m.GetCollectorByIdQuery{Id: id, OrgId: c.OrgId} err := bus.Dispatch(&query) if err != nil { return ApiError(404, "Collector not found", nil) } return Json(200, query.Result) }
func DeleteCollector(c *middleware.Context) Response { id := c.ParamsInt64(":id") cmd := &m.DeleteCollectorCommand{Id: id, OrgId: c.OrgId} err := bus.Dispatch(cmd) if err != nil { return ApiError(500, "Failed to delete collector", err) } return ApiSuccess("collector deleted") }
func AdminDeleteUser(c *middleware.Context) { userId := c.ParamsInt64(":id") cmd := m.DeleteUserCommand{UserId: userId} if err := bus.Dispatch(&cmd); err != nil { c.JsonApiErr(500, "Failed to delete user", err) return } c.JsonOK("User deleted") }
func GetOrgQuotas(c *middleware.Context) Response { if !setting.Quota.Enabled { return ApiError(404, "Quotas not enabled", nil) } query := m.GetOrgQuotasQuery{OrgId: c.ParamsInt64(":orgId")} if err := bus.Dispatch(&query); err != nil { return ApiError(500, "Failed to get org quotas", err) } return Json(200, query.Result) }
func DeleteAlertNotification(c *middleware.Context) Response { cmd := models.DeleteAlertNotificationCommand{ OrgId: c.OrgId, Id: c.ParamsInt64("notificationId"), } if err := bus.Dispatch(&cmd); err != nil { return ApiError(500, "Failed to delete alert notification", err) } return ApiSuccess("Notification deleted") }
func UpdateDataSource(c *middleware.Context, cmd m.UpdateDataSourceCommand) { cmd.OrgId = c.OrgId cmd.Id = c.ParamsInt64(":id") err := bus.Dispatch(&cmd) if err != nil { c.JsonApiErr(500, "Failed to update datasource", err) return } c.JsonOK("Datasource updated") }
func GetAlertNotificationById(c *middleware.Context) Response { query := &models.GetAlertNotificationsQuery{ OrgId: c.OrgId, Id: c.ParamsInt64("notificationId"), } if err := bus.Dispatch(query); err != nil { return ApiError(500, "Failed to get alert notifications", err) } return Json(200, query.Result) }
func DeleteAlert(c *middleware.Context) { id := c.ParamsInt64(":id") cmd := &m.DeleteAlertCommand{Id: id, OrgId: c.OrgId} err := bus.Dispatch(cmd) if err != nil { c.JsonApiErr(500, "Failed to delete alert", err) return } c.JsonOK("Alert deleted") }
func UpdateOrgQuota(c *middleware.Context, cmd m.UpdateQuotaCmd) Response { cmd.OrgId = c.ParamsInt64(":orgId") cmd.Target = m.QuotaTarget(c.Params(":target")) if !cmd.Target.IsValid() { return ApiError(404, "Invalid quota target", nil) } if err := bus.Dispatch(&cmd); err != nil { return ApiError(500, "Failed to update org quotas", err) } return ApiSuccess("Organization quota updated") }
func GetAlertById(c *middleware.Context) { id := c.ParamsInt64(":id") query := m.GetAlertByIdQuery{Id: id, OrgId: c.OrgId} err := bus.Dispatch(&query) if err != nil { c.JsonApiErr(404, "Alert not found", nil) return } c.JSON(200, query.Result) }
func ValidateOrgAlert(c *middleware.Context) { id := c.ParamsInt64(":alertId") query := models.GetAlertByIdQuery{Id: id} if err := bus.Dispatch(&query); err != nil { c.JsonApiErr(404, "Alert not found", nil) return } if c.OrgId != query.Result.OrgId { c.JsonApiErr(403, "You are not allowed to edit/view alert", nil) return } }