org.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package api
  2. import (
  3. "github.com/grafana/grafana/pkg/api/dtos"
  4. "github.com/grafana/grafana/pkg/bus"
  5. "github.com/grafana/grafana/pkg/metrics"
  6. "github.com/grafana/grafana/pkg/middleware"
  7. m "github.com/grafana/grafana/pkg/models"
  8. "github.com/grafana/grafana/pkg/setting"
  9. "github.com/grafana/grafana/pkg/util"
  10. )
  11. // GET /api/org
  12. func GetOrgCurrent(c *middleware.Context) Response {
  13. return getOrgHelper(c.OrgId)
  14. }
  15. // GET /api/orgs/:orgId
  16. func GetOrgById(c *middleware.Context) Response {
  17. return getOrgHelper(c.ParamsInt64(":orgId"))
  18. }
  19. // Get /api/orgs/name/:name
  20. func GetOrgByName(c *middleware.Context) Response {
  21. query := m.GetOrgByNameQuery{Name: c.Params(":name")}
  22. if err := bus.Dispatch(&query); err != nil {
  23. if err == m.ErrOrgNotFound {
  24. return ApiError(404, "Organization not found", err)
  25. }
  26. return ApiError(500, "Failed to get organization", err)
  27. }
  28. org := query.Result
  29. result := m.OrgDetailsDTO{
  30. Id: org.Id,
  31. Name: org.Name,
  32. Address: m.Address{
  33. Address1: org.Address1,
  34. Address2: org.Address2,
  35. City: org.City,
  36. ZipCode: org.ZipCode,
  37. State: org.State,
  38. Country: org.Country,
  39. },
  40. }
  41. return Json(200, &result)
  42. }
  43. func getOrgHelper(orgId int64) Response {
  44. query := m.GetOrgByIdQuery{Id: orgId}
  45. if err := bus.Dispatch(&query); err != nil {
  46. if err == m.ErrOrgNotFound {
  47. return ApiError(404, "Organization not found", err)
  48. }
  49. return ApiError(500, "Failed to get organization", err)
  50. }
  51. org := query.Result
  52. result := m.OrgDetailsDTO{
  53. Id: org.Id,
  54. Name: org.Name,
  55. Address: m.Address{
  56. Address1: org.Address1,
  57. Address2: org.Address2,
  58. City: org.City,
  59. ZipCode: org.ZipCode,
  60. State: org.State,
  61. Country: org.Country,
  62. },
  63. }
  64. return Json(200, &result)
  65. }
  66. // POST /api/orgs
  67. func CreateOrg(c *middleware.Context, cmd m.CreateOrgCommand) Response {
  68. if !c.IsSignedIn || (!setting.AllowUserOrgCreate && !c.IsGrafanaAdmin) {
  69. return ApiError(403, "Access denied", nil)
  70. }
  71. cmd.UserId = c.UserId
  72. if err := bus.Dispatch(&cmd); err != nil {
  73. if err == m.ErrOrgNameTaken {
  74. return ApiError(400, "Organization name taken", err)
  75. }
  76. return ApiError(500, "Failed to create organization", err)
  77. }
  78. metrics.M_Api_Org_Create.Inc(1)
  79. return Json(200, &util.DynMap{
  80. "orgId": cmd.Result.Id,
  81. "message": "Organization created",
  82. })
  83. }
  84. // PUT /api/org
  85. func UpdateOrgCurrent(c *middleware.Context, form dtos.UpdateOrgForm) Response {
  86. return updateOrgHelper(form, c.OrgId)
  87. }
  88. // PUT /api/orgs/:orgId
  89. func UpdateOrg(c *middleware.Context, form dtos.UpdateOrgForm) Response {
  90. return updateOrgHelper(form, c.ParamsInt64(":orgId"))
  91. }
  92. func updateOrgHelper(form dtos.UpdateOrgForm, orgId int64) Response {
  93. cmd := m.UpdateOrgCommand{Name: form.Name, OrgId: orgId}
  94. if err := bus.Dispatch(&cmd); err != nil {
  95. if err == m.ErrOrgNameTaken {
  96. return ApiError(400, "Organization name taken", err)
  97. }
  98. return ApiError(500, "Failed to update organization", err)
  99. }
  100. return ApiSuccess("Organization updated")
  101. }
  102. // PUT /api/org/address
  103. func UpdateOrgAddressCurrent(c *middleware.Context, form dtos.UpdateOrgAddressForm) Response {
  104. return updateOrgAddressHelper(form, c.OrgId)
  105. }
  106. // PUT /api/orgs/:orgId/address
  107. func UpdateOrgAddress(c *middleware.Context, form dtos.UpdateOrgAddressForm) Response {
  108. return updateOrgAddressHelper(form, c.ParamsInt64(":orgId"))
  109. }
  110. func updateOrgAddressHelper(form dtos.UpdateOrgAddressForm, orgId int64) Response {
  111. cmd := m.UpdateOrgAddressCommand{
  112. OrgId: orgId,
  113. Address: m.Address{
  114. Address1: form.Address1,
  115. Address2: form.Address2,
  116. City: form.City,
  117. State: form.State,
  118. ZipCode: form.ZipCode,
  119. Country: form.Country,
  120. },
  121. }
  122. if err := bus.Dispatch(&cmd); err != nil {
  123. return ApiError(500, "Failed to update org address", err)
  124. }
  125. return ApiSuccess("Address updated")
  126. }
  127. // GET /api/orgs/:orgId
  128. func DeleteOrgById(c *middleware.Context) Response {
  129. if err := bus.Dispatch(&m.DeleteOrgCommand{Id: c.ParamsInt64(":orgId")}); err != nil {
  130. return ApiError(500, "Failed to update organization", err)
  131. }
  132. return ApiSuccess("Organization deleted")
  133. }
  134. func SearchOrgs(c *middleware.Context) Response {
  135. query := m.SearchOrgsQuery{
  136. Query: c.Query("query"),
  137. Name: c.Query("name"),
  138. Page: 0,
  139. Limit: 1000,
  140. }
  141. if err := bus.Dispatch(&query); err != nil {
  142. return ApiError(500, "Failed to search orgs", err)
  143. }
  144. return Json(200, query.Result)
  145. }