| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"github.com/Unknwon/macaron" | 
					
						
							| 
									
										
										
										
											2015-02-05 17:37:13 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/api/dtos" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/middleware" | 
					
						
							|  |  |  | 	m "github.com/grafana/grafana/pkg/models" | 
					
						
							| 
									
										
										
										
											2015-02-09 20:30:04 +08:00
										 |  |  | 	"github.com/macaron-contrib/binding" | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | // Register adds http routes
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | func Register(r *macaron.Macaron) { | 
					
						
							| 
									
										
										
										
											2015-01-15 19:16:54 +08:00
										 |  |  | 	reqSignedIn := middleware.Auth(&middleware.AuthOptions{ReqSignedIn: true}) | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 	reqGrafanaAdmin := middleware.Auth(&middleware.AuthOptions{ReqSignedIn: true, ReqGrafanaAdmin: true}) | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 	reqEditorRole := middleware.RoleAuth(m.ROLE_EDITOR, m.ROLE_ADMIN) | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 	regOrgAdmin := middleware.RoleAuth(m.ROLE_ADMIN) | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	bind := binding.Bind | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 	// not logged in views
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	r.Get("/", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-01-29 22:46:54 +08:00
										 |  |  | 	r.Get("/logout", Logout) | 
					
						
							| 
									
										
										
										
											2015-06-04 15:34:42 +08:00
										 |  |  | 	r.Post("/login", bind(dtos.LoginCommand{}), wrap(LoginPost)) | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	r.Get("/login/:name", OAuthLogin) | 
					
						
							| 
									
										
										
										
											2015-01-27 17:09:54 +08:00
										 |  |  | 	r.Get("/login", LoginView) | 
					
						
							| 
									
										
										
										
											2015-08-10 19:46:59 +08:00
										 |  |  | 	r.Get("/invite/:code", Index) | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 	// authed views
 | 
					
						
							| 
									
										
										
										
											2015-01-20 02:10:29 +08:00
										 |  |  | 	r.Get("/profile/", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-02-25 21:27:34 +08:00
										 |  |  | 	r.Get("/org/", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-06-11 14:16:09 +08:00
										 |  |  | 	r.Get("/org/new", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-02-25 21:27:34 +08:00
										 |  |  | 	r.Get("/datasources/", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-02-28 15:25:13 +08:00
										 |  |  | 	r.Get("/datasources/edit/*", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-02-25 21:27:34 +08:00
										 |  |  | 	r.Get("/org/users/", reqSignedIn, Index) | 
					
						
							|  |  |  | 	r.Get("/org/apikeys/", reqSignedIn, Index) | 
					
						
							|  |  |  | 	r.Get("/dashboard/import/", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2015-02-12 22:46:14 +08:00
										 |  |  | 	r.Get("/admin/settings", reqGrafanaAdmin, Index) | 
					
						
							| 
									
										
										
										
											2015-01-28 18:33:50 +08:00
										 |  |  | 	r.Get("/admin/users", reqGrafanaAdmin, Index) | 
					
						
							| 
									
										
										
										
											2015-02-10 23:26:23 +08:00
										 |  |  | 	r.Get("/admin/users/create", reqGrafanaAdmin, Index) | 
					
						
							|  |  |  | 	r.Get("/admin/users/edit/:id", reqGrafanaAdmin, Index) | 
					
						
							| 
									
										
										
										
											2015-08-11 21:20:50 +08:00
										 |  |  | 	r.Get("/admin/orgs", reqGrafanaAdmin, Index) | 
					
						
							|  |  |  | 	r.Get("/admin/orgs/edit/:id", reqGrafanaAdmin, Index) | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	r.Get("/dashboard/*", reqSignedIn, Index) | 
					
						
							| 
									
										
										
										
											2014-12-16 19:04:08 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 	// sign up
 | 
					
						
							| 
									
										
										
										
											2015-07-19 18:34:03 +08:00
										 |  |  | 	r.Get("/signup", Index) | 
					
						
							| 
									
										
										
										
											2015-06-10 16:15:42 +08:00
										 |  |  | 	r.Post("/api/user/signup", bind(m.CreateUserCommand{}), wrap(SignUp)) | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-20 21:52:49 +08:00
										 |  |  | 	// invited
 | 
					
						
							|  |  |  | 	r.Get("/api/user/invite/:code", wrap(GetInviteInfoByCode)) | 
					
						
							| 
									
										
										
										
											2015-07-20 23:46:48 +08:00
										 |  |  | 	r.Post("/api/user/invite/complete", bind(dtos.CompleteInviteForm{}), wrap(CompleteInvite)) | 
					
						
							| 
									
										
										
										
											2015-07-20 21:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-08 16:57:01 +08:00
										 |  |  | 	// reset password
 | 
					
						
							|  |  |  | 	r.Get("/user/password/send-reset-email", Index) | 
					
						
							|  |  |  | 	r.Get("/user/password/reset", Index) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	r.Post("/api/user/password/send-reset-email", bind(dtos.SendResetPasswordEmailForm{}), wrap(SendResetPasswordEmail)) | 
					
						
							| 
									
										
										
										
											2015-06-08 19:39:02 +08:00
										 |  |  | 	r.Post("/api/user/password/reset", bind(dtos.ResetUserPasswordForm{}), wrap(ResetPassword)) | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-21 20:53:16 +08:00
										 |  |  | 	// dashboard snapshots
 | 
					
						
							|  |  |  | 	r.Post("/api/snapshots/", bind(m.CreateDashboardSnapshotCommand{}), CreateDashboardSnapshot) | 
					
						
							| 
									
										
										
										
											2015-04-15 16:39:03 +08:00
										 |  |  | 	r.Get("/dashboard/snapshot/*", Index) | 
					
						
							| 
									
										
										
										
											2015-03-27 03:34:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-21 20:53:16 +08:00
										 |  |  | 	r.Get("/api/snapshots/:key", GetDashboardSnapshot) | 
					
						
							| 
									
										
										
										
											2015-03-27 03:34:58 +08:00
										 |  |  | 	r.Get("/api/snapshots-delete/:key", DeleteDashboardSnapshot) | 
					
						
							| 
									
										
										
										
											2015-03-21 20:53:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-07 15:25:00 +08:00
										 |  |  | 	// api renew session based on remember cookie
 | 
					
						
							|  |  |  | 	r.Get("/api/login/ping", LoginApiPing) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 	// authed api
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	r.Group("/api", func() { | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// user (signed in)
 | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 		r.Group("/user", func() { | 
					
						
							| 
									
										
										
										
											2015-05-18 23:28:15 +08:00
										 |  |  | 			r.Get("/", wrap(GetSignedInUser)) | 
					
						
							| 
									
										
										
										
											2015-05-19 01:06:19 +08:00
										 |  |  | 			r.Put("/", bind(m.UpdateUserCommand{}), wrap(UpdateSignedInUser)) | 
					
						
							| 
									
										
										
										
											2015-05-20 20:59:38 +08:00
										 |  |  | 			r.Post("/using/:id", wrap(UserSetUsingOrg)) | 
					
						
							| 
									
										
										
										
											2015-05-18 23:28:15 +08:00
										 |  |  | 			r.Get("/orgs", wrap(GetSignedInUserOrgList)) | 
					
						
							| 
									
										
										
										
											2015-05-20 20:59:38 +08:00
										 |  |  | 			r.Post("/stars/dashboard/:id", wrap(StarDashboard)) | 
					
						
							|  |  |  | 			r.Delete("/stars/dashboard/:id", wrap(UnstarDashboard)) | 
					
						
							|  |  |  | 			r.Put("/password", bind(m.ChangeUserPasswordCommand{}), wrap(ChangeUserPassword)) | 
					
						
							| 
									
										
										
										
											2015-01-20 01:01:04 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 		// users (admin permission required)
 | 
					
						
							| 
									
										
										
										
											2015-05-18 23:28:15 +08:00
										 |  |  | 		r.Group("/users", func() { | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 			r.Get("/", wrap(SearchUsers)) | 
					
						
							| 
									
										
										
										
											2015-05-19 01:06:19 +08:00
										 |  |  | 			r.Get("/:id", wrap(GetUserById)) | 
					
						
							| 
									
										
										
										
											2015-05-19 15:09:21 +08:00
										 |  |  | 			r.Get("/:id/orgs", wrap(GetUserOrgList)) | 
					
						
							| 
									
										
										
										
											2015-05-19 01:06:19 +08:00
										 |  |  | 			r.Put("/:id", bind(m.UpdateUserCommand{}), wrap(UpdateUser)) | 
					
						
							| 
									
										
										
										
											2015-05-18 23:28:15 +08:00
										 |  |  | 		}, reqGrafanaAdmin) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 		// current org
 | 
					
						
							| 
									
										
										
										
											2015-02-24 01:29:01 +08:00
										 |  |  | 		r.Group("/org", func() { | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 			r.Get("/", wrap(GetOrgCurrent)) | 
					
						
							|  |  |  | 			r.Put("/", bind(m.UpdateOrgCommand{}), wrap(UpdateOrgCurrent)) | 
					
						
							|  |  |  | 			r.Post("/users", bind(m.AddOrgUserCommand{}), wrap(AddOrgUserToCurrentOrg)) | 
					
						
							|  |  |  | 			r.Get("/users", wrap(GetOrgUsersForCurrentOrg)) | 
					
						
							|  |  |  | 			r.Patch("/users/:userId", bind(m.UpdateOrgUserCommand{}), wrap(UpdateOrgUserForCurrentOrg)) | 
					
						
							|  |  |  | 			r.Delete("/users/:userId", wrap(RemoveOrgUserForCurrentOrg)) | 
					
						
							| 
									
										
										
										
											2015-07-17 15:51:34 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			// invites
 | 
					
						
							|  |  |  | 			r.Get("/invites", wrap(GetPendingOrgInvites)) | 
					
						
							|  |  |  | 			r.Post("/invites", bind(dtos.AddInviteForm{}), wrap(AddOrgInvite)) | 
					
						
							| 
									
										
										
										
											2015-07-20 23:46:48 +08:00
										 |  |  | 			r.Patch("/invites/:code/revoke", wrap(RevokeInvite)) | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 		}, regOrgAdmin) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// create new org
 | 
					
						
							|  |  |  | 		r.Post("/orgs", bind(m.CreateOrgCommand{}), wrap(CreateOrg)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 17:47:14 +08:00
										 |  |  | 		// search all orgs
 | 
					
						
							|  |  |  | 		r.Get("/orgs", reqGrafanaAdmin, wrap(SearchOrgs)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 		// orgs (admin routes)
 | 
					
						
							|  |  |  | 		r.Group("/orgs/:orgId", func() { | 
					
						
							| 
									
										
										
										
											2015-08-11 21:20:50 +08:00
										 |  |  | 			r.Get("/", wrap(GetOrgById)) | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 			r.Put("/", bind(m.UpdateOrgCommand{}), wrap(UpdateOrg)) | 
					
						
							| 
									
										
										
										
											2015-08-12 14:59:25 +08:00
										 |  |  | 			r.Delete("/", wrap(DeleteOrgById)) | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 			r.Get("/users", wrap(GetOrgUsers)) | 
					
						
							|  |  |  | 			r.Post("/users", bind(m.AddOrgUserCommand{}), wrap(AddOrgUser)) | 
					
						
							|  |  |  | 			r.Patch("/users/:userId", bind(m.UpdateOrgUserCommand{}), wrap(UpdateOrgUser)) | 
					
						
							|  |  |  | 			r.Delete("/users/:userId", wrap(RemoveOrgUser)) | 
					
						
							|  |  |  | 		}, reqGrafanaAdmin) | 
					
						
							| 
									
										
										
										
											2015-01-27 03:26:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-27 15:26:11 +08:00
										 |  |  | 		// auth api keys
 | 
					
						
							|  |  |  | 		r.Group("/auth/keys", func() { | 
					
						
							| 
									
										
										
										
											2015-05-19 03:23:40 +08:00
										 |  |  | 			r.Get("/", wrap(GetApiKeys)) | 
					
						
							|  |  |  | 			r.Post("/", bind(m.AddApiKeyCommand{}), wrap(AddApiKey)) | 
					
						
							|  |  |  | 			r.Delete("/:id", wrap(DeleteApiKey)) | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 		}, regOrgAdmin) | 
					
						
							| 
									
										
										
										
											2015-01-27 03:26:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 		// Data sources
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 		r.Group("/datasources", func() { | 
					
						
							| 
									
										
										
										
											2015-06-01 18:15:49 +08:00
										 |  |  | 			r.Get("/", GetDataSources) | 
					
						
							|  |  |  | 			r.Post("/", bind(m.AddDataSourceCommand{}), AddDataSource) | 
					
						
							|  |  |  | 			r.Put("/:id", bind(m.UpdateDataSourceCommand{}), UpdateDataSource) | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 			r.Delete("/:id", DeleteDataSource) | 
					
						
							| 
									
										
										
										
											2015-02-14 17:04:27 +08:00
										 |  |  | 			r.Get("/:id", GetDataSourceById) | 
					
						
							| 
									
										
										
										
											2015-02-28 15:25:13 +08:00
										 |  |  | 			r.Get("/plugins", GetDataSourcePlugins) | 
					
						
							| 
									
										
										
										
											2015-05-19 16:16:32 +08:00
										 |  |  | 		}, regOrgAdmin) | 
					
						
							| 
									
										
										
										
											2015-01-27 03:26:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-18 21:06:44 +08:00
										 |  |  | 		r.Get("/frontend/settings/", GetFrontendSettings) | 
					
						
							| 
									
										
										
										
											2015-02-10 17:19:43 +08:00
										 |  |  | 		r.Any("/datasources/proxy/:id/*", reqSignedIn, ProxyDataSourceRequest) | 
					
						
							| 
									
										
										
										
											2015-05-20 05:47:39 +08:00
										 |  |  | 		r.Any("/datasources/proxy/:id", reqSignedIn, ProxyDataSourceRequest) | 
					
						
							| 
									
										
										
										
											2015-02-10 17:19:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 		// Dashboard
 | 
					
						
							| 
									
										
										
										
											2015-02-03 22:04:35 +08:00
										 |  |  | 		r.Group("/dashboards", func() { | 
					
						
							|  |  |  | 			r.Combo("/db/:slug").Get(GetDashboard).Delete(DeleteDashboard) | 
					
						
							|  |  |  | 			r.Post("/db", reqEditorRole, bind(m.SaveDashboardCommand{}), PostDashboard) | 
					
						
							| 
									
										
										
										
											2015-05-12 20:11:30 +08:00
										 |  |  | 			r.Get("/file/:file", GetDashboardFromJsonFile) | 
					
						
							| 
									
										
										
										
											2015-02-03 22:04:35 +08:00
										 |  |  | 			r.Get("/home", GetHomeDashboard) | 
					
						
							| 
									
										
										
										
											2015-05-13 16:45:53 +08:00
										 |  |  | 			r.Get("/tags", GetDashboardTags) | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2015-01-27 03:26:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 		// Search
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 		r.Get("/search/", Search) | 
					
						
							| 
									
										
										
										
											2015-01-27 03:26:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-14 21:25:12 +08:00
										 |  |  | 		// metrics
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 		r.Get("/metrics/test", GetTestMetrics) | 
					
						
							| 
									
										
										
										
											2015-01-15 19:16:54 +08:00
										 |  |  | 	}, reqSignedIn) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// admin api
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	r.Group("/api/admin", func() { | 
					
						
							| 
									
										
										
										
											2015-02-12 22:46:14 +08:00
										 |  |  | 		r.Get("/settings", AdminGetSettings) | 
					
						
							| 
									
										
										
										
											2015-02-10 22:36:51 +08:00
										 |  |  | 		r.Post("/users", bind(dtos.AdminCreateUserForm{}), AdminCreateUser) | 
					
						
							| 
									
										
										
										
											2015-02-23 18:24:22 +08:00
										 |  |  | 		r.Put("/users/:id/password", bind(dtos.AdminUpdateUserPasswordForm{}), AdminUpdateUserPassword) | 
					
						
							| 
									
										
										
										
											2015-02-26 22:43:48 +08:00
										 |  |  | 		r.Put("/users/:id/permissions", bind(dtos.AdminUpdateUserPermissionsForm{}), AdminUpdateUserPermissions) | 
					
						
							| 
									
										
										
										
											2015-02-11 23:47:22 +08:00
										 |  |  | 		r.Delete("/users/:id", AdminDeleteUser) | 
					
						
							| 
									
										
										
										
											2015-01-16 21:32:18 +08:00
										 |  |  | 	}, reqGrafanaAdmin) | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// rendering
 | 
					
						
							| 
									
										
										
										
											2015-01-16 18:54:19 +08:00
										 |  |  | 	r.Get("/render/*", reqSignedIn, RenderToPng) | 
					
						
							| 
									
										
										
										
											2015-01-06 16:11:00 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-18 23:28:15 +08:00
										 |  |  | 	r.NotFound(NotFoundHandler) | 
					
						
							| 
									
										
										
										
											2014-12-16 04:25:02 +08:00
										 |  |  | } |