user.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package router
  2. import (
  3. "github.com/go-chi/chi"
  4. "github.com/porter-dev/porter/api/server/handlers/project"
  5. "github.com/porter-dev/porter/api/server/handlers/user"
  6. "github.com/porter-dev/porter/api/server/shared"
  7. "github.com/porter-dev/porter/api/types"
  8. )
  9. func NewUserScopedRegisterer(children ...*Registerer) *Registerer {
  10. return &Registerer{
  11. GetRoutes: GetUserScopedRoutes,
  12. Children: children,
  13. }
  14. }
  15. func GetUserScopedRoutes(
  16. r chi.Router,
  17. config *shared.Config,
  18. basePath *types.Path,
  19. factory shared.APIEndpointFactory,
  20. children ...*Registerer,
  21. ) []*Route {
  22. routes := getUserRoutes(r, config, basePath, factory)
  23. for _, child := range children {
  24. r.Group(func(r chi.Router) {
  25. childRoutes := child.GetRoutes(r, config, basePath, factory, child.Children...)
  26. routes = append(routes, childRoutes...)
  27. })
  28. }
  29. return routes
  30. }
  31. func getUserRoutes(
  32. r chi.Router,
  33. config *shared.Config,
  34. basePath *types.Path,
  35. factory shared.APIEndpointFactory,
  36. ) []*Route {
  37. routes := make([]*Route, 0)
  38. // POST /api/logout -> user.NewUserLogoutHandler
  39. logoutUserEndpoint := factory.NewAPIEndpoint(
  40. &types.APIRequestMetadata{
  41. Verb: types.APIVerbUpdate,
  42. Method: types.HTTPVerbPost,
  43. Path: &types.Path{
  44. Parent: basePath,
  45. RelativePath: "/logout",
  46. },
  47. Scopes: []types.PermissionScope{types.UserScope},
  48. },
  49. )
  50. logoutUserHandler := user.NewUserLogoutHandler(config)
  51. routes = append(routes, &Route{
  52. Endpoint: logoutUserEndpoint,
  53. Handler: logoutUserHandler,
  54. Router: r,
  55. })
  56. // GET /api/auth/check -> user.NewAuthCheckHandler
  57. authCheckEndpoint := factory.NewAPIEndpoint(
  58. &types.APIRequestMetadata{
  59. Verb: types.APIVerbGet,
  60. Method: types.HTTPVerbGet,
  61. Path: &types.Path{
  62. Parent: basePath,
  63. RelativePath: "/auth/check",
  64. },
  65. Scopes: []types.PermissionScope{types.UserScope},
  66. },
  67. )
  68. authCheckHandler := user.NewAuthCheckHandler(
  69. config,
  70. factory.GetResultWriter(),
  71. )
  72. routes = append(routes, &Route{
  73. Endpoint: authCheckEndpoint,
  74. Handler: authCheckHandler,
  75. Router: r,
  76. })
  77. // DELETE /api/users/current -> user.NewUserDeleteHandler
  78. deleteUserEndpoint := factory.NewAPIEndpoint(
  79. &types.APIRequestMetadata{
  80. Verb: types.APIVerbDelete,
  81. Method: types.HTTPVerbDelete,
  82. Path: &types.Path{
  83. Parent: basePath,
  84. RelativePath: "/users/current",
  85. },
  86. Scopes: []types.PermissionScope{types.UserScope},
  87. },
  88. )
  89. deleteUserHandler := user.NewUserDeleteHandler(
  90. config,
  91. factory.GetResultWriter(),
  92. )
  93. routes = append(routes, &Route{
  94. Endpoint: deleteUserEndpoint,
  95. Handler: deleteUserHandler,
  96. Router: r,
  97. })
  98. // POST /api/projects -> project.NewProjectCreateHandler
  99. createEndpoint := factory.NewAPIEndpoint(
  100. &types.APIRequestMetadata{
  101. Verb: types.APIVerbCreate,
  102. Method: types.HTTPVerbPost,
  103. Path: &types.Path{
  104. Parent: basePath,
  105. RelativePath: "/projects",
  106. },
  107. Scopes: []types.PermissionScope{types.UserScope},
  108. },
  109. )
  110. createHandler := project.NewProjectCreateHandler(
  111. config,
  112. factory.GetDecoderValidator(),
  113. factory.GetResultWriter(),
  114. )
  115. routes = append(routes, &Route{
  116. Endpoint: createEndpoint,
  117. Handler: createHandler,
  118. Router: r,
  119. })
  120. // GET /api/projects -> project.NewProjectListHandler
  121. listEndpoint := factory.NewAPIEndpoint(
  122. &types.APIRequestMetadata{
  123. Verb: types.APIVerbList,
  124. Method: types.HTTPVerbGet,
  125. Path: &types.Path{
  126. Parent: basePath,
  127. RelativePath: "/projects",
  128. },
  129. Scopes: []types.PermissionScope{types.UserScope},
  130. },
  131. )
  132. listHandler := project.NewProjectListHandler(
  133. config,
  134. factory.GetResultWriter(),
  135. )
  136. routes = append(routes, &Route{
  137. Endpoint: listEndpoint,
  138. Handler: listHandler,
  139. Router: r,
  140. })
  141. // GET /email/verify/initiate -> user.VerifyEmailInitiateHandler
  142. emailVerifyInitiateEndpoint := factory.NewAPIEndpoint(
  143. &types.APIRequestMetadata{
  144. Verb: types.APIVerbUpdate,
  145. Method: types.HTTPVerbPost,
  146. Path: &types.Path{
  147. Parent: basePath,
  148. RelativePath: "/email/verify/initiate",
  149. },
  150. Scopes: []types.PermissionScope{types.UserScope},
  151. },
  152. )
  153. emailVerifyInitiateHandler := user.NewVerifyEmailInitiateHandler(config)
  154. routes = append(routes, &Route{
  155. Endpoint: emailVerifyInitiateEndpoint,
  156. Handler: emailVerifyInitiateHandler,
  157. Router: r,
  158. })
  159. // GET /email/verify/finalize -> user.VerifyEmailInitiateHandler
  160. emailVerifyFinalizeEndpoint := factory.NewAPIEndpoint(
  161. &types.APIRequestMetadata{
  162. Verb: types.APIVerbGet,
  163. Method: types.HTTPVerbGet,
  164. Path: &types.Path{
  165. Parent: basePath,
  166. RelativePath: "/email/verify/finalize",
  167. },
  168. Scopes: []types.PermissionScope{types.UserScope},
  169. ShouldRedirect: true,
  170. },
  171. )
  172. emailVerifyFinalizeHandler := user.NewVerifyEmailInitiateHandler(config)
  173. routes = append(routes, &Route{
  174. Endpoint: emailVerifyFinalizeEndpoint,
  175. Handler: emailVerifyFinalizeHandler,
  176. Router: r,
  177. })
  178. return routes
  179. }