diff --git a/pkg/api/api.go b/pkg/api/api.go index ed029a5171a..e15c08b770c 100644 --- a/pkg/api/api.go +++ b/pkg/api/api.go @@ -174,6 +174,10 @@ func Register(r *macaron.Macaron) { r.Get("/plugins", GetDataSourcePlugins) }, reqOrgAdmin) + r.Group("/datasources/name/:name", func() { + r.Get("/", wrap(GetDataSourceByName)) + }, reqOrgAdmin) + r.Get("/frontend/settings/", GetFrontendSettings) r.Any("/datasources/proxy/:id/*", reqSignedIn, ProxyDataSourceRequest) r.Any("/datasources/proxy/:id", reqSignedIn, ProxyDataSourceRequest) diff --git a/pkg/api/datasources.go b/pkg/api/datasources.go index 54959840d03..2f0f1e3ad7c 100644 --- a/pkg/api/datasources.go +++ b/pkg/api/datasources.go @@ -132,3 +132,35 @@ func GetDataSourcePlugins(c *middleware.Context) { c.JSON(200, dsList) } } + +// Get /api/datasources/name/:name +func GetDataSourceByName(c *middleware.Context) Response { + query := m.GetDataSourceByNameQuery{Name: c.Params(":name"), 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, + }) +}