2
0

project.go 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350
  1. package router
  2. import (
  3. "fmt"
  4. "github.com/go-chi/chi"
  5. apiContract "github.com/porter-dev/porter/api/server/handlers/api_contract"
  6. "github.com/porter-dev/porter/api/server/handlers/api_token"
  7. "github.com/porter-dev/porter/api/server/handlers/billing"
  8. "github.com/porter-dev/porter/api/server/handlers/cluster"
  9. "github.com/porter-dev/porter/api/server/handlers/gitinstallation"
  10. "github.com/porter-dev/porter/api/server/handlers/helmrepo"
  11. "github.com/porter-dev/porter/api/server/handlers/infra"
  12. "github.com/porter-dev/porter/api/server/handlers/policy"
  13. "github.com/porter-dev/porter/api/server/handlers/project"
  14. "github.com/porter-dev/porter/api/server/handlers/registry"
  15. "github.com/porter-dev/porter/api/server/shared"
  16. "github.com/porter-dev/porter/api/server/shared/config"
  17. "github.com/porter-dev/porter/api/server/shared/router"
  18. "github.com/porter-dev/porter/api/types"
  19. )
  20. func NewProjectScopedRegisterer(children ...*router.Registerer) *router.Registerer {
  21. return &router.Registerer{
  22. GetRoutes: GetProjectScopedRoutes,
  23. Children: children,
  24. }
  25. }
  26. func GetProjectScopedRoutes(
  27. r chi.Router,
  28. config *config.Config,
  29. basePath *types.Path,
  30. factory shared.APIEndpointFactory,
  31. children ...*router.Registerer,
  32. ) []*router.Route {
  33. routes, projPath := getProjectRoutes(r, config, basePath, factory)
  34. if len(children) > 0 {
  35. r.Route(projPath.RelativePath, func(r chi.Router) {
  36. for _, child := range children {
  37. childRoutes := child.GetRoutes(r, config, basePath, factory, child.Children...)
  38. routes = append(routes, childRoutes...)
  39. }
  40. })
  41. }
  42. return routes
  43. }
  44. func getProjectRoutes(
  45. r chi.Router,
  46. config *config.Config,
  47. basePath *types.Path,
  48. factory shared.APIEndpointFactory,
  49. ) ([]*router.Route, *types.Path) {
  50. relPath := "/projects/{project_id}"
  51. newPath := &types.Path{
  52. Parent: basePath,
  53. RelativePath: relPath,
  54. }
  55. routes := make([]*router.Route, 0)
  56. // GET /api/projects/{project_id} -> project.NewProjectGetHandler
  57. getEndpoint := factory.NewAPIEndpoint(
  58. &types.APIRequestMetadata{
  59. Verb: types.APIVerbGet,
  60. Method: types.HTTPVerbGet,
  61. Path: &types.Path{
  62. Parent: basePath,
  63. RelativePath: relPath,
  64. },
  65. Scopes: []types.PermissionScope{
  66. types.UserScope,
  67. types.ProjectScope,
  68. },
  69. },
  70. )
  71. getHandler := project.NewProjectGetHandler(
  72. config,
  73. factory.GetResultWriter(),
  74. )
  75. routes = append(routes, &router.Route{
  76. Endpoint: getEndpoint,
  77. Handler: getHandler,
  78. Router: r,
  79. })
  80. // DELETE /api/projects/{project_id} -> project.NewProjectDeleteHandler
  81. deleteEndpoint := factory.NewAPIEndpoint(
  82. &types.APIRequestMetadata{
  83. Verb: types.APIVerbDelete,
  84. Method: types.HTTPVerbDelete,
  85. Path: &types.Path{
  86. Parent: basePath,
  87. RelativePath: relPath,
  88. },
  89. Scopes: []types.PermissionScope{
  90. types.UserScope,
  91. types.ProjectScope,
  92. },
  93. },
  94. )
  95. deleteHandler := project.NewProjectDeleteHandler(
  96. config,
  97. factory.GetResultWriter(),
  98. )
  99. routes = append(routes, &router.Route{
  100. Endpoint: deleteEndpoint,
  101. Handler: deleteHandler,
  102. Router: r,
  103. })
  104. // GET /api/projects/{project_id}/policy -> project.NewProjectGetPolicyHandler
  105. getPolicyEndpoint := factory.NewAPIEndpoint(
  106. &types.APIRequestMetadata{
  107. Verb: types.APIVerbGet,
  108. Method: types.HTTPVerbGet,
  109. Path: &types.Path{
  110. Parent: basePath,
  111. RelativePath: relPath + "/policy",
  112. },
  113. Scopes: []types.PermissionScope{
  114. types.UserScope,
  115. types.ProjectScope,
  116. },
  117. },
  118. )
  119. getPolicyHandler := project.NewProjectGetPolicyHandler(
  120. config,
  121. factory.GetResultWriter(),
  122. )
  123. routes = append(routes, &router.Route{
  124. Endpoint: getPolicyEndpoint,
  125. Handler: getPolicyHandler,
  126. Router: r,
  127. })
  128. // GET /api/projects/{project_id}/onboarding -> project.NewProjectGetOnboardingHandler
  129. getOnboardingEndpoint := factory.NewAPIEndpoint(
  130. &types.APIRequestMetadata{
  131. Verb: types.APIVerbGet,
  132. Method: types.HTTPVerbGet,
  133. Path: &types.Path{
  134. Parent: basePath,
  135. RelativePath: relPath + "/onboarding",
  136. },
  137. Scopes: []types.PermissionScope{
  138. types.UserScope,
  139. types.ProjectScope,
  140. },
  141. },
  142. )
  143. getOnboardingHandler := project.NewOnboardingGetHandler(
  144. config,
  145. factory.GetDecoderValidator(),
  146. factory.GetResultWriter(),
  147. )
  148. routes = append(routes, &router.Route{
  149. Endpoint: getOnboardingEndpoint,
  150. Handler: getOnboardingHandler,
  151. Router: r,
  152. })
  153. // POST /api/projects/{project_id}/onboarding -> project.NewProjectGetOnboardingHandler
  154. updateOnboardingEndpoint := factory.NewAPIEndpoint(
  155. &types.APIRequestMetadata{
  156. Verb: types.APIVerbUpdate,
  157. Method: types.HTTPVerbPost,
  158. Path: &types.Path{
  159. Parent: basePath,
  160. RelativePath: relPath + "/onboarding",
  161. },
  162. Scopes: []types.PermissionScope{
  163. types.UserScope,
  164. types.ProjectScope,
  165. },
  166. },
  167. )
  168. updateOnboardingHandler := project.NewOnboardingUpdateHandler(
  169. config,
  170. factory.GetDecoderValidator(),
  171. factory.GetResultWriter(),
  172. )
  173. routes = append(routes, &router.Route{
  174. Endpoint: updateOnboardingEndpoint,
  175. Handler: updateOnboardingHandler,
  176. Router: r,
  177. })
  178. // GET /api/projects/{project_id}/usage -> project.NewProjectGetUsageHandler
  179. getUsageEndpoint := factory.NewAPIEndpoint(
  180. &types.APIRequestMetadata{
  181. Verb: types.APIVerbGet,
  182. Method: types.HTTPVerbGet,
  183. Path: &types.Path{
  184. Parent: basePath,
  185. RelativePath: relPath + "/usage",
  186. },
  187. Scopes: []types.PermissionScope{
  188. types.UserScope,
  189. types.ProjectScope,
  190. },
  191. },
  192. )
  193. getUsageHandler := project.NewProjectGetUsageHandler(
  194. config,
  195. factory.GetResultWriter(),
  196. )
  197. routes = append(routes, &router.Route{
  198. Endpoint: getUsageEndpoint,
  199. Handler: getUsageHandler,
  200. Router: r,
  201. })
  202. // GET /api/project/{project_id}/billing/redirect -> billing.NewRedirectBillingHandler
  203. redirectBillingEndpoint := factory.NewAPIEndpoint(
  204. &types.APIRequestMetadata{
  205. Verb: types.APIVerbGet,
  206. Method: types.HTTPVerbGet,
  207. Path: &types.Path{
  208. Parent: basePath,
  209. RelativePath: relPath + "/billing/redirect",
  210. },
  211. Scopes: []types.PermissionScope{
  212. types.UserScope,
  213. types.ProjectScope,
  214. },
  215. },
  216. )
  217. redirectBillingHandler := billing.NewRedirectBillingHandler(
  218. config,
  219. factory.GetResultWriter(),
  220. )
  221. routes = append(routes, &router.Route{
  222. Endpoint: redirectBillingEndpoint,
  223. Handler: redirectBillingHandler,
  224. Router: r,
  225. })
  226. // GET /api/projects/{project_id}/billing -> project.NewProjectGetBillingHandler
  227. getBillingEndpoint := factory.NewAPIEndpoint(
  228. &types.APIRequestMetadata{
  229. Verb: types.APIVerbGet,
  230. Method: types.HTTPVerbGet,
  231. Path: &types.Path{
  232. Parent: basePath,
  233. RelativePath: relPath + "/billing",
  234. },
  235. Scopes: []types.PermissionScope{
  236. types.UserScope,
  237. types.ProjectScope,
  238. },
  239. },
  240. )
  241. getBillingHandler := project.NewProjectGetBillingHandler(
  242. config,
  243. factory.GetResultWriter(),
  244. )
  245. routes = append(routes, &router.Route{
  246. Endpoint: getBillingEndpoint,
  247. Handler: getBillingHandler,
  248. Router: r,
  249. })
  250. // GET /api/billing_webhook -> billing.NewBillingWebhookHandler
  251. getBillingWebhookEndpoint := factory.NewAPIEndpoint(
  252. &types.APIRequestMetadata{
  253. Verb: types.APIVerbCreate,
  254. Method: types.HTTPVerbPost,
  255. Path: &types.Path{
  256. Parent: basePath,
  257. RelativePath: "/billing_webhook",
  258. },
  259. Scopes: []types.PermissionScope{},
  260. },
  261. )
  262. getBillingWebhookHandler := billing.NewBillingWebhookHandler(
  263. config,
  264. factory.GetDecoderValidator(),
  265. )
  266. routes = append(routes, &router.Route{
  267. Endpoint: getBillingWebhookEndpoint,
  268. Handler: getBillingWebhookHandler,
  269. Router: r,
  270. })
  271. // GET /api/projects/{project_id}/clusters -> cluster.NewClusterListHandler
  272. listClusterEndpoint := factory.NewAPIEndpoint(
  273. &types.APIRequestMetadata{
  274. Verb: types.APIVerbList,
  275. Method: types.HTTPVerbGet,
  276. Path: &types.Path{
  277. Parent: basePath,
  278. RelativePath: relPath + "/clusters",
  279. },
  280. Scopes: []types.PermissionScope{
  281. types.UserScope,
  282. types.ProjectScope,
  283. },
  284. },
  285. )
  286. listClusterHandler := cluster.NewClusterListHandler(
  287. config,
  288. factory.GetResultWriter(),
  289. )
  290. routes = append(routes, &router.Route{
  291. Endpoint: listClusterEndpoint,
  292. Handler: listClusterHandler,
  293. Router: r,
  294. })
  295. // GET /api/projects/{project_id}/gitrepos -> gitinstallation.NewGitRepoListHandler
  296. listGitReposEndpoint := factory.NewAPIEndpoint(
  297. &types.APIRequestMetadata{
  298. Verb: types.APIVerbList,
  299. Method: types.HTTPVerbGet,
  300. Path: &types.Path{
  301. Parent: basePath,
  302. RelativePath: relPath + "/gitrepos",
  303. },
  304. Scopes: []types.PermissionScope{
  305. types.UserScope,
  306. types.ProjectScope,
  307. },
  308. },
  309. )
  310. listGitReposHandler := gitinstallation.NewGitRepoListHandler(
  311. config,
  312. factory.GetResultWriter(),
  313. )
  314. routes = append(routes, &router.Route{
  315. Endpoint: listGitReposEndpoint,
  316. Handler: listGitReposHandler,
  317. Router: r,
  318. })
  319. // GET /api/projects/{project_id}/collaborators -> project.NewCollaboratorsListHandler
  320. listCollaboratorsEndpoint := factory.NewAPIEndpoint(
  321. &types.APIRequestMetadata{
  322. Verb: types.APIVerbList,
  323. Method: types.HTTPVerbGet,
  324. Path: &types.Path{
  325. Parent: basePath,
  326. RelativePath: relPath + "/collaborators",
  327. },
  328. Scopes: []types.PermissionScope{
  329. types.UserScope,
  330. types.ProjectScope,
  331. },
  332. },
  333. )
  334. listCollaboratorsHandler := project.NewCollaboratorsListHandler(
  335. config,
  336. factory.GetResultWriter(),
  337. )
  338. routes = append(routes, &router.Route{
  339. Endpoint: listCollaboratorsEndpoint,
  340. Handler: listCollaboratorsHandler,
  341. Router: r,
  342. })
  343. // GET /api/projects/{project_id}/roles -> project.NewRolesListHandler
  344. listRolesEndpoint := factory.NewAPIEndpoint(
  345. &types.APIRequestMetadata{
  346. Verb: types.APIVerbList,
  347. Method: types.HTTPVerbGet,
  348. Path: &types.Path{
  349. Parent: basePath,
  350. RelativePath: relPath + "/roles",
  351. },
  352. Scopes: []types.PermissionScope{
  353. types.UserScope,
  354. types.ProjectScope,
  355. },
  356. },
  357. )
  358. listRolesHandler := project.NewRolesListHandler(
  359. config,
  360. factory.GetResultWriter(),
  361. )
  362. routes = append(routes, &router.Route{
  363. Endpoint: listRolesEndpoint,
  364. Handler: listRolesHandler,
  365. Router: r,
  366. })
  367. // POST /api/projects/{project_id}/roles -> project.NewRoleUpdateHandler
  368. updateRoleEndpoint := factory.NewAPIEndpoint(
  369. &types.APIRequestMetadata{
  370. Verb: types.APIVerbUpdate,
  371. Method: types.HTTPVerbPost,
  372. Path: &types.Path{
  373. Parent: basePath,
  374. RelativePath: relPath + "/roles",
  375. },
  376. Scopes: []types.PermissionScope{
  377. types.UserScope,
  378. types.ProjectScope,
  379. },
  380. },
  381. )
  382. updateRoleHandler := project.NewRoleUpdateHandler(
  383. config,
  384. factory.GetDecoderValidator(),
  385. factory.GetResultWriter(),
  386. )
  387. routes = append(routes, &router.Route{
  388. Endpoint: updateRoleEndpoint,
  389. Handler: updateRoleHandler,
  390. Router: r,
  391. })
  392. // DELETE /api/projects/{project_id}/roles -> project.NewRoleDeleteHandler
  393. deleteRoleEndpoint := factory.NewAPIEndpoint(
  394. &types.APIRequestMetadata{
  395. Verb: types.APIVerbDelete,
  396. Method: types.HTTPVerbDelete,
  397. Path: &types.Path{
  398. Parent: basePath,
  399. RelativePath: relPath + "/roles",
  400. },
  401. Scopes: []types.PermissionScope{
  402. types.UserScope,
  403. types.ProjectScope,
  404. },
  405. },
  406. )
  407. deleteRoleHandler := project.NewRoleDeleteHandler(
  408. config,
  409. factory.GetDecoderValidator(),
  410. factory.GetResultWriter(),
  411. )
  412. routes = append(routes, &router.Route{
  413. Endpoint: deleteRoleEndpoint,
  414. Handler: deleteRoleHandler,
  415. Router: r,
  416. })
  417. // GET /api/projects/{project_id}/registries -> registry.NewRegistryListHandler
  418. listRegistriesEndpoint := factory.NewAPIEndpoint(
  419. &types.APIRequestMetadata{
  420. Verb: types.APIVerbList,
  421. Method: types.HTTPVerbGet,
  422. Path: &types.Path{
  423. Parent: basePath,
  424. RelativePath: relPath + "/registries",
  425. },
  426. Scopes: []types.PermissionScope{
  427. types.UserScope,
  428. types.ProjectScope,
  429. },
  430. },
  431. )
  432. listRegistriesHandler := registry.NewRegistryListHandler(
  433. config,
  434. factory.GetResultWriter(),
  435. )
  436. routes = append(routes, &router.Route{
  437. Endpoint: listRegistriesEndpoint,
  438. Handler: listRegistriesHandler,
  439. Router: r,
  440. })
  441. // POST /api/projects/{project_id}/registries -> registry.NewRegistryCreateHandler
  442. createRegistryEndpoint := factory.NewAPIEndpoint(
  443. &types.APIRequestMetadata{
  444. Verb: types.APIVerbCreate,
  445. Method: types.HTTPVerbPost,
  446. Path: &types.Path{
  447. Parent: basePath,
  448. RelativePath: relPath + "/registries",
  449. },
  450. Scopes: []types.PermissionScope{
  451. types.UserScope,
  452. types.ProjectScope,
  453. },
  454. },
  455. )
  456. createRegistryHandler := registry.NewRegistryCreateHandler(
  457. config,
  458. factory.GetDecoderValidator(),
  459. factory.GetResultWriter(),
  460. )
  461. routes = append(routes, &router.Route{
  462. Endpoint: createRegistryEndpoint,
  463. Handler: createRegistryHandler,
  464. Router: r,
  465. })
  466. // GET /api/projects/{project_id}/registries/ecr/token -> registry.NewRegistryGetECRTokenHandler
  467. getECRTokenEndpoint := factory.NewAPIEndpoint(
  468. &types.APIRequestMetadata{
  469. Verb: types.APIVerbGet,
  470. Method: types.HTTPVerbGet,
  471. Path: &types.Path{
  472. Parent: basePath,
  473. RelativePath: relPath + "/registries/ecr/token",
  474. },
  475. Scopes: []types.PermissionScope{
  476. types.UserScope,
  477. types.ProjectScope,
  478. },
  479. },
  480. )
  481. getECRTokenHandler := registry.NewRegistryGetECRTokenHandler(
  482. config,
  483. factory.GetDecoderValidator(),
  484. factory.GetResultWriter(),
  485. )
  486. routes = append(routes, &router.Route{
  487. Endpoint: getECRTokenEndpoint,
  488. Handler: getECRTokenHandler,
  489. Router: r,
  490. })
  491. // GET /api/projects/{project_id}/registries/docr/token -> registry.NewRegistryGetDOCRTokenHandler
  492. getDOCRTokenEndpoint := factory.NewAPIEndpoint(
  493. &types.APIRequestMetadata{
  494. Verb: types.APIVerbGet,
  495. Method: types.HTTPVerbGet,
  496. Path: &types.Path{
  497. Parent: basePath,
  498. RelativePath: relPath + "/registries/docr/token",
  499. },
  500. Scopes: []types.PermissionScope{
  501. types.UserScope,
  502. types.ProjectScope,
  503. },
  504. },
  505. )
  506. getDOCRTokenHandler := registry.NewRegistryGetDOCRTokenHandler(
  507. config,
  508. factory.GetDecoderValidator(),
  509. factory.GetResultWriter(),
  510. )
  511. routes = append(routes, &router.Route{
  512. Endpoint: getDOCRTokenEndpoint,
  513. Handler: getDOCRTokenHandler,
  514. Router: r,
  515. })
  516. // GET /api/projects/{project_id}/registries/gcr/token -> registry.NewRegistryGetGCRTokenHandler
  517. getGCRTokenEndpoint := factory.NewAPIEndpoint(
  518. &types.APIRequestMetadata{
  519. Verb: types.APIVerbGet,
  520. Method: types.HTTPVerbGet,
  521. Path: &types.Path{
  522. Parent: basePath,
  523. RelativePath: relPath + "/registries/gcr/token",
  524. },
  525. Scopes: []types.PermissionScope{
  526. types.UserScope,
  527. types.ProjectScope,
  528. },
  529. },
  530. )
  531. getGCRTokenHandler := registry.NewRegistryGetGCRTokenHandler(
  532. config,
  533. factory.GetDecoderValidator(),
  534. factory.GetResultWriter(),
  535. )
  536. routes = append(routes, &router.Route{
  537. Endpoint: getGCRTokenEndpoint,
  538. Handler: getGCRTokenHandler,
  539. Router: r,
  540. })
  541. // GET /api/projects/{project_id}/registries/gar/token -> registry.NewRegistryGetGARTokenHandler
  542. getGARTokenEndpoint := factory.NewAPIEndpoint(
  543. &types.APIRequestMetadata{
  544. Verb: types.APIVerbGet,
  545. Method: types.HTTPVerbGet,
  546. Path: &types.Path{
  547. Parent: basePath,
  548. RelativePath: relPath + "/registries/gar/token",
  549. },
  550. Scopes: []types.PermissionScope{
  551. types.UserScope,
  552. types.ProjectScope,
  553. },
  554. },
  555. )
  556. getGARTokenHandler := registry.NewRegistryGetGARTokenHandler(
  557. config,
  558. factory.GetDecoderValidator(),
  559. factory.GetResultWriter(),
  560. )
  561. routes = append(routes, &router.Route{
  562. Endpoint: getGARTokenEndpoint,
  563. Handler: getGARTokenHandler,
  564. Router: r,
  565. })
  566. // GET /api/projects/{project_id}/registries/acr/token -> registry.NewRegistryGetACRTokenHandler
  567. getACRTokenEndpoint := factory.NewAPIEndpoint(
  568. &types.APIRequestMetadata{
  569. Verb: types.APIVerbGet,
  570. Method: types.HTTPVerbGet,
  571. Path: &types.Path{
  572. Parent: basePath,
  573. RelativePath: relPath + "/registries/acr/token",
  574. },
  575. Scopes: []types.PermissionScope{
  576. types.UserScope,
  577. types.ProjectScope,
  578. },
  579. },
  580. )
  581. getACRTokenHandler := registry.NewRegistryGetACRTokenHandler(
  582. config,
  583. factory.GetDecoderValidator(),
  584. factory.GetResultWriter(),
  585. )
  586. routes = append(routes, &router.Route{
  587. Endpoint: getACRTokenEndpoint,
  588. Handler: getACRTokenHandler,
  589. Router: r,
  590. })
  591. // GET /api/projects/{project_id}/registries/dockerhub/token -> registry.NewRegistryGetDockerhubTokenHandler
  592. getDockerhubTokenEndpoint := factory.NewAPIEndpoint(
  593. &types.APIRequestMetadata{
  594. Verb: types.APIVerbGet,
  595. Method: types.HTTPVerbGet,
  596. Path: &types.Path{
  597. Parent: basePath,
  598. RelativePath: relPath + "/registries/dockerhub/token",
  599. },
  600. Scopes: []types.PermissionScope{
  601. types.UserScope,
  602. types.ProjectScope,
  603. },
  604. },
  605. )
  606. getDockerhubTokenHandler := registry.NewRegistryGetDockerhubTokenHandler(
  607. config,
  608. factory.GetDecoderValidator(),
  609. factory.GetResultWriter(),
  610. )
  611. routes = append(routes, &router.Route{
  612. Endpoint: getDockerhubTokenEndpoint,
  613. Handler: getDockerhubTokenHandler,
  614. Router: r,
  615. })
  616. // POST /api/projects/{project_id}/infras -> infra.NewInfraCreateHandler
  617. createInfraEndpoint := factory.NewAPIEndpoint(
  618. &types.APIRequestMetadata{
  619. Verb: types.APIVerbCreate,
  620. Method: types.HTTPVerbPost,
  621. Path: &types.Path{
  622. Parent: basePath,
  623. RelativePath: relPath + "/infras",
  624. },
  625. Scopes: []types.PermissionScope{
  626. types.UserScope,
  627. types.ProjectScope,
  628. },
  629. },
  630. )
  631. createInfraHandler := infra.NewInfraCreateHandler(
  632. config,
  633. factory.GetDecoderValidator(),
  634. factory.GetResultWriter(),
  635. )
  636. routes = append(routes, &router.Route{
  637. Endpoint: createInfraEndpoint,
  638. Handler: createInfraHandler,
  639. Router: r,
  640. })
  641. // GET /api/projects/{project_id}/infras/templates -> infra.NewInfraGetHandler
  642. getTemplatesEndpoint := factory.NewAPIEndpoint(
  643. &types.APIRequestMetadata{
  644. Verb: types.APIVerbGet,
  645. Method: types.HTTPVerbGet,
  646. Path: &types.Path{
  647. Parent: basePath,
  648. RelativePath: relPath + "/infras/templates",
  649. },
  650. Scopes: []types.PermissionScope{
  651. types.UserScope,
  652. types.ProjectScope,
  653. },
  654. },
  655. )
  656. getTemplatesHandler := infra.NewInfraListTemplateHandler(
  657. config,
  658. factory.GetResultWriter(),
  659. )
  660. routes = append(routes, &router.Route{
  661. Endpoint: getTemplatesEndpoint,
  662. Handler: getTemplatesHandler,
  663. Router: r,
  664. })
  665. // GET /api/projects/{project_id}/infras/templates -> infra.NewInfraGetHandler
  666. getTemplateEndpoint := factory.NewAPIEndpoint(
  667. &types.APIRequestMetadata{
  668. Verb: types.APIVerbGet,
  669. Method: types.HTTPVerbGet,
  670. Path: &types.Path{
  671. Parent: basePath,
  672. RelativePath: fmt.Sprintf("%s/infras/templates/{%s}/{%s}", relPath, types.URLParamTemplateName, types.URLParamTemplateVersion),
  673. },
  674. Scopes: []types.PermissionScope{
  675. types.UserScope,
  676. types.ProjectScope,
  677. },
  678. },
  679. )
  680. getTemplateHandler := infra.NewInfraGetTemplateHandler(
  681. config,
  682. factory.GetResultWriter(),
  683. )
  684. routes = append(routes, &router.Route{
  685. Endpoint: getTemplateEndpoint,
  686. Handler: getTemplateHandler,
  687. Router: r,
  688. })
  689. // // POST /api/projects/{project_id}/provision/ecr -> provision.NewProvisionECRHandler
  690. // provisionECREndpoint := factory.NewAPIEndpoint(
  691. // &types.APIRequestMetadata{
  692. // Verb: types.APIVerbCreate,
  693. // Method: types.HTTPVerbPost,
  694. // Path: &types.Path{
  695. // Parent: basePath,
  696. // RelativePath: relPath + "/provision/ecr",
  697. // },
  698. // Scopes: []types.PermissionScope{
  699. // types.UserScope,
  700. // types.ProjectScope,
  701. // },
  702. // },
  703. // )
  704. // provisionECRHandler := provision.NewProvisionECRHandler(
  705. // config,
  706. // factory.GetDecoderValidator(),
  707. // factory.GetResultWriter(),
  708. // )
  709. // routes = append(routes, &router.Route{
  710. // Endpoint: provisionECREndpoint,
  711. // Handler: provisionECRHandler,
  712. // Router: r,
  713. // })
  714. // // POST /api/projects/{project_id}/provision/eks -> provision.NewProvisionEKSHandler
  715. // provisionEKSEndpoint := factory.NewAPIEndpoint(
  716. // &types.APIRequestMetadata{
  717. // Verb: types.APIVerbCreate,
  718. // Method: types.HTTPVerbPost,
  719. // Path: &types.Path{
  720. // Parent: basePath,
  721. // RelativePath: relPath + "/provision/eks",
  722. // },
  723. // Scopes: []types.PermissionScope{
  724. // types.UserScope,
  725. // types.ProjectScope,
  726. // },
  727. // CheckUsage: true,
  728. // UsageMetric: types.Clusters,
  729. // },
  730. // )
  731. // provisionEKSHandler := provision.NewProvisionEKSHandler(
  732. // config,
  733. // factory.GetDecoderValidator(),
  734. // factory.GetResultWriter(),
  735. // )
  736. // routes = append(routes, &router.Route{
  737. // Endpoint: provisionEKSEndpoint,
  738. // Handler: provisionEKSHandler,
  739. // Router: r,
  740. // })
  741. // // POST /api/projects/{project_id}/provision/docr -> provision.NewProvisionDOCRHandler
  742. // provisionDOCREndpoint := factory.NewAPIEndpoint(
  743. // &types.APIRequestMetadata{
  744. // Verb: types.APIVerbCreate,
  745. // Method: types.HTTPVerbPost,
  746. // Path: &types.Path{
  747. // Parent: basePath,
  748. // RelativePath: relPath + "/provision/docr",
  749. // },
  750. // Scopes: []types.PermissionScope{
  751. // types.UserScope,
  752. // types.ProjectScope,
  753. // },
  754. // },
  755. // )
  756. // provisionDOCRHandler := provision.NewProvisionDOCRHandler(
  757. // config,
  758. // factory.GetDecoderValidator(),
  759. // factory.GetResultWriter(),
  760. // )
  761. // routes = append(routes, &router.Route{
  762. // Endpoint: provisionDOCREndpoint,
  763. // Handler: provisionDOCRHandler,
  764. // Router: r,
  765. // })
  766. // // POST /api/projects/{project_id}/provision/doks -> provision.NewProvisionDOKSHandler
  767. // provisionDOKSEndpoint := factory.NewAPIEndpoint(
  768. // &types.APIRequestMetadata{
  769. // Verb: types.APIVerbCreate,
  770. // Method: types.HTTPVerbPost,
  771. // Path: &types.Path{
  772. // Parent: basePath,
  773. // RelativePath: relPath + "/provision/doks",
  774. // },
  775. // Scopes: []types.PermissionScope{
  776. // types.UserScope,
  777. // types.ProjectScope,
  778. // },
  779. // CheckUsage: true,
  780. // UsageMetric: types.Clusters,
  781. // },
  782. // )
  783. // provisionDOKSHandler := provision.NewProvisionDOKSHandler(
  784. // config,
  785. // factory.GetDecoderValidator(),
  786. // factory.GetResultWriter(),
  787. // )
  788. // routes = append(routes, &router.Route{
  789. // Endpoint: provisionDOKSEndpoint,
  790. // Handler: provisionDOKSHandler,
  791. // Router: r,
  792. // })
  793. // // POST /api/projects/{project_id}/provision/gcr -> provision.NewProvisionGCRHandler
  794. // provisionGCREndpoint := factory.NewAPIEndpoint(
  795. // &types.APIRequestMetadata{
  796. // Verb: types.APIVerbCreate,
  797. // Method: types.HTTPVerbPost,
  798. // Path: &types.Path{
  799. // Parent: basePath,
  800. // RelativePath: relPath + "/provision/gcr",
  801. // },
  802. // Scopes: []types.PermissionScope{
  803. // types.UserScope,
  804. // types.ProjectScope,
  805. // },
  806. // },
  807. // )
  808. // provisionGCRHandler := provision.NewProvisionGCRHandler(
  809. // config,
  810. // factory.GetDecoderValidator(),
  811. // factory.GetResultWriter(),
  812. // )
  813. // routes = append(routes, &router.Route{
  814. // Endpoint: provisionGCREndpoint,
  815. // Handler: provisionGCRHandler,
  816. // Router: r,
  817. // })
  818. // // POST /api/projects/{project_id}/provision/gke -> provision.NewProvisionGKEHandler
  819. // provisionGKEEndpoint := factory.NewAPIEndpoint(
  820. // &types.APIRequestMetadata{
  821. // Verb: types.APIVerbCreate,
  822. // Method: types.HTTPVerbPost,
  823. // Path: &types.Path{
  824. // Parent: basePath,
  825. // RelativePath: relPath + "/provision/gke",
  826. // },
  827. // Scopes: []types.PermissionScope{
  828. // types.UserScope,
  829. // types.ProjectScope,
  830. // },
  831. // CheckUsage: true,
  832. // UsageMetric: types.Clusters,
  833. // },
  834. // )
  835. // provisionGKEHandler := provision.NewProvisionGKEHandler(
  836. // config,
  837. // factory.GetDecoderValidator(),
  838. // factory.GetResultWriter(),
  839. // )
  840. // routes = append(routes, &router.Route{
  841. // Endpoint: provisionGKEEndpoint,
  842. // Handler: provisionGKEHandler,
  843. // Router: r,
  844. // })
  845. // POST /api/projects/{project_id}/policy -> policy.NewPolicyCreateHandler
  846. policyCreateEndpoint := factory.NewAPIEndpoint(
  847. &types.APIRequestMetadata{
  848. Verb: types.APIVerbCreate,
  849. Method: types.HTTPVerbPost,
  850. Path: &types.Path{
  851. Parent: basePath,
  852. RelativePath: relPath + "/policy",
  853. },
  854. Scopes: []types.PermissionScope{
  855. types.UserScope,
  856. types.ProjectScope,
  857. types.SettingsScope,
  858. },
  859. },
  860. )
  861. policyCreateHandler := policy.NewPolicyCreateHandler(
  862. config,
  863. factory.GetDecoderValidator(),
  864. factory.GetResultWriter(),
  865. )
  866. routes = append(routes, &router.Route{
  867. Endpoint: policyCreateEndpoint,
  868. Handler: policyCreateHandler,
  869. Router: r,
  870. })
  871. // GET /api/projects/{project_id}/policies -> policy.NewPolicyListHandler
  872. policyListEndpoint := factory.NewAPIEndpoint(
  873. &types.APIRequestMetadata{
  874. Verb: types.APIVerbList,
  875. Method: types.HTTPVerbGet,
  876. Path: &types.Path{
  877. Parent: basePath,
  878. RelativePath: relPath + "/policies",
  879. },
  880. Scopes: []types.PermissionScope{
  881. types.UserScope,
  882. types.ProjectScope,
  883. types.SettingsScope,
  884. },
  885. },
  886. )
  887. policyListHandler := policy.NewPolicyListHandler(
  888. config,
  889. factory.GetDecoderValidator(),
  890. factory.GetResultWriter(),
  891. )
  892. routes = append(routes, &router.Route{
  893. Endpoint: policyListEndpoint,
  894. Handler: policyListHandler,
  895. Router: r,
  896. })
  897. // GET /api/projects/{project_id}/policy/{policy_id} -> policy.NewPolicyGetHandler
  898. policyGetEndpoint := factory.NewAPIEndpoint(
  899. &types.APIRequestMetadata{
  900. Verb: types.APIVerbGet,
  901. Method: types.HTTPVerbGet,
  902. Path: &types.Path{
  903. Parent: basePath,
  904. RelativePath: fmt.Sprintf("%s/policy/{%s}", relPath, types.URLParamPolicyID),
  905. },
  906. Scopes: []types.PermissionScope{
  907. types.UserScope,
  908. types.ProjectScope,
  909. types.SettingsScope,
  910. },
  911. },
  912. )
  913. policyGetHandler := policy.NewPolicyGetHandler(
  914. config,
  915. factory.GetDecoderValidator(),
  916. factory.GetResultWriter(),
  917. )
  918. routes = append(routes, &router.Route{
  919. Endpoint: policyGetEndpoint,
  920. Handler: policyGetHandler,
  921. Router: r,
  922. })
  923. // POST /api/projects/{project_id}/api_token -> api_token.NewAPITokenCreateHandler
  924. apiTokenCreateEndpoint := factory.NewAPIEndpoint(
  925. &types.APIRequestMetadata{
  926. Verb: types.APIVerbCreate,
  927. Method: types.HTTPVerbPost,
  928. Path: &types.Path{
  929. Parent: basePath,
  930. RelativePath: relPath + "/api_token",
  931. },
  932. Scopes: []types.PermissionScope{
  933. types.UserScope,
  934. types.ProjectScope,
  935. types.SettingsScope,
  936. },
  937. },
  938. )
  939. apiTokenCreateHandler := api_token.NewAPITokenCreateHandler(
  940. config,
  941. factory.GetDecoderValidator(),
  942. factory.GetResultWriter(),
  943. )
  944. routes = append(routes, &router.Route{
  945. Endpoint: apiTokenCreateEndpoint,
  946. Handler: apiTokenCreateHandler,
  947. Router: r,
  948. })
  949. // GET /api/projects/{project_id}/api_token -> api_token.NewAPITokenListHandler
  950. apiTokenListEndpoint := factory.NewAPIEndpoint(
  951. &types.APIRequestMetadata{
  952. Verb: types.APIVerbList,
  953. Method: types.HTTPVerbGet,
  954. Path: &types.Path{
  955. Parent: basePath,
  956. RelativePath: fmt.Sprintf("%s/api_token", relPath),
  957. },
  958. Scopes: []types.PermissionScope{
  959. types.UserScope,
  960. types.ProjectScope,
  961. types.SettingsScope,
  962. },
  963. },
  964. )
  965. apiTokenListHandler := api_token.NewAPITokenListHandler(
  966. config,
  967. factory.GetDecoderValidator(),
  968. factory.GetResultWriter(),
  969. )
  970. routes = append(routes, &router.Route{
  971. Endpoint: apiTokenListEndpoint,
  972. Handler: apiTokenListHandler,
  973. Router: r,
  974. })
  975. // GET /api/projects/{project_id}/api_token/{api_token_id} -> api_token.NewAPITokenGetHandler
  976. apiTokenGetEndpoint := factory.NewAPIEndpoint(
  977. &types.APIRequestMetadata{
  978. Verb: types.APIVerbGet,
  979. Method: types.HTTPVerbGet,
  980. Path: &types.Path{
  981. Parent: basePath,
  982. RelativePath: fmt.Sprintf("%s/api_token/{%s}", relPath, types.URLParamTokenID),
  983. },
  984. Scopes: []types.PermissionScope{
  985. types.UserScope,
  986. types.ProjectScope,
  987. types.SettingsScope,
  988. },
  989. },
  990. )
  991. apiTokenGetHandler := api_token.NewAPITokenGetHandler(
  992. config,
  993. factory.GetDecoderValidator(),
  994. factory.GetResultWriter(),
  995. )
  996. routes = append(routes, &router.Route{
  997. Endpoint: apiTokenGetEndpoint,
  998. Handler: apiTokenGetHandler,
  999. Router: r,
  1000. })
  1001. // POST /api/projects/{project_id}/api_token/{api_token_id}/revoke -> api_token.NewAPITokenRevokeHandler
  1002. apiTokenRevokeEndpoint := factory.NewAPIEndpoint(
  1003. &types.APIRequestMetadata{
  1004. Verb: types.APIVerbUpdate,
  1005. Method: types.HTTPVerbPost,
  1006. Path: &types.Path{
  1007. Parent: basePath,
  1008. RelativePath: fmt.Sprintf("%s/api_token/{%s}/revoke", relPath, types.URLParamTokenID),
  1009. },
  1010. Scopes: []types.PermissionScope{
  1011. types.UserScope,
  1012. types.ProjectScope,
  1013. types.SettingsScope,
  1014. },
  1015. },
  1016. )
  1017. apiTokenRevokeHandler := api_token.NewAPITokenRevokeHandler(
  1018. config,
  1019. factory.GetDecoderValidator(),
  1020. factory.GetResultWriter(),
  1021. )
  1022. routes = append(routes, &router.Route{
  1023. Endpoint: apiTokenRevokeEndpoint,
  1024. Handler: apiTokenRevokeHandler,
  1025. Router: r,
  1026. })
  1027. // POST /api/projects/{project_id}/helmrepos -> helmrepo.NewHelmRepoCreateHandler
  1028. hrCreateEndpoint := factory.NewAPIEndpoint(
  1029. &types.APIRequestMetadata{
  1030. Verb: types.APIVerbCreate,
  1031. Method: types.HTTPVerbPost,
  1032. Path: &types.Path{
  1033. Parent: basePath,
  1034. RelativePath: relPath + "/helmrepos",
  1035. },
  1036. Scopes: []types.PermissionScope{
  1037. types.UserScope,
  1038. types.ProjectScope,
  1039. },
  1040. },
  1041. )
  1042. hrCreateHandler := helmrepo.NewHelmRepoCreateHandler(
  1043. config,
  1044. factory.GetDecoderValidator(),
  1045. factory.GetResultWriter(),
  1046. )
  1047. routes = append(routes, &router.Route{
  1048. Endpoint: hrCreateEndpoint,
  1049. Handler: hrCreateHandler,
  1050. Router: r,
  1051. })
  1052. // GET /api/projects/{project_id}/helmrepos -> helmrepo.NewHelmRepoListHandler
  1053. hrListEndpoint := factory.NewAPIEndpoint(
  1054. &types.APIRequestMetadata{
  1055. Verb: types.APIVerbList,
  1056. Method: types.HTTPVerbGet,
  1057. Path: &types.Path{
  1058. Parent: basePath,
  1059. RelativePath: relPath + "/helmrepos",
  1060. },
  1061. Scopes: []types.PermissionScope{
  1062. types.UserScope,
  1063. types.ProjectScope,
  1064. },
  1065. },
  1066. )
  1067. hrListHandler := helmrepo.NewHelmRepoListHandler(
  1068. config,
  1069. factory.GetResultWriter(),
  1070. )
  1071. routes = append(routes, &router.Route{
  1072. Endpoint: hrListEndpoint,
  1073. Handler: hrListHandler,
  1074. Router: r,
  1075. })
  1076. // GET /api/projects/{project_id}/tags -> project.NewGetTagsHandler
  1077. getTagsEndpoint := factory.NewAPIEndpoint(
  1078. &types.APIRequestMetadata{
  1079. Verb: types.APIVerbGet,
  1080. Method: types.HTTPVerbGet,
  1081. Path: &types.Path{
  1082. Parent: basePath,
  1083. RelativePath: relPath + "/tags",
  1084. },
  1085. Scopes: []types.PermissionScope{
  1086. types.UserScope,
  1087. types.ProjectScope,
  1088. },
  1089. },
  1090. )
  1091. getTagsHandler := project.NewGetTagsHandler(
  1092. config,
  1093. factory.GetResultWriter(),
  1094. )
  1095. routes = append(routes, &router.Route{
  1096. Endpoint: getTagsEndpoint,
  1097. Handler: getTagsHandler,
  1098. Router: r,
  1099. })
  1100. // POST /api/projects/{project_id}/tags -> project.NewCreateTagHandler
  1101. createTagEndpoint := factory.NewAPIEndpoint(
  1102. &types.APIRequestMetadata{
  1103. Verb: types.APIVerbCreate,
  1104. Method: types.HTTPVerbPost,
  1105. Path: &types.Path{
  1106. Parent: basePath,
  1107. RelativePath: relPath + "/tags",
  1108. },
  1109. Scopes: []types.PermissionScope{
  1110. types.UserScope,
  1111. types.ProjectScope,
  1112. },
  1113. },
  1114. )
  1115. createTagHandler := project.NewCreateTagHandler(
  1116. config,
  1117. factory.GetDecoderValidator(),
  1118. factory.GetResultWriter(),
  1119. )
  1120. routes = append(routes, &router.Route{
  1121. Endpoint: createTagEndpoint,
  1122. Handler: createTagHandler,
  1123. Router: r,
  1124. })
  1125. // POST /api/projects/{project_id}/contract -> apiContract.NewAPIContractUpdateHandler
  1126. updateAPIContractEndpoint := factory.NewAPIEndpoint(
  1127. &types.APIRequestMetadata{
  1128. Verb: types.APIVerbCreate,
  1129. Method: types.HTTPVerbPost,
  1130. Path: &types.Path{
  1131. Parent: basePath,
  1132. RelativePath: relPath + "/contract",
  1133. },
  1134. Scopes: []types.PermissionScope{
  1135. types.UserScope,
  1136. types.ProjectScope,
  1137. },
  1138. },
  1139. )
  1140. updateAPIContractHandler := apiContract.NewAPIContractUpdateHandler(
  1141. config,
  1142. factory.GetDecoderValidator(),
  1143. factory.GetResultWriter(),
  1144. )
  1145. routes = append(routes, &router.Route{
  1146. Endpoint: updateAPIContractEndpoint,
  1147. Handler: updateAPIContractHandler,
  1148. Router: r,
  1149. })
  1150. // GET /api/projects/{project_id}/contracts -> apiContract.NewAPIContractRevisionListHandler
  1151. listAPIContractRevisionsEndpoint := factory.NewAPIEndpoint(
  1152. &types.APIRequestMetadata{
  1153. Verb: types.APIVerbGet,
  1154. Method: types.HTTPVerbGet,
  1155. Path: &types.Path{
  1156. Parent: basePath,
  1157. RelativePath: relPath + "/contracts",
  1158. },
  1159. Scopes: []types.PermissionScope{
  1160. types.UserScope,
  1161. types.ProjectScope,
  1162. },
  1163. },
  1164. )
  1165. listAPIContractRevisionHandler := apiContract.NewAPIContractRevisionListHandler(
  1166. config,
  1167. factory.GetDecoderValidator(),
  1168. factory.GetResultWriter(),
  1169. )
  1170. routes = append(routes, &router.Route{
  1171. Endpoint: listAPIContractRevisionsEndpoint,
  1172. Handler: listAPIContractRevisionHandler,
  1173. Router: r,
  1174. })
  1175. // DELETE /api/projects/{project_id}/contracts/{revision_id} -> apiContract.NewAPIContractUpdateHandler
  1176. deleteAPIContractRevisionsEndpoint := factory.NewAPIEndpoint(
  1177. &types.APIRequestMetadata{
  1178. Verb: types.APIVerbDelete,
  1179. Method: types.HTTPVerbDelete,
  1180. Path: &types.Path{
  1181. Parent: basePath,
  1182. RelativePath: fmt.Sprintf("%s/contracts/{%s}", relPath, types.URLParamAPIContractRevisionID),
  1183. },
  1184. Scopes: []types.PermissionScope{
  1185. types.UserScope,
  1186. types.ProjectScope,
  1187. types.APIContractRevisionScope,
  1188. },
  1189. },
  1190. )
  1191. deleteAPIContractRevisionHandler := apiContract.NewAPIContractRevisionDeleteHandler(
  1192. config,
  1193. factory.GetDecoderValidator(),
  1194. factory.GetResultWriter(),
  1195. )
  1196. routes = append(routes, &router.Route{
  1197. Endpoint: deleteAPIContractRevisionsEndpoint,
  1198. Handler: deleteAPIContractRevisionHandler,
  1199. Router: r,
  1200. })
  1201. return routes, newPath
  1202. }