2022-07-27 08:54:37 -05:00
// Package api Grafana HTTP API.
//
// The Grafana backend exposes an HTTP API, the same API is used by the frontend to do
// everything from saving dashboards, creating users and updating data sources.
//
2022-09-12 02:40:35 -05:00
// Schemes: http, https
// BasePath: /api
// Version: 0.0.1
// Contact: Grafana Labs<hello@grafana.com> https://grafana.com
2022-07-27 08:54:37 -05:00
//
2022-09-12 02:40:35 -05:00
// Consumes:
// - application/json
2022-07-27 08:54:37 -05:00
//
2022-09-12 02:40:35 -05:00
// Produces:
// - application/json
2022-07-27 08:54:37 -05:00
//
2022-09-12 02:40:35 -05:00
// Security:
// - basic:
// - api_key:
2022-07-27 08:54:37 -05:00
//
2022-09-12 02:40:35 -05:00
// SecurityDefinitions:
// basic:
// type: basic
// api_key:
// type: apiKey
// name: Authorization
// in: header
2022-07-27 08:54:37 -05:00
//
// swagger:meta
2014-12-15 14:25:02 -06:00
package api
import (
2018-06-25 09:36:47 -05:00
"github.com/grafana/grafana/pkg/api/routing"
2020-12-15 02:32:06 -06:00
"github.com/grafana/grafana/pkg/infra/log"
2015-02-05 03:37:13 -06:00
"github.com/grafana/grafana/pkg/middleware"
2021-08-24 04:36:28 -05:00
ac "github.com/grafana/grafana/pkg/services/accesscontrol"
2022-11-14 13:08:10 -06:00
"github.com/grafana/grafana/pkg/services/apikey"
"github.com/grafana/grafana/pkg/services/auth"
2022-08-26 05:27:28 -05:00
"github.com/grafana/grafana/pkg/services/correlations"
2022-03-09 10:57:50 -06:00
"github.com/grafana/grafana/pkg/services/dashboards"
"github.com/grafana/grafana/pkg/services/datasources"
2022-01-26 11:44:20 -06:00
"github.com/grafana/grafana/pkg/services/featuremgmt"
2022-11-14 13:08:10 -06:00
"github.com/grafana/grafana/pkg/services/org"
2023-03-27 04:15:37 -05:00
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol"
2022-07-06 18:51:44 -05:00
publicdashboardsapi "github.com/grafana/grafana/pkg/services/publicdashboards/api"
2022-04-14 06:40:15 -05:00
"github.com/grafana/grafana/pkg/services/serviceaccounts"
2022-11-14 13:08:10 -06:00
"github.com/grafana/grafana/pkg/services/user"
2022-07-12 02:01:31 -05:00
"github.com/grafana/grafana/pkg/setting"
2022-04-06 11:24:33 -05:00
"github.com/grafana/grafana/pkg/web"
2014-12-15 14:25:02 -06:00
)
2020-12-15 02:32:06 -06:00
var plog = log . New ( "api" )
2020-10-28 03:36:57 -05:00
// registerRoutes registers all API HTTP routes.
2018-03-22 16:13:46 -05:00
func ( hs * HTTPServer ) registerRoutes ( ) {
2021-03-16 10:46:34 -05:00
reqNoAuth := middleware . NoAuth ( )
2018-10-11 05:36:04 -05:00
reqSignedIn := middleware . ReqSignedIn
2021-06-14 11:02:05 -05:00
reqNotSignedIn := middleware . ReqNotSignedIn
2021-02-27 11:04:28 -06:00
reqSignedInNoAnonymous := middleware . ReqSignedInNoAnonymous
2018-10-11 05:36:04 -05:00
reqGrafanaAdmin := middleware . ReqGrafanaAdmin
reqEditorRole := middleware . ReqEditorRole
reqOrgAdmin := middleware . ReqOrgAdmin
2020-12-11 04:44:44 -06:00
reqSnapshotPublicModeOrSignedIn := middleware . SnapshotPublicModeOrSignedIn ( hs . Cfg )
2020-12-15 12:09:04 -06:00
redirectFromLegacyPanelEditURL := middleware . RedirectFromLegacyPanelEditURL ( hs . Cfg )
2022-04-28 03:46:18 -05:00
authorize := ac . Middleware ( hs . AccessControl )
2022-09-09 02:07:45 -05:00
authorizeInOrg := ac . AuthorizeInOrgMiddleware ( hs . AccessControl , hs . accesscontrolService , hs . userService )
2019-02-11 14:12:01 -06:00
quota := middleware . Quota ( hs . QuotaService )
2014-12-15 14:25:02 -06:00
2018-04-27 06:41:58 -05:00
r := hs . RouteRegister
2016-08-29 07:45:28 -05:00
2015-01-14 07:25:12 -06:00
// not logged in views
2019-01-15 08:15:52 -06:00
r . Get ( "/logout" , hs . Logout )
2022-11-14 13:08:10 -06:00
r . Post ( "/login" , quota ( string ( auth . QuotaTargetSrv ) ) , routing . Wrap ( hs . LoginPost ) )
r . Get ( "/login/:name" , quota ( string ( auth . QuotaTargetSrv ) ) , hs . OAuthLogin )
2018-10-09 10:47:43 -05:00
r . Get ( "/login" , hs . LoginView )
r . Get ( "/invite/:code" , hs . Index )
2014-12-15 14:25:02 -06:00
2015-01-14 07:25:12 -06:00
// authed views
2020-11-10 16:36:35 -06:00
r . Get ( "/" , reqSignedIn , hs . Index )
2021-02-27 11:04:28 -06:00
r . Get ( "/profile/" , reqSignedInNoAnonymous , hs . Index )
r . Get ( "/profile/password" , reqSignedInNoAnonymous , hs . Index )
2020-11-10 16:36:35 -06:00
r . Get ( "/.well-known/change-password" , redirectToChangePassword )
2021-02-27 11:04:28 -06:00
r . Get ( "/profile/switch-org/:id" , reqSignedInNoAnonymous , hs . ChangeActiveOrgAndRedirectToHome )
2023-05-24 03:49:42 -05:00
r . Get ( "/org/" , authorize ( ac . OrgPreferencesAccessEvaluator ) , hs . Index )
r . Get ( "/org/new" , authorizeInOrg ( ac . UseGlobalOrg , ac . OrgsCreateAccessEvaluator ) , hs . Index )
r . Get ( "/datasources/" , authorize ( datasources . ConfigurationPageAccess ) , hs . Index )
r . Get ( "/datasources/new" , authorize ( datasources . NewPageAccess ) , hs . Index )
r . Get ( "/datasources/edit/*" , authorize ( datasources . EditPageAccess ) , hs . Index )
r . Get ( "/datasources/correlations" , authorize ( correlations . ConfigurationPageAccess ) , hs . Index )
r . Get ( "/org/users" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersRead ) ) , hs . Index )
2019-03-04 08:51:18 -06:00
r . Get ( "/org/users/new" , reqOrgAdmin , hs . Index )
2023-05-24 03:49:42 -05:00
r . Get ( "/org/users/invite" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersAdd ) ) , hs . Index )
r . Get ( "/org/teams" , authorize ( ac . EvalPermission ( ac . ActionTeamsRead ) ) , hs . Index )
r . Get ( "/org/teams/edit/*" , authorize ( ac . TeamsEditAccessEvaluator ) , hs . Index )
r . Get ( "/org/teams/new" , authorize ( ac . EvalPermission ( ac . ActionTeamsCreate ) ) , hs . Index )
r . Get ( "/org/serviceaccounts" , authorize ( ac . EvalPermission ( serviceaccounts . ActionRead ) ) , hs . Index )
r . Get ( "/org/serviceaccounts/:serviceAccountId" , authorize ( ac . EvalPermission ( serviceaccounts . ActionRead ) ) , hs . Index )
r . Get ( "/org/apikeys/" , authorize ( ac . EvalPermission ( ac . ActionAPIKeyRead ) ) , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/dashboard/import/" , reqSignedIn , hs . Index )
r . Get ( "/configuration" , reqGrafanaAdmin , hs . Index )
2023-03-22 09:35:17 -05:00
r . Get ( "/admin" , reqOrgAdmin , hs . Index )
2023-05-24 03:49:42 -05:00
r . Get ( "/admin/settings" , authorize ( ac . EvalPermission ( ac . ActionSettingsRead , ac . ScopeSettingsAll ) ) , hs . Index )
r . Get ( "/admin/users" , authorize ( ac . EvalAny ( ac . EvalPermission ( ac . ActionOrgUsersRead ) , ac . EvalPermission ( ac . ActionUsersRead , ac . ScopeGlobalUsersAll ) ) ) , hs . Index )
r . Get ( "/admin/users/create" , authorize ( ac . EvalPermission ( ac . ActionUsersCreate ) ) , hs . Index )
r . Get ( "/admin/users/edit/:id" , authorize ( ac . EvalPermission ( ac . ActionUsersRead ) ) , hs . Index )
r . Get ( "/admin/orgs" , authorizeInOrg ( ac . UseGlobalOrg , ac . OrgsAccessEvaluator ) , hs . Index )
r . Get ( "/admin/orgs/edit/:id" , authorizeInOrg ( ac . UseGlobalOrg , ac . OrgsAccessEvaluator ) , hs . Index )
r . Get ( "/admin/stats" , authorize ( ac . EvalPermission ( ac . ActionServerStatsRead ) ) , hs . Index )
r . Get ( "/admin/ldap" , authorize ( ac . EvalPermission ( ac . ActionLDAPStatusRead ) ) , hs . Index )
2022-12-08 12:57:33 -06:00
if hs . Features . IsEnabled ( featuremgmt . FlagStorage ) {
r . Get ( "/admin/storage" , reqSignedIn , hs . Index )
r . Get ( "/admin/storage/*" , reqSignedIn , hs . Index )
}
2018-10-09 10:47:43 -05:00
r . Get ( "/styleguide" , reqSignedIn , hs . Index )
2021-09-13 23:09:55 -05:00
r . Get ( "/live" , reqGrafanaAdmin , hs . Index )
r . Get ( "/live/pipeline" , reqGrafanaAdmin , hs . Index )
r . Get ( "/live/cloud" , reqGrafanaAdmin , hs . Index )
2022-11-30 02:41:28 -06:00
r . Get ( "/plugins" , middleware . CanAdminPlugins ( hs . Cfg ) , hs . Index )
r . Get ( "/plugins/:id/" , middleware . CanAdminPlugins ( hs . Cfg ) , hs . Index )
r . Get ( "/plugins/:id/edit" , middleware . CanAdminPlugins ( hs . Cfg ) , hs . Index ) // deprecated
r . Get ( "/plugins/:id/page/:page" , middleware . CanAdminPlugins ( hs . Cfg ) , hs . Index )
2023-01-06 02:11:27 -06:00
2023-05-24 03:49:42 -05:00
r . Get ( "/connections/datasources" , authorize ( datasources . ConfigurationPageAccess ) , hs . Index )
r . Get ( "/connections/datasources/new" , authorize ( datasources . NewPageAccess ) , hs . Index )
r . Get ( "/connections/datasources/edit/*" , authorize ( datasources . EditPageAccess ) , hs . Index )
r . Get ( "/connections" , authorize ( datasources . ConfigurationPageAccess ) , hs . Index )
r . Get ( "/connections/add-new-connection" , authorize ( datasources . ConfigurationPageAccess ) , hs . Index )
2023-01-18 08:34:23 -06:00
r . Get ( "/connections/datasources/:id" , middleware . CanAdminPlugins ( hs . Cfg ) , hs . Index )
r . Get ( "/connections/datasources/:id/page/:page" , middleware . CanAdminPlugins ( hs . Cfg ) , hs . Index )
2023-01-06 02:11:27 -06:00
2022-07-08 06:24:09 -05:00
// App Root Page
2023-03-27 04:15:37 -05:00
appPluginIDScope := pluginaccesscontrol . ScopeProvider . GetResourceScope ( ac . Parameter ( ":id" ) )
2023-05-24 03:49:42 -05:00
r . Get ( "/a/:id/*" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionAppAccess , appPluginIDScope ) ) , hs . Index )
r . Get ( "/a/:id" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionAppAccess , appPluginIDScope ) ) , hs . Index )
2018-10-09 10:47:43 -05:00
2020-06-17 05:51:41 -05:00
r . Get ( "/d/:uid/:slug" , reqSignedIn , redirectFromLegacyPanelEditURL , hs . Index )
r . Get ( "/d/:uid" , reqSignedIn , redirectFromLegacyPanelEditURL , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/dashboard/script/*" , reqSignedIn , hs . Index )
2020-11-10 16:36:35 -06:00
r . Get ( "/dashboard/new" , reqSignedIn , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/dashboard-solo/snapshot/*" , hs . Index )
r . Get ( "/d-solo/:uid/:slug" , reqSignedIn , hs . Index )
2019-10-14 11:21:44 -05:00
r . Get ( "/d-solo/:uid" , reqSignedIn , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/dashboard-solo/script/*" , reqSignedIn , hs . Index )
r . Get ( "/import/dashboard" , reqSignedIn , hs . Index )
r . Get ( "/dashboards/" , reqSignedIn , hs . Index )
r . Get ( "/dashboards/*" , reqSignedIn , hs . Index )
2020-10-14 05:48:48 -05:00
r . Get ( "/goto/:uid" , reqSignedIn , hs . redirectFromShortURL , hs . Index )
2018-10-09 10:47:43 -05:00
2022-07-06 18:51:44 -05:00
if hs . Features . IsEnabled ( featuremgmt . FlagPublicDashboards ) {
2022-10-13 00:36:05 -05:00
// list public dashboards
r . Get ( "/public-dashboards/list" , reqSignedIn , hs . Index )
// anonymous view public dashboard
2022-10-06 15:35:19 -05:00
r . Get ( "/public-dashboards/:accessToken" ,
publicdashboardsapi . SetPublicDashboardFlag ,
publicdashboardsapi . SetPublicDashboardOrgIdOnContext ( hs . PublicDashboardsApi . PublicDashboardService ) ,
publicdashboardsapi . CountPublicDashboardRequest ( ) ,
hs . Index ,
)
2022-07-06 18:51:44 -05:00
}
2023-05-24 03:49:42 -05:00
r . Get ( "/explore" , authorize ( ac . EvalPermission ( ac . ActionDatasourcesExplore ) ) , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/playlists/" , reqSignedIn , hs . Index )
r . Get ( "/playlists/*" , reqSignedIn , hs . Index )
2021-05-17 03:15:17 -05:00
r . Get ( "/alerting/" , reqSignedIn , hs . Index )
r . Get ( "/alerting/*" , reqSignedIn , hs . Index )
2022-09-26 10:27:26 -05:00
r . Get ( "/library-panels/" , reqSignedIn , hs . Index )
2022-09-28 01:29:35 -05:00
r . Get ( "/monitoring/" , reqSignedIn , hs . Index )
r . Get ( "/monitoring/*" , reqSignedIn , hs . Index )
r . Get ( "/alerts-and-incidents" , reqSignedIn , hs . Index )
r . Get ( "/alerts-and-incidents/*" , reqSignedIn , hs . Index )
2015-12-22 04:07:15 -06:00
2015-01-14 07:25:12 -06:00
// sign up
2020-09-07 10:24:46 -05:00
r . Get ( "/verify" , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/signup" , hs . Index )
2023-02-27 03:23:38 -06:00
r . Get ( "/api/user/signup/options" , routing . Wrap ( hs . GetSignUpOptions ) )
2022-11-14 13:08:10 -06:00
r . Post ( "/api/user/signup" , quota ( user . QuotaTargetSrv ) , quota ( org . QuotaTargetSrv ) , routing . Wrap ( hs . SignUp ) )
2021-11-29 03:18:01 -06:00
r . Post ( "/api/user/signup/step2" , routing . Wrap ( hs . SignUpStep2 ) )
2014-12-15 14:25:02 -06:00
2015-07-20 08:52:49 -05:00
// invited
2022-01-31 10:24:52 -06:00
r . Get ( "/api/user/invite/:code" , routing . Wrap ( hs . GetInviteInfoByCode ) )
2021-11-29 03:18:01 -06:00
r . Post ( "/api/user/invite/complete" , routing . Wrap ( hs . CompleteInvite ) )
2015-07-20 08:52:49 -05:00
2015-06-08 03:57:01 -05:00
// reset password
2021-06-14 11:02:05 -05:00
r . Get ( "/user/password/send-reset-email" , reqNotSignedIn , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/user/password/reset" , hs . Index )
2015-06-08 03:57:01 -05:00
2022-02-03 03:33:46 -06:00
r . Post ( "/api/user/password/send-reset-email" , routing . Wrap ( hs . SendResetPasswordEmail ) )
r . Post ( "/api/user/password/reset" , routing . Wrap ( hs . ResetPassword ) )
2014-12-15 14:25:02 -06:00
2015-03-21 07:53:16 -05:00
// dashboard snapshots
2021-03-16 10:46:34 -05:00
r . Get ( "/dashboard/snapshot/*" , reqNoAuth , hs . Index )
2018-10-09 10:47:43 -05:00
r . Get ( "/dashboard/snapshots/" , reqSignedIn , hs . Index )
2015-03-26 14:34:58 -05:00
2019-02-04 10:37:07 -06:00
// api renew session based on cookie
2022-11-14 13:08:10 -06:00
r . Get ( "/api/login/ping" , quota ( string ( auth . QuotaTargetSrv ) ) , routing . Wrap ( hs . LoginAPIPing ) )
2015-04-07 02:25:00 -05:00
2021-04-21 08:17:23 -05:00
// expose plugin file system assets
2021-09-08 01:49:05 -05:00
r . Get ( "/public/plugins/:pluginId/*" , hs . getPluginAssets )
2021-04-21 08:17:23 -05:00
2023-03-01 08:36:37 -06:00
r . Get ( "/swagger-ui" , swaggerUI )
r . Get ( "/openapi3" , openapi3 )
2022-02-08 06:38:43 -06:00
2023-03-23 08:39:04 -05:00
if hs . Features . IsEnabled ( featuremgmt . FlagClientTokenRotation ) {
r . Post ( "/api/user/auth-tokens/rotate" , routing . Wrap ( hs . RotateUserAuthToken ) )
r . Get ( "/user/auth-tokens/rotate" , routing . Wrap ( hs . RotateUserAuthTokenRedirect ) )
}
2023-04-25 06:13:55 -05:00
if hs . License . FeatureEnabled ( "saml" ) && hs . Features . IsEnabled ( featuremgmt . FlagAuthenticationConfigUI ) {
2023-04-28 05:48:26 -05:00
// TODO change the scope when we extend the auth UI to more providers
2023-05-24 03:49:42 -05:00
r . Get ( "/admin/authentication/" , authorize ( ac . EvalPermission ( ac . ActionSettingsWrite , ac . ScopeSettingsSAML ) ) , hs . Index )
2023-04-25 06:13:55 -05:00
}
2015-01-14 07:25:12 -06:00
// authed api
2018-06-25 09:36:47 -05:00
r . Group ( "/api" , func ( apiRoute routing . RouteRegister ) {
2015-05-19 04:47:14 -05:00
// user (signed in)
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/user" , func ( userRoute routing . RouteRegister ) {
2022-01-05 02:59:17 -06:00
userRoute . Get ( "/" , routing . Wrap ( hs . GetSignedInUser ) )
2022-01-26 13:24:05 -06:00
userRoute . Put ( "/" , routing . Wrap ( hs . UpdateSignedInUser ) )
userRoute . Post ( "/using/:id" , routing . Wrap ( hs . UserSetUsingOrg ) )
userRoute . Get ( "/orgs" , routing . Wrap ( hs . GetSignedInUserOrgList ) )
userRoute . Get ( "/teams" , routing . Wrap ( hs . GetSignedInUserTeamList ) )
2021-01-15 07:43:20 -06:00
2023-01-25 08:58:54 -06:00
userRoute . Get ( "/stars" , routing . Wrap ( hs . starApi . GetStars ) )
2022-10-05 15:32:49 -05:00
// Deprecated: use /stars/dashboard/uid/:uid API instead.
2023-01-25 08:58:54 -06:00
// nolint:staticcheck
userRoute . Post ( "/stars/dashboard/:id" , routing . Wrap ( hs . starApi . StarDashboard ) )
2022-10-05 15:32:49 -05:00
// Deprecated: use /stars/dashboard/uid/:uid API instead.
2023-01-25 08:58:54 -06:00
// nolint:staticcheck
userRoute . Delete ( "/stars/dashboard/:id" , routing . Wrap ( hs . starApi . UnstarDashboard ) )
2021-01-15 07:43:20 -06:00
2023-01-25 08:58:54 -06:00
userRoute . Post ( "/stars/dashboard/uid/:uid" , routing . Wrap ( hs . starApi . StarDashboardByUID ) )
userRoute . Delete ( "/stars/dashboard/uid/:uid" , routing . Wrap ( hs . starApi . UnstarDashboardByUID ) )
2022-10-05 15:32:49 -05:00
2022-01-26 13:24:05 -06:00
userRoute . Put ( "/password" , routing . Wrap ( hs . ChangeUserPassword ) )
2022-02-03 02:20:20 -06:00
userRoute . Get ( "/quotas" , routing . Wrap ( hs . GetUserQuotas ) )
2022-01-26 13:24:05 -06:00
userRoute . Put ( "/helpflags/:id" , routing . Wrap ( hs . SetHelpFlag ) )
2016-11-09 03:41:39 -06:00
// For dev purpose
2022-01-26 13:24:05 -06:00
userRoute . Get ( "/helpflags/clear" , routing . Wrap ( hs . ClearHelpFlags ) )
2016-04-02 15:54:06 -05:00
2021-11-02 07:41:45 -05:00
userRoute . Get ( "/preferences" , routing . Wrap ( hs . GetUserPreferences ) )
2021-11-29 03:18:01 -06:00
userRoute . Put ( "/preferences" , routing . Wrap ( hs . UpdateUserPreferences ) )
2022-03-17 07:07:20 -05:00
userRoute . Patch ( "/preferences" , routing . Wrap ( hs . PatchUserPreferences ) )
2019-03-08 08:15:38 -06:00
2021-01-15 07:43:20 -06:00
userRoute . Get ( "/auth-tokens" , routing . Wrap ( hs . GetUserAuthTokens ) )
2021-11-29 03:18:01 -06:00
userRoute . Post ( "/revoke-auth-token" , routing . Wrap ( hs . RevokeUserAuthToken ) )
2021-02-27 11:04:28 -06:00
} , reqSignedInNoAnonymous )
2015-01-19 11:01:04 -06:00
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/users" , func ( usersRoute routing . RouteRegister ) {
2022-03-22 06:48:46 -05:00
userIDScope := ac . Scope ( "global.users" , "id" , ac . Parameter ( ":id" ) )
2023-05-24 03:49:42 -05:00
usersRoute . Get ( "/" , authorize ( ac . EvalPermission ( ac . ActionUsersRead ) ) , routing . Wrap ( hs . searchUsersService . SearchUsers ) )
usersRoute . Get ( "/search" , authorize ( ac . EvalPermission ( ac . ActionUsersRead ) ) , routing . Wrap ( hs . searchUsersService . SearchUsersWithPaging ) )
usersRoute . Get ( "/:id" , authorize ( ac . EvalPermission ( ac . ActionUsersRead , userIDScope ) ) , routing . Wrap ( hs . GetUserByID ) )
usersRoute . Get ( "/:id/teams" , authorize ( ac . EvalPermission ( ac . ActionUsersRead , userIDScope ) ) , routing . Wrap ( hs . GetUserTeams ) )
usersRoute . Get ( "/:id/orgs" , authorize ( ac . EvalPermission ( ac . ActionUsersRead , userIDScope ) ) , routing . Wrap ( hs . GetUserOrgList ) )
2017-01-30 23:25:55 -06:00
// query parameters /users/lookup?loginOrEmail=admin@example.com
2023-05-24 03:49:42 -05:00
usersRoute . Get ( "/lookup" , authorize ( ac . EvalPermission ( ac . ActionUsersRead , ac . ScopeGlobalUsersAll ) ) , routing . Wrap ( hs . GetUserByLoginOrEmail ) )
usersRoute . Put ( "/:id" , authorize ( ac . EvalPermission ( ac . ActionUsersWrite , userIDScope ) ) , routing . Wrap ( hs . UpdateUser ) )
usersRoute . Post ( "/:id/using/:orgId" , authorize ( ac . EvalPermission ( ac . ActionUsersWrite , userIDScope ) ) , routing . Wrap ( hs . UpdateUserActiveOrg ) )
2021-04-14 09:31:27 -05:00
} )
2015-05-18 10:28:15 -05:00
2017-12-08 09:25:45 -06:00
// team (admin permission required)
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/teams" , func ( teamsRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
teamsRoute . Post ( "/" , authorize ( ac . EvalPermission ( ac . ActionTeamsCreate ) ) , routing . Wrap ( hs . CreateTeam ) )
teamsRoute . Put ( "/:teamId" , authorize ( ac . EvalPermission ( ac . ActionTeamsWrite , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . UpdateTeam ) )
teamsRoute . Delete ( "/:teamId" , authorize ( ac . EvalPermission ( ac . ActionTeamsDelete , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . DeleteTeamByID ) )
teamsRoute . Get ( "/:teamId/members" , authorize ( ac . EvalPermission ( ac . ActionTeamsPermissionsRead , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . GetTeamMembers ) )
teamsRoute . Post ( "/:teamId/members" , authorize ( ac . EvalPermission ( ac . ActionTeamsPermissionsWrite , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . AddTeamMember ) )
teamsRoute . Put ( "/:teamId/members/:userId" , authorize ( ac . EvalPermission ( ac . ActionTeamsPermissionsWrite , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . UpdateTeamMember ) )
teamsRoute . Delete ( "/:teamId/members/:userId" , authorize ( ac . EvalPermission ( ac . ActionTeamsPermissionsWrite , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . RemoveTeamMember ) )
teamsRoute . Get ( "/:teamId/preferences" , authorize ( ac . EvalPermission ( ac . ActionTeamsRead , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . GetTeamPreferences ) )
teamsRoute . Put ( "/:teamId/preferences" , authorize ( ac . EvalPermission ( ac . ActionTeamsWrite , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . UpdateTeamPreferences ) )
2022-01-10 11:05:53 -06:00
} )
2017-04-09 18:24:16 -05:00
2018-04-06 07:08:23 -05:00
// team without requirement of user to be org admin
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/teams" , func ( teamsRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
teamsRoute . Get ( "/:teamId" , authorize ( ac . EvalPermission ( ac . ActionTeamsRead , ac . ScopeTeamsID ) ) , routing . Wrap ( hs . GetTeamByID ) )
teamsRoute . Get ( "/search" , authorize ( ac . EvalPermission ( ac . ActionTeamsRead ) ) , routing . Wrap ( hs . SearchTeams ) )
2018-04-06 07:08:23 -05:00
} )
2015-09-10 12:18:36 -05:00
// org information available to all users.
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/org" , func ( orgRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
orgRoute . Get ( "/" , authorize ( ac . EvalPermission ( ac . ActionOrgsRead ) ) , routing . Wrap ( hs . GetCurrentOrg ) )
orgRoute . Get ( "/quotas" , authorize ( ac . EvalPermission ( ac . ActionOrgsQuotasRead ) ) , routing . Wrap ( hs . GetCurrentOrgQuotas ) )
2015-09-10 12:18:36 -05:00
} )
2022-03-17 12:19:23 -05:00
if hs . Features . IsEnabled ( featuremgmt . FlagStorage ) {
2022-10-04 11:40:15 -05:00
// Will eventually be replaced with the 'object' route
2022-07-29 01:26:44 -05:00
apiRoute . Group ( "/storage" , hs . StorageService . RegisterHTTPRoutes )
2022-11-30 16:52:15 -06:00
}
2022-10-04 11:40:15 -05:00
2022-11-30 16:52:15 -06:00
// Allow HTTP access to the entity storage feature (dev only for now)
if hs . Features . IsEnabled ( featuremgmt . FlagEntityStore ) {
apiRoute . Group ( "/entity" , hs . httpEntityStore . RegisterHTTPRoutes )
2022-03-17 12:19:23 -05:00
}
2022-09-22 18:02:09 -05:00
if hs . Features . IsEnabled ( featuremgmt . FlagPanelTitleSearch ) {
apiRoute . Group ( "/search-v2" , hs . SearchV2HTTPService . RegisterHTTPRoutes )
}
2015-09-10 12:18:36 -05:00
// current org
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/org" , func ( orgRoute routing . RouteRegister ) {
2021-10-07 04:54:43 -05:00
userIDScope := ac . Scope ( "users" , "id" , ac . Parameter ( ":userId" ) )
2023-05-24 03:49:42 -05:00
orgRoute . Put ( "/" , authorize ( ac . EvalPermission ( ac . ActionOrgsWrite ) ) , routing . Wrap ( hs . UpdateCurrentOrg ) )
orgRoute . Put ( "/address" , authorize ( ac . EvalPermission ( ac . ActionOrgsWrite ) ) , routing . Wrap ( hs . UpdateCurrentOrgAddress ) )
orgRoute . Get ( "/users" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersRead ) ) , routing . Wrap ( hs . GetOrgUsersForCurrentOrg ) )
orgRoute . Get ( "/users/search" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersRead ) ) , routing . Wrap ( hs . SearchOrgUsersWithPaging ) )
orgRoute . Post ( "/users" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersAdd , ac . ScopeUsersAll ) ) , quota ( user . QuotaTargetSrv ) , quota ( org . QuotaTargetSrv ) , routing . Wrap ( hs . AddOrgUserToCurrentOrg ) )
orgRoute . Patch ( "/users/:userId" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersWrite , userIDScope ) ) , routing . Wrap ( hs . UpdateOrgUserForCurrentOrg ) )
orgRoute . Delete ( "/users/:userId" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersRemove , userIDScope ) ) , routing . Wrap ( hs . RemoveOrgUserForCurrentOrg ) )
2015-07-17 02:51:34 -05:00
// invites
2023-05-24 03:49:42 -05:00
orgRoute . Get ( "/invites" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersAdd ) ) , routing . Wrap ( hs . GetPendingOrgInvites ) )
orgRoute . Post ( "/invites" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersAdd ) ) , quota ( user . QuotaTargetSrv ) , quota ( user . QuotaTargetSrv ) , routing . Wrap ( hs . AddOrgInvite ) )
orgRoute . Patch ( "/invites/:code/revoke" , authorize ( ac . EvalPermission ( ac . ActionOrgUsersAdd ) ) , routing . Wrap ( hs . RevokeInvite ) )
2015-12-17 23:46:40 -06:00
2016-04-02 15:54:06 -05:00
// prefs
2023-05-24 03:49:42 -05:00
orgRoute . Get ( "/preferences" , authorize ( ac . EvalPermission ( ac . ActionOrgsPreferencesRead ) ) , routing . Wrap ( hs . GetOrgPreferences ) )
orgRoute . Put ( "/preferences" , authorize ( ac . EvalPermission ( ac . ActionOrgsPreferencesWrite ) ) , routing . Wrap ( hs . UpdateOrgPreferences ) )
orgRoute . Patch ( "/preferences" , authorize ( ac . EvalPermission ( ac . ActionOrgsPreferencesWrite ) ) , routing . Wrap ( hs . PatchOrgPreferences ) )
2021-04-22 05:19:41 -05:00
} )
2015-05-19 03:16:32 -05:00
2018-04-06 07:08:23 -05:00
// current org without requirement of user to be org admin
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/org" , func ( orgRoute routing . RouteRegister ) {
2022-05-06 03:31:53 -05:00
lookupEvaluator := func ( ) ac . Evaluator {
2022-05-25 13:40:41 -05:00
if hs . License . FeatureEnabled ( "accesscontrol.enforcement" ) {
2022-05-06 03:31:53 -05:00
return ac . EvalPermission ( ac . ActionOrgUsersRead )
}
// For oss we allow users with access to update permissions on either folders, teams or dashboards to perform the lookup
return ac . EvalAny (
ac . EvalPermission ( ac . ActionOrgUsersRead ) ,
ac . EvalPermission ( ac . ActionTeamsPermissionsWrite ) ,
ac . EvalPermission ( dashboards . ActionFoldersPermissionsWrite ) ,
2022-05-25 13:40:41 -05:00
ac . EvalPermission ( dashboards . ActionDashboardsPermissionsWrite ) ,
2022-05-06 03:31:53 -05:00
)
}
2023-05-24 03:49:42 -05:00
orgRoute . Get ( "/users/lookup" , authorize ( lookupEvaluator ( ) ) , routing . Wrap ( hs . GetOrgUsersForCurrentOrgLookup ) )
2018-04-06 07:08:23 -05:00
} )
2015-05-19 03:16:32 -05:00
// create new org
2023-05-24 03:49:42 -05:00
apiRoute . Post ( "/orgs" , authorizeInOrg ( ac . UseGlobalOrg , ac . EvalPermission ( ac . ActionOrgsCreate ) ) , quota ( org . QuotaTargetSrv ) , routing . Wrap ( hs . CreateOrg ) )
2015-05-19 03:16:32 -05:00
2015-05-19 04:47:14 -05:00
// search all orgs
2023-05-24 03:49:42 -05:00
apiRoute . Get ( "/orgs" , authorizeInOrg ( ac . UseGlobalOrg , ac . EvalPermission ( ac . ActionOrgsRead ) ) , routing . Wrap ( hs . SearchOrgs ) )
2015-05-19 04:47:14 -05:00
2015-05-19 03:16:32 -05:00
// orgs (admin routes)
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/orgs/:orgId" , func ( orgsRoute routing . RouteRegister ) {
2021-11-17 03:12:28 -06:00
userIDScope := ac . Scope ( "users" , "id" , ac . Parameter ( ":userId" ) )
2023-05-24 03:49:42 -05:00
orgsRoute . Get ( "/" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgsRead ) ) , routing . Wrap ( hs . GetOrgByID ) )
orgsRoute . Put ( "/" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgsWrite ) ) , routing . Wrap ( hs . UpdateOrg ) )
orgsRoute . Put ( "/address" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgsWrite ) ) , routing . Wrap ( hs . UpdateOrgAddress ) )
orgsRoute . Delete ( "/" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgsDelete ) ) , routing . Wrap ( hs . DeleteOrgByID ) )
orgsRoute . Get ( "/users" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgUsersRead ) ) , routing . Wrap ( hs . GetOrgUsers ) )
orgsRoute . Get ( "/users/search" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgUsersRead ) ) , routing . Wrap ( hs . SearchOrgUsers ) )
orgsRoute . Post ( "/users" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgUsersAdd , ac . ScopeUsersAll ) ) , routing . Wrap ( hs . AddOrgUser ) )
orgsRoute . Patch ( "/users/:userId" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgUsersWrite , userIDScope ) ) , routing . Wrap ( hs . UpdateOrgUser ) )
orgsRoute . Delete ( "/users/:userId" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgUsersRemove , userIDScope ) ) , routing . Wrap ( hs . RemoveOrgUser ) )
orgsRoute . Get ( "/quotas" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgsQuotasRead ) ) , routing . Wrap ( hs . GetOrgQuotas ) )
orgsRoute . Put ( "/quotas/:target" , authorizeInOrg ( ac . UseOrgFromContextParams , ac . EvalPermission ( ac . ActionOrgsQuotasWrite ) ) , routing . Wrap ( hs . UpdateOrgQuota ) )
2021-04-22 05:19:41 -05:00
} )
2015-01-26 13:26:17 -06:00
2016-01-12 15:50:56 -06:00
// orgs (admin routes)
2023-05-24 03:49:42 -05:00
apiRoute . Get ( "/orgs/name/:name/" , authorizeInOrg ( ac . UseGlobalOrg , ac . EvalPermission ( ac . ActionOrgsRead ) ) , routing . Wrap ( hs . GetOrgByName ) )
2016-01-12 15:50:56 -06:00
2015-01-27 01:26:11 -06:00
// auth api keys
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/auth/keys" , func ( keysRoute routing . RouteRegister ) {
2022-03-04 12:01:03 -06:00
apikeyIDScope := ac . Scope ( "apikeys" , "id" , ac . Parameter ( ":id" ) )
2023-05-24 03:49:42 -05:00
keysRoute . Get ( "/" , authorize ( ac . EvalPermission ( ac . ActionAPIKeyRead ) ) , routing . Wrap ( hs . GetAPIKeys ) )
keysRoute . Post ( "/" , authorize ( ac . EvalPermission ( ac . ActionAPIKeyCreate ) ) , quota ( string ( apikey . QuotaTargetSrv ) ) , routing . Wrap ( hs . AddAPIKey ) )
keysRoute . Delete ( "/:id" , authorize ( ac . EvalPermission ( ac . ActionAPIKeyDelete , apikeyIDScope ) ) , routing . Wrap ( hs . DeleteAPIKey ) )
2022-04-13 11:11:03 -05:00
} )
2015-01-26 13:26:17 -06:00
2016-03-17 01:35:06 -05:00
// Preferences
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/preferences" , func ( prefRoute routing . RouteRegister ) {
2022-02-03 02:20:20 -06:00
prefRoute . Post ( "/set-home-dash" , routing . Wrap ( hs . SetHomeDashboard ) )
2016-03-17 01:35:06 -05:00
} )
2016-03-11 08:30:05 -06:00
2015-01-14 07:25:12 -06:00
// Data sources
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/datasources" , func ( datasourceRoute routing . RouteRegister ) {
2022-06-09 06:56:24 -05:00
idScope := datasources . ScopeProvider . GetResourceScope ( ac . Parameter ( ":id" ) )
uidScope := datasources . ScopeProvider . GetResourceScopeUID ( ac . Parameter ( ":uid" ) )
nameScope := datasources . ScopeProvider . GetResourceScopeName ( ac . Parameter ( ":name" ) )
2023-05-24 03:49:42 -05:00
datasourceRoute . Get ( "/" , authorize ( ac . EvalPermission ( datasources . ActionRead ) ) , routing . Wrap ( hs . GetDataSources ) )
datasourceRoute . Post ( "/" , authorize ( ac . EvalPermission ( datasources . ActionCreate ) ) , quota ( string ( datasources . QuotaTargetSrv ) ) , routing . Wrap ( hs . AddDataSource ) )
datasourceRoute . Put ( "/:id" , authorize ( ac . EvalPermission ( datasources . ActionWrite , idScope ) ) , routing . Wrap ( hs . UpdateDataSourceByID ) )
datasourceRoute . Put ( "/uid/:uid" , authorize ( ac . EvalPermission ( datasources . ActionWrite , uidScope ) ) , routing . Wrap ( hs . UpdateDataSourceByUID ) )
datasourceRoute . Delete ( "/:id" , authorize ( ac . EvalPermission ( datasources . ActionDelete , idScope ) ) , routing . Wrap ( hs . DeleteDataSourceById ) )
datasourceRoute . Delete ( "/uid/:uid" , authorize ( ac . EvalPermission ( datasources . ActionDelete , uidScope ) ) , routing . Wrap ( hs . DeleteDataSourceByUID ) )
datasourceRoute . Delete ( "/name/:name" , authorize ( ac . EvalPermission ( datasources . ActionDelete , nameScope ) ) , routing . Wrap ( hs . DeleteDataSourceByName ) )
datasourceRoute . Get ( "/:id" , authorize ( ac . EvalPermission ( datasources . ActionRead , idScope ) ) , routing . Wrap ( hs . GetDataSourceById ) )
datasourceRoute . Get ( "/uid/:uid" , authorize ( ac . EvalPermission ( datasources . ActionRead , uidScope ) ) , routing . Wrap ( hs . GetDataSourceByUID ) )
datasourceRoute . Get ( "/name/:name" , authorize ( ac . EvalPermission ( datasources . ActionRead , nameScope ) ) , routing . Wrap ( hs . GetDataSourceByName ) )
datasourceRoute . Get ( "/id/:name" , authorize ( ac . EvalPermission ( datasources . ActionIDRead , nameScope ) ) , routing . Wrap ( hs . GetDataSourceIdByName ) )
2021-09-01 08:18:17 -05:00
} )
2015-12-03 09:43:55 -06:00
2023-03-27 04:15:37 -05:00
pluginIDScope := pluginaccesscontrol . ScopeProvider . GetResourceScope ( ac . Parameter ( ":pluginId" ) )
2021-01-15 07:43:20 -06:00
apiRoute . Get ( "/plugins" , routing . Wrap ( hs . GetPluginList ) )
2022-07-08 06:24:09 -05:00
apiRoute . Get ( "/plugins/:pluginId/settings" , routing . Wrap ( hs . GetPluginSettingByID ) ) // RBAC check performed in handler for App Plugins
2021-03-08 00:02:49 -06:00
apiRoute . Get ( "/plugins/:pluginId/markdown/:name" , routing . Wrap ( hs . GetPluginMarkdown ) )
2021-01-15 07:43:20 -06:00
apiRoute . Get ( "/plugins/:pluginId/health" , routing . Wrap ( hs . CheckHealth ) )
2023-05-24 03:49:42 -05:00
apiRoute . Any ( "/plugins/:pluginId/resources" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionAppAccess , pluginIDScope ) ) , hs . CallResource )
apiRoute . Any ( "/plugins/:pluginId/resources/*" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionAppAccess , pluginIDScope ) ) , hs . CallResource )
2021-05-12 13:05:16 -05:00
apiRoute . Get ( "/plugins/errors" , routing . Wrap ( hs . GetPluginErrorsList ) )
2023-05-24 03:49:42 -05:00
apiRoute . Any ( "/plugin-proxy/:pluginId/*" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionAppAccess , pluginIDScope ) ) , hs . ProxyPluginRequest )
apiRoute . Any ( "/plugin-proxy/:pluginId" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionAppAccess , pluginIDScope ) ) , hs . ProxyPluginRequest )
2021-05-12 13:05:16 -05:00
2022-07-06 09:22:59 -05:00
if hs . Cfg . PluginAdminEnabled && ! hs . Cfg . PluginAdminExternalManageEnabled {
2022-07-06 04:13:20 -05:00
apiRoute . Group ( "/plugins" , func ( pluginRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
pluginRoute . Post ( "/:pluginId/install" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionInstall ) ) , routing . Wrap ( hs . InstallPlugin ) )
pluginRoute . Post ( "/:pluginId/uninstall" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionInstall ) ) , routing . Wrap ( hs . UninstallPlugin ) )
2022-09-09 02:44:50 -05:00
} )
2022-07-06 04:13:20 -05:00
}
2016-03-11 02:57:20 -06:00
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/plugins" , func ( pluginRoute routing . RouteRegister ) {
2022-09-09 02:44:50 -05:00
pluginRoute . Get ( "/:pluginId/dashboards/" , reqOrgAdmin , routing . Wrap ( hs . GetPluginDashboards ) )
2023-05-24 03:49:42 -05:00
pluginRoute . Post ( "/:pluginId/settings" , authorize ( ac . EvalPermission ( pluginaccesscontrol . ActionWrite , pluginIDScope ) ) , routing . Wrap ( hs . UpdatePluginSetting ) )
2022-09-09 02:44:50 -05:00
pluginRoute . Get ( "/:pluginId/metrics" , reqOrgAdmin , routing . Wrap ( hs . CollectPluginMetrics ) )
} )
2015-12-03 09:43:55 -06:00
2018-10-09 10:47:43 -05:00
apiRoute . Get ( "/frontend/settings/" , hs . GetFrontendSettings )
2023-05-24 03:49:42 -05:00
apiRoute . Any ( "/datasources/proxy/:id/*" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . ProxyDataSourceRequest )
apiRoute . Any ( "/datasources/proxy/uid/:uid/*" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . ProxyDataSourceRequestWithUID )
apiRoute . Any ( "/datasources/proxy/:id" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . ProxyDataSourceRequest )
apiRoute . Any ( "/datasources/proxy/uid/:uid" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . ProxyDataSourceRequestWithUID )
2022-05-19 11:27:59 -05:00
// Deprecated: use /datasources/uid/:uid/resources API instead.
2023-05-24 03:49:42 -05:00
apiRoute . Any ( "/datasources/:id/resources" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . CallDatasourceResource )
apiRoute . Any ( "/datasources/uid/:uid/resources" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . CallDatasourceResourceWithUID )
2022-05-19 11:27:59 -05:00
// Deprecated: use /datasources/uid/:uid/resources/* API instead.
2023-05-24 03:49:42 -05:00
apiRoute . Any ( "/datasources/:id/resources/*" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . CallDatasourceResource )
apiRoute . Any ( "/datasources/uid/:uid/resources/*" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , hs . CallDatasourceResourceWithUID )
2022-05-19 11:27:59 -05:00
// Deprecated: use /datasources/uid/:uid/health API instead.
2023-05-24 03:49:42 -05:00
apiRoute . Any ( "/datasources/:id/health" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , routing . Wrap ( hs . CheckDatasourceHealth ) )
apiRoute . Any ( "/datasources/uid/:uid/health" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , routing . Wrap ( hs . CheckDatasourceHealthWithUID ) )
2015-02-10 03:19:43 -06:00
2018-01-29 06:51:01 -06:00
// Folders
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/folders" , func ( folderRoute routing . RouteRegister ) {
2022-03-30 08:14:26 -05:00
idScope := dashboards . ScopeFoldersProvider . GetResourceScope ( ac . Parameter ( ":id" ) )
uidScope := dashboards . ScopeFoldersProvider . GetResourceScopeUID ( ac . Parameter ( ":uid" ) )
2023-05-24 03:49:42 -05:00
folderRoute . Get ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersRead ) ) , routing . Wrap ( hs . GetFolders ) )
folderRoute . Get ( "/id/:id" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersRead , idScope ) ) , routing . Wrap ( hs . GetFolderByID ) )
folderRoute . Post ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersCreate ) ) , routing . Wrap ( hs . CreateFolder ) )
2018-02-20 08:25:16 -06:00
2018-06-25 09:36:47 -05:00
folderRoute . Group ( "/:uid" , func ( folderUidRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
folderUidRoute . Get ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersRead , uidScope ) ) , routing . Wrap ( hs . GetFolderByUID ) )
folderUidRoute . Put ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersWrite , uidScope ) ) , routing . Wrap ( hs . UpdateFolder ) )
folderUidRoute . Post ( "/move" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersWrite , uidScope ) ) , routing . Wrap ( hs . MoveFolder ) )
folderUidRoute . Delete ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersDelete , uidScope ) ) , routing . Wrap ( hs . DeleteFolder ) )
folderUidRoute . Get ( "/counts" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersRead , uidScope ) ) , routing . Wrap ( hs . GetFolderDescendantCounts ) )
2018-02-20 08:25:16 -06:00
2018-06-25 09:36:47 -05:00
folderUidRoute . Group ( "/permissions" , func ( folderPermissionRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
folderPermissionRoute . Get ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersPermissionsRead , uidScope ) ) , routing . Wrap ( hs . GetFolderPermissionList ) )
folderPermissionRoute . Post ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionFoldersPermissionsWrite , uidScope ) ) , routing . Wrap ( hs . UpdateFolderPermissions ) )
2018-02-20 08:25:16 -06:00
} )
} )
2018-01-29 06:51:01 -06:00
} )
2015-01-14 07:25:12 -06:00
// Dashboard
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/dashboards" , func ( dashboardRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
dashboardRoute . Get ( "/uid/:uid" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsRead ) ) , routing . Wrap ( hs . GetDashboard ) )
dashboardRoute . Delete ( "/uid/:uid" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsDelete ) ) , routing . Wrap ( hs . DeleteDashboardByUID ) )
2022-04-21 09:24:03 -05:00
dashboardRoute . Group ( "/uid/:uid" , func ( dashUidRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
dashUidRoute . Get ( "/versions" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . GetDashboardVersions ) )
dashUidRoute . Post ( "/restore" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . RestoreDashboardVersion ) )
dashUidRoute . Get ( "/versions/:id" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . GetDashboardVersion ) )
2022-04-21 09:24:03 -05:00
dashUidRoute . Group ( "/permissions" , func ( dashboardPermissionRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
dashboardPermissionRoute . Get ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsPermissionsRead ) ) , routing . Wrap ( hs . GetDashboardPermissionList ) )
dashboardPermissionRoute . Post ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsPermissionsWrite ) ) , routing . Wrap ( hs . UpdateDashboardPermissions ) )
2022-04-21 09:24:03 -05:00
} )
} )
2018-01-29 14:23:07 -06:00
2023-05-24 03:49:42 -05:00
dashboardRoute . Post ( "/calculate-diff" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . CalculateDashboardDiff ) )
dashboardRoute . Post ( "/validate" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . ValidateDashboard ) )
2021-11-29 03:18:01 -06:00
dashboardRoute . Post ( "/trim" , routing . Wrap ( hs . TrimDashboard ) )
2017-06-07 04:50:09 -05:00
2023-05-24 03:49:42 -05:00
dashboardRoute . Post ( "/db" , authorize ( ac . EvalAny ( ac . EvalPermission ( dashboards . ActionDashboardsCreate ) , ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) ) , routing . Wrap ( hs . PostDashboard ) )
2021-01-15 07:43:20 -06:00
dashboardRoute . Get ( "/home" , routing . Wrap ( hs . GetHomeDashboard ) )
2022-02-07 05:43:43 -06:00
dashboardRoute . Get ( "/tags" , hs . GetDashboardTags )
2017-10-12 10:38:49 -05:00
2022-05-16 11:59:02 -05:00
// Deprecated: used to convert internal IDs to UIDs
2023-05-24 03:49:42 -05:00
dashboardRoute . Get ( "/ids/:ids" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsRead ) ) , hs . GetDashboardUIDs )
2022-05-16 11:59:02 -05:00
2022-04-21 09:24:03 -05:00
// Deprecated: use /uid/:uid API instead.
2018-06-25 09:36:47 -05:00
dashboardRoute . Group ( "/id/:dashboardId" , func ( dashIdRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
dashIdRoute . Get ( "/versions" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . GetDashboardVersions ) )
dashIdRoute . Get ( "/versions/:id" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . GetDashboardVersion ) )
dashIdRoute . Post ( "/restore" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsWrite ) ) , routing . Wrap ( hs . RestoreDashboardVersion ) )
2017-10-12 10:38:49 -05:00
2018-06-25 09:36:47 -05:00
dashIdRoute . Group ( "/permissions" , func ( dashboardPermissionRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
dashboardPermissionRoute . Get ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsPermissionsRead ) ) , routing . Wrap ( hs . GetDashboardPermissionList ) )
dashboardPermissionRoute . Post ( "/" , authorize ( ac . EvalPermission ( dashboards . ActionDashboardsPermissionsWrite ) ) , routing . Wrap ( hs . UpdateDashboardPermissions ) )
2017-10-12 10:38:49 -05:00
} )
} )
2015-01-14 07:25:12 -06:00
} )
2015-01-26 13:26:17 -06:00
2016-01-19 07:05:24 -06:00
// Dashboard snapshots
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/dashboard/snapshots" , func ( dashboardRoute routing . RouteRegister ) {
2022-02-08 10:57:59 -06:00
dashboardRoute . Get ( "/" , routing . Wrap ( hs . SearchDashboardSnapshots ) )
2016-01-19 07:05:24 -06:00
} )
2016-01-19 03:37:36 -06:00
2015-12-22 04:07:15 -06:00
// Playlist
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/playlists" , func ( playlistRoute routing . RouteRegister ) {
2022-01-27 03:33:02 -06:00
playlistRoute . Get ( "/" , routing . Wrap ( hs . SearchPlaylists ) )
2022-06-14 14:32:52 -05:00
playlistRoute . Get ( "/:uid" , hs . ValidateOrgPlaylist , routing . Wrap ( hs . GetPlaylist ) )
playlistRoute . Get ( "/:uid/items" , hs . ValidateOrgPlaylist , routing . Wrap ( hs . GetPlaylistItems ) )
playlistRoute . Get ( "/:uid/dashboards" , hs . ValidateOrgPlaylist , routing . Wrap ( hs . GetPlaylistDashboards ) )
playlistRoute . Delete ( "/:uid" , reqEditorRole , hs . ValidateOrgPlaylist , routing . Wrap ( hs . DeletePlaylist ) )
playlistRoute . Put ( "/:uid" , reqEditorRole , hs . ValidateOrgPlaylist , routing . Wrap ( hs . UpdatePlaylist ) )
2022-01-27 03:33:02 -06:00
playlistRoute . Post ( "/" , reqEditorRole , routing . Wrap ( hs . CreatePlaylist ) )
2015-12-22 04:07:15 -06:00
} )
2015-01-14 07:25:12 -06:00
// Search
2021-01-15 07:43:20 -06:00
apiRoute . Get ( "/search/sorting" , routing . Wrap ( hs . ListSortOptions ) )
2022-02-03 11:46:38 -06:00
apiRoute . Get ( "/search/" , routing . Wrap ( hs . Search ) )
2015-01-26 13:26:17 -06:00
2015-01-14 07:25:12 -06:00
// metrics
2019-10-31 18:22:00 -05:00
// DataSource w/ expressions
2023-05-24 03:49:42 -05:00
apiRoute . Post ( "/ds/query" , authorize ( ac . EvalPermission ( datasources . ActionQuery ) ) , routing . Wrap ( hs . QueryMetricsV2 ) )
2019-10-31 18:22:00 -05:00
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/alerts" , func ( alertsRoute routing . RouteRegister ) {
2021-11-29 03:18:01 -06:00
alertsRoute . Post ( "/test" , routing . Wrap ( hs . AlertTest ) )
2022-07-12 02:01:31 -05:00
alertsRoute . Post ( "/:alertId/pause" , reqEditorRole , routing . Wrap ( hs . PauseAlert ( setting . AlertingEnabled ) ) )
2022-02-04 06:41:15 -06:00
alertsRoute . Get ( "/:alertId" , hs . ValidateOrgAlert , routing . Wrap ( hs . GetAlert ) )
alertsRoute . Get ( "/" , routing . Wrap ( hs . GetAlerts ) )
alertsRoute . Get ( "/states-for-dashboard" , routing . Wrap ( hs . GetAlertStatesForDashboard ) )
2016-04-26 10:36:50 -05:00
} )
2022-04-06 11:24:33 -05:00
var notifiersAuthHandler web . Handler
if hs . Cfg . UnifiedAlerting . IsEnabled ( ) {
notifiersAuthHandler = reqSignedIn
} else {
notifiersAuthHandler = reqEditorRole
}
apiRoute . Get ( "/alert-notifiers" , notifiersAuthHandler , routing . Wrap (
2022-02-04 06:41:15 -06:00
hs . GetAlertNotifiers ( hs . Cfg . UnifiedAlerting . IsEnabled ( ) ) ) ,
2021-05-04 06:58:39 -05:00
)
2016-07-14 06:32:16 -05:00
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/alert-notifications" , func ( alertNotifications routing . RouteRegister ) {
2022-02-04 06:41:15 -06:00
alertNotifications . Get ( "/" , routing . Wrap ( hs . GetAlertNotifications ) )
alertNotifications . Post ( "/test" , routing . Wrap ( hs . NotificationTest ) )
alertNotifications . Post ( "/" , routing . Wrap ( hs . CreateAlertNotification ) )
2021-11-29 03:18:01 -06:00
alertNotifications . Put ( "/:notificationId" , routing . Wrap ( hs . UpdateAlertNotification ) )
2022-02-04 06:41:15 -06:00
alertNotifications . Get ( "/:notificationId" , routing . Wrap ( hs . GetAlertNotificationByID ) )
alertNotifications . Delete ( "/:notificationId" , routing . Wrap ( hs . DeleteAlertNotification ) )
alertNotifications . Get ( "/uid/:uid" , routing . Wrap ( hs . GetAlertNotificationByUID ) )
2021-11-29 03:18:01 -06:00
alertNotifications . Put ( "/uid/:uid" , routing . Wrap ( hs . UpdateAlertNotificationByUID ) )
2022-02-04 06:41:15 -06:00
alertNotifications . Delete ( "/uid/:uid" , routing . Wrap ( hs . DeleteAlertNotificationByUID ) )
2016-10-19 01:01:14 -05:00
} , reqEditorRole )
2016-07-14 06:32:16 -05:00
2019-08-12 13:03:48 -05:00
// alert notifications without requirement of user to be org editor
apiRoute . Group ( "/alert-notifications" , func ( orgRoute routing . RouteRegister ) {
2022-02-04 06:41:15 -06:00
orgRoute . Get ( "/lookup" , routing . Wrap ( hs . GetAlertNotificationLookup ) )
2019-08-12 13:03:48 -05:00
} )
2023-05-24 03:49:42 -05:00
apiRoute . Get ( "/annotations" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsRead ) ) , routing . Wrap ( hs . GetAnnotations ) )
apiRoute . Post ( "/annotations/mass-delete" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsDelete ) ) , routing . Wrap ( hs . MassDeleteAnnotations ) )
2017-04-12 08:46:41 -05:00
2018-06-25 09:36:47 -05:00
apiRoute . Group ( "/annotations" , func ( annotationsRoute routing . RouteRegister ) {
2023-05-24 03:49:42 -05:00
annotationsRoute . Post ( "/" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsCreate ) ) , routing . Wrap ( hs . PostAnnotation ) )
annotationsRoute . Get ( "/:annotationId" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsRead , ac . ScopeAnnotationsID ) ) , routing . Wrap ( hs . GetAnnotationByID ) )
annotationsRoute . Delete ( "/:annotationId" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsDelete , ac . ScopeAnnotationsID ) ) , routing . Wrap ( hs . DeleteAnnotationByID ) )
annotationsRoute . Put ( "/:annotationId" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsWrite , ac . ScopeAnnotationsID ) ) , routing . Wrap ( hs . UpdateAnnotation ) )
annotationsRoute . Patch ( "/:annotationId" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsWrite , ac . ScopeAnnotationsID ) ) , routing . Wrap ( hs . PatchAnnotation ) )
annotationsRoute . Post ( "/graphite" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsCreate , ac . ScopeAnnotationsTypeOrganization ) ) , routing . Wrap ( hs . PostGraphiteAnnotation ) )
annotationsRoute . Get ( "/tags" , authorize ( ac . EvalPermission ( ac . ActionAnnotationsRead ) ) , routing . Wrap ( hs . GetAnnotationTags ) )
2017-12-20 17:52:21 -06:00
} )
2016-09-08 04:25:45 -05:00
2021-11-29 03:18:01 -06:00
apiRoute . Post ( "/frontend-metrics" , routing . Wrap ( hs . PostFrontendMetrics ) )
2021-04-01 13:04:02 -05:00
2021-05-04 10:44:55 -05:00
apiRoute . Group ( "/live" , func ( liveRoute routing . RouteRegister ) {
// the channel path is in the name
2021-11-29 03:18:01 -06:00
liveRoute . Post ( "/publish" , routing . Wrap ( hs . Live . HandleHTTPPublish ) )
2021-04-05 11:04:46 -05:00
2021-09-09 11:19:29 -05:00
// POST influx line protocol.
2021-05-04 10:44:55 -05:00
liveRoute . Post ( "/push/:streamId" , hs . LivePushGateway . Handle )
2021-04-05 11:04:46 -05:00
2021-05-04 10:44:55 -05:00
// List available streams and fields
liveRoute . Get ( "/list" , routing . Wrap ( hs . Live . HandleListHTTP ) )
2021-04-23 14:55:31 -05:00
2021-05-04 10:44:55 -05:00
// Some channels may have info
liveRoute . Get ( "/info/*" , routing . Wrap ( hs . Live . HandleInfoHTTP ) )
} )
2021-03-30 05:23:29 -05:00
2020-10-14 05:48:48 -05:00
// short urls
2021-11-29 03:18:01 -06:00
apiRoute . Post ( "/short-urls" , routing . Wrap ( hs . createShortURL ) )
2015-01-15 05:16:54 -06:00
} , reqSignedIn )
// admin api
2018-06-25 09:36:47 -05:00
r . Group ( "/api/admin" , func ( adminRoute routing . RouteRegister ) {
2023-04-20 11:58:50 -05:00
// There is additional filter which will ensure that user sees only settings that they are allowed to see, so we don't need provide additional scope here for ActionSettingsRead.
2023-05-24 03:49:42 -05:00
adminRoute . Get ( "/settings" , authorize ( ac . EvalPermission ( ac . ActionSettingsRead ) ) , routing . Wrap ( hs . AdminGetSettings ) )
adminRoute . Get ( "/settings-verbose" , authorize ( ac . EvalPermission ( ac . ActionSettingsRead ) ) , routing . Wrap ( hs . AdminGetVerboseSettings ) )
adminRoute . Get ( "/stats" , authorize ( ac . EvalPermission ( ac . ActionServerStatsRead ) ) , routing . Wrap ( hs . AdminGetStats ) )
2022-07-12 02:01:31 -05:00
adminRoute . Post ( "/pause-all-alerts" , reqGrafanaAdmin , routing . Wrap ( hs . PauseAllAlerts ( setting . AlertingEnabled ) ) )
2021-04-22 05:19:41 -05:00
2022-05-23 06:13:55 -05:00
adminRoute . Post ( "/encryption/rotate-data-keys" , reqGrafanaAdmin , routing . Wrap ( hs . AdminRotateDataEncryptionKeys ) )
2022-07-18 01:57:58 -05:00
adminRoute . Post ( "/encryption/reencrypt-data-keys" , reqGrafanaAdmin , routing . Wrap ( hs . AdminReEncryptEncryptionKeys ) )
adminRoute . Post ( "/encryption/reencrypt-secrets" , reqGrafanaAdmin , routing . Wrap ( hs . AdminReEncryptSecrets ) )
adminRoute . Post ( "/encryption/rollback-secrets" , reqGrafanaAdmin , routing . Wrap ( hs . AdminRollbackSecrets ) )
2022-08-29 13:44:55 -05:00
adminRoute . Post ( "/encryption/migrate-secrets/to-plugin" , reqGrafanaAdmin , routing . Wrap ( hs . AdminMigrateSecretsToPlugin ) )
adminRoute . Post ( "/encryption/migrate-secrets/from-plugin" , reqGrafanaAdmin , routing . Wrap ( hs . AdminMigrateSecretsFromPlugin ) )
adminRoute . Post ( "/encryption/delete-secretsmanagerplugin-secrets" , reqGrafanaAdmin , routing . Wrap ( hs . AdminDeleteAllSecretsManagerPluginSecrets ) )
2022-05-23 06:13:55 -05:00
2023-05-24 03:49:42 -05:00
adminRoute . Post ( "/provisioning/dashboards/reload" , authorize ( ac . EvalPermission ( ActionProvisioningReload , ScopeProvisionersDashboards ) ) , routing . Wrap ( hs . AdminProvisioningReloadDashboards ) )
adminRoute . Post ( "/provisioning/plugins/reload" , authorize ( ac . EvalPermission ( ActionProvisioningReload , ScopeProvisionersPlugins ) ) , routing . Wrap ( hs . AdminProvisioningReloadPlugins ) )
adminRoute . Post ( "/provisioning/datasources/reload" , authorize ( ac . EvalPermission ( ActionProvisioningReload , ScopeProvisionersDatasources ) ) , routing . Wrap ( hs . AdminProvisioningReloadDatasources ) )
adminRoute . Post ( "/provisioning/notifications/reload" , authorize ( ac . EvalPermission ( ActionProvisioningReload , ScopeProvisionersNotifications ) ) , routing . Wrap ( hs . AdminProvisioningReloadNotifications ) )
adminRoute . Post ( "/provisioning/alerting/reload" , authorize ( ac . EvalPermission ( ActionProvisioningReload , ScopeProvisionersAlertRules ) ) , routing . Wrap ( hs . AdminProvisioningReloadAlerting ) )
2023-01-26 03:50:44 -06:00
} , reqSignedIn )
2014-12-15 14:25:02 -06:00
2021-04-14 09:31:27 -05:00
// Administering users
r . Group ( "/api/admin/users" , func ( adminUserRoute routing . RouteRegister ) {
2022-03-22 06:48:46 -05:00
userIDScope := ac . Scope ( "global.users" , "id" , ac . Parameter ( ":id" ) )
2021-08-24 04:36:28 -05:00
2023-05-24 03:49:42 -05:00
adminUserRoute . Post ( "/" , authorize ( ac . EvalPermission ( ac . ActionUsersCreate ) ) , routing . Wrap ( hs . AdminCreateUser ) )
adminUserRoute . Put ( "/:id/password" , authorize ( ac . EvalPermission ( ac . ActionUsersPasswordUpdate , userIDScope ) ) , routing . Wrap ( hs . AdminUpdateUserPassword ) )
adminUserRoute . Put ( "/:id/permissions" , authorize ( ac . EvalPermission ( ac . ActionUsersPermissionsUpdate , userIDScope ) ) , routing . Wrap ( hs . AdminUpdateUserPermissions ) )
adminUserRoute . Delete ( "/:id" , authorize ( ac . EvalPermission ( ac . ActionUsersDelete , userIDScope ) ) , routing . Wrap ( hs . AdminDeleteUser ) )
adminUserRoute . Post ( "/:id/disable" , authorize ( ac . EvalPermission ( ac . ActionUsersDisable , userIDScope ) ) , routing . Wrap ( hs . AdminDisableUser ) )
adminUserRoute . Post ( "/:id/enable" , authorize ( ac . EvalPermission ( ac . ActionUsersEnable , userIDScope ) ) , routing . Wrap ( hs . AdminEnableUser ) )
adminUserRoute . Get ( "/:id/quotas" , authorize ( ac . EvalPermission ( ac . ActionUsersQuotasList , userIDScope ) ) , routing . Wrap ( hs . GetUserQuotas ) )
adminUserRoute . Put ( "/:id/quotas/:target" , authorize ( ac . EvalPermission ( ac . ActionUsersQuotasUpdate , userIDScope ) ) , routing . Wrap ( hs . UpdateUserQuota ) )
adminUserRoute . Post ( "/:id/logout" , authorize ( ac . EvalPermission ( ac . ActionUsersLogout , userIDScope ) ) , routing . Wrap ( hs . AdminLogoutUser ) )
adminUserRoute . Get ( "/:id/auth-tokens" , authorize ( ac . EvalPermission ( ac . ActionUsersAuthTokenList , userIDScope ) ) , routing . Wrap ( hs . AdminGetUserAuthTokens ) )
adminUserRoute . Post ( "/:id/revoke-auth-token" , authorize ( ac . EvalPermission ( ac . ActionUsersAuthTokenUpdate , userIDScope ) ) , routing . Wrap ( hs . AdminRevokeUserAuthToken ) )
2023-01-26 03:50:44 -06:00
} , reqSignedIn )
2021-04-14 09:31:27 -05:00
2014-12-15 14:25:02 -06:00
// rendering
2018-05-24 08:26:27 -05:00
r . Get ( "/render/*" , reqSignedIn , hs . RenderToPng )
2015-01-06 02:11:00 -06:00
2016-04-08 15:42:33 -05:00
// grafana.net proxy
2021-11-12 04:07:12 -06:00
r . Any ( "/api/gnet/*" , reqSignedIn , hs . ProxyGnetRequest )
2016-04-08 15:42:33 -05:00
2022-07-06 18:51:44 -05:00
// Gravatar service
2022-04-05 21:56:17 -05:00
r . Get ( "/avatar/:hash" , hs . AvatarCacheServer . Handler )
2016-02-20 16:51:22 -06:00
2019-09-02 08:15:46 -05:00
// Snapshots
2022-02-08 10:57:59 -06:00
r . Post ( "/api/snapshots/" , reqSnapshotPublicModeOrSignedIn , hs . CreateDashboardSnapshot )
2023-01-26 07:28:11 -06:00
r . Get ( "/api/snapshot/shared-options/" , reqSignedIn , hs . GetSharingOptions )
2022-02-08 10:57:59 -06:00
r . Get ( "/api/snapshots/:key" , routing . Wrap ( hs . GetDashboardSnapshot ) )
r . Get ( "/api/snapshots-delete/:deleteKey" , reqSnapshotPublicModeOrSignedIn , routing . Wrap ( hs . DeleteDashboardSnapshotByDeleteKey ) )
2022-11-14 13:13:33 -06:00
r . Delete ( "/api/snapshots/:key" , reqSignedIn , routing . Wrap ( hs . DeleteDashboardSnapshot ) )
2014-12-15 14:25:02 -06:00
}