base.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package router
  2. import (
  3. "github.com/go-chi/chi"
  4. "github.com/porter-dev/porter/api/server/handlers/metadata"
  5. "github.com/porter-dev/porter/api/server/handlers/release"
  6. "github.com/porter-dev/porter/api/server/handlers/user"
  7. "github.com/porter-dev/porter/api/server/shared"
  8. "github.com/porter-dev/porter/api/server/shared/config"
  9. "github.com/porter-dev/porter/api/types"
  10. )
  11. func NewBaseRegisterer(children ...*Registerer) *Registerer {
  12. return &Registerer{
  13. GetRoutes: GetBaseRoutes,
  14. Children: children,
  15. }
  16. }
  17. func GetBaseRoutes(
  18. r chi.Router,
  19. config *config.Config,
  20. basePath *types.Path,
  21. factory shared.APIEndpointFactory,
  22. children ...*Registerer,
  23. ) []*Route {
  24. routes := make([]*Route, 0)
  25. // GET /api/capabilities -> user.NewUserCreateHandler
  26. getMetadataEndpoint := factory.NewAPIEndpoint(
  27. &types.APIRequestMetadata{
  28. Verb: types.APIVerbGet,
  29. Method: types.HTTPVerbGet,
  30. Path: &types.Path{
  31. Parent: basePath,
  32. RelativePath: "/metadata",
  33. },
  34. },
  35. )
  36. getMetadataHandler := metadata.NewMetadataGetHandler(
  37. config,
  38. factory.GetResultWriter(),
  39. )
  40. routes = append(routes, &Route{
  41. Endpoint: getMetadataEndpoint,
  42. Handler: getMetadataHandler,
  43. Router: r,
  44. })
  45. // POST /api/users -> user.NewUserCreateHandler
  46. createUserEndpoint := factory.NewAPIEndpoint(
  47. &types.APIRequestMetadata{
  48. Verb: types.APIVerbCreate,
  49. Method: types.HTTPVerbPost,
  50. Path: &types.Path{
  51. Parent: basePath,
  52. RelativePath: "/users",
  53. },
  54. },
  55. )
  56. createUserHandler := user.NewUserCreateHandler(
  57. config,
  58. factory.GetDecoderValidator(),
  59. factory.GetResultWriter(),
  60. )
  61. routes = append(routes, &Route{
  62. Endpoint: createUserEndpoint,
  63. Handler: createUserHandler,
  64. Router: r,
  65. })
  66. // POST /api/login -> user.NewUserLoginHandler
  67. loginUserEndpoint := factory.NewAPIEndpoint(
  68. &types.APIRequestMetadata{
  69. Verb: types.APIVerbUpdate,
  70. Method: types.HTTPVerbPost,
  71. Path: &types.Path{
  72. Parent: basePath,
  73. RelativePath: "/login",
  74. },
  75. },
  76. )
  77. loginUserHandler := user.NewUserLoginHandler(
  78. config,
  79. factory.GetDecoderValidator(),
  80. factory.GetResultWriter(),
  81. )
  82. routes = append(routes, &Route{
  83. Endpoint: loginUserEndpoint,
  84. Handler: loginUserHandler,
  85. Router: r,
  86. })
  87. // POST /api/cli/login/exchange -> user.NewCLILoginExchangeHandler
  88. cliLoginExchangeEndpoint := factory.NewAPIEndpoint(
  89. &types.APIRequestMetadata{
  90. Verb: types.APIVerbCreate,
  91. Method: types.HTTPVerbPost,
  92. Path: &types.Path{
  93. Parent: basePath,
  94. RelativePath: "/cli/login/exchange",
  95. },
  96. },
  97. )
  98. cliLoginExchangeHandler := user.NewCLILoginExchangeHandler(
  99. config,
  100. factory.GetDecoderValidator(),
  101. factory.GetResultWriter(),
  102. )
  103. routes = append(routes, &Route{
  104. Endpoint: cliLoginExchangeEndpoint,
  105. Handler: cliLoginExchangeHandler,
  106. Router: r,
  107. })
  108. // POST /api/password/reset/initiate -> user.NewUserPasswordInitiateResetHandler
  109. passwordInitiateResetEndpoint := factory.NewAPIEndpoint(
  110. &types.APIRequestMetadata{
  111. Verb: types.APIVerbCreate,
  112. Method: types.HTTPVerbPost,
  113. Path: &types.Path{
  114. Parent: basePath,
  115. RelativePath: "/password/reset/initiate",
  116. },
  117. },
  118. )
  119. passwordInitiateResetHandler := user.NewUserPasswordInitiateResetHandler(
  120. config,
  121. factory.GetDecoderValidator(),
  122. factory.GetResultWriter(),
  123. )
  124. routes = append(routes, &Route{
  125. Endpoint: passwordInitiateResetEndpoint,
  126. Handler: passwordInitiateResetHandler,
  127. Router: r,
  128. })
  129. // POST /api/password/reset/verify -> user.NewUserPasswordVerifyResetHandler
  130. passwordVerifyResetEndpoint := factory.NewAPIEndpoint(
  131. &types.APIRequestMetadata{
  132. Verb: types.APIVerbCreate,
  133. Method: types.HTTPVerbPost,
  134. Path: &types.Path{
  135. Parent: basePath,
  136. RelativePath: "/password/reset/verify",
  137. },
  138. },
  139. )
  140. passwordVerifyResetHandler := user.NewUserPasswordVerifyResetHandler(
  141. config,
  142. factory.GetDecoderValidator(),
  143. factory.GetResultWriter(),
  144. )
  145. routes = append(routes, &Route{
  146. Endpoint: passwordVerifyResetEndpoint,
  147. Handler: passwordVerifyResetHandler,
  148. Router: r,
  149. })
  150. // POST /api/password/reset/finalize -> user.NewUserPasswordFinalizeResetHandler
  151. passwordFinalizeResetEndpoint := factory.NewAPIEndpoint(
  152. &types.APIRequestMetadata{
  153. Verb: types.APIVerbCreate,
  154. Method: types.HTTPVerbPost,
  155. Path: &types.Path{
  156. Parent: basePath,
  157. RelativePath: "/password/reset/finalize",
  158. },
  159. },
  160. )
  161. passwordFinalizeResetHandler := user.NewUserPasswordFinalizeResetHandler(
  162. config,
  163. factory.GetDecoderValidator(),
  164. factory.GetResultWriter(),
  165. )
  166. routes = append(routes, &Route{
  167. Endpoint: passwordFinalizeResetEndpoint,
  168. Handler: passwordFinalizeResetHandler,
  169. Router: r,
  170. })
  171. // POST /api/webhooks/deploy/{token} -> release.NewWebhookHandler
  172. webhookEndpoint := factory.NewAPIEndpoint(
  173. &types.APIRequestMetadata{
  174. Verb: types.APIVerbUpdate,
  175. Method: types.HTTPVerbPost,
  176. Path: &types.Path{
  177. Parent: basePath,
  178. RelativePath: "/webhooks/deploy/{token}",
  179. },
  180. Scopes: []types.PermissionScope{},
  181. },
  182. )
  183. webhookHandler := release.NewWebhookHandler(
  184. config,
  185. factory.GetDecoderValidator(),
  186. factory.GetResultWriter(),
  187. )
  188. routes = append(routes, &Route{
  189. Endpoint: webhookEndpoint,
  190. Handler: webhookHandler,
  191. Router: r,
  192. })
  193. return routes
  194. }