From 45eafb4b0833e4e2b511c92da51f958b19c6a70b Mon Sep 17 00:00:00 2001 From: Payton Burdette Date: Wed, 1 Feb 2023 10:37:05 -0500 Subject: [PATCH 1/3] Add inbound token access feature Add ability to manage which projects can access your project with a ci job token. Behind feature flag. --- .../components/inbound_token_access.vue | 260 ++++++++++++++++++ ...n_access.vue => outbound_token_access.vue} | 30 +- .../components/token_access_app.vue | 27 ++ .../components/token_projects_table.vue | 29 +- ...roject_ci_job_token_scope.mutation.graphql | 7 + ...roject_ci_job_token_scope.mutation.graphql | 7 + ...update_ci_job_token_scope.mutation.graphql | 8 + ...bound_get_ci_job_token_scope.query.graphql | 8 + ...ects_with_ci_job_token_scope.query.graphql | 18 ++ app/assets/javascripts/token_access/index.js | 4 +- .../projects/settings/ci_cd_controller.rb | 1 + locale/gitlab.pot | 21 +- spec/frontend/token_access/mock_data.js | 15 + ..._spec.js => outbound_token_access_spec.js} | 25 +- .../token_access/token_access_app_spec.js | 47 ++++ .../token_access/token_projects_table_spec.js | 7 +- 16 files changed, 454 insertions(+), 60 deletions(-) create mode 100644 app/assets/javascripts/token_access/components/inbound_token_access.vue rename app/assets/javascripts/token_access/components/{token_access.vue => outbound_token_access.vue} (91%) create mode 100644 app/assets/javascripts/token_access/components/token_access_app.vue create mode 100644 app/assets/javascripts/token_access/graphql/mutations/inbound_add_project_ci_job_token_scope.mutation.graphql create mode 100644 app/assets/javascripts/token_access/graphql/mutations/inbound_remove_project_ci_job_token_scope.mutation.graphql create mode 100644 app/assets/javascripts/token_access/graphql/mutations/inbound_update_ci_job_token_scope.mutation.graphql create mode 100644 app/assets/javascripts/token_access/graphql/queries/inbound_get_ci_job_token_scope.query.graphql create mode 100644 app/assets/javascripts/token_access/graphql/queries/inbound_get_projects_with_ci_job_token_scope.query.graphql rename spec/frontend/token_access/{token_access_spec.js => outbound_token_access_spec.js} (92%) create mode 100644 spec/frontend/token_access/token_access_app_spec.js diff --git a/app/assets/javascripts/token_access/components/inbound_token_access.vue b/app/assets/javascripts/token_access/components/inbound_token_access.vue new file mode 100644 index 00000000000000..b247d1b7992933 --- /dev/null +++ b/app/assets/javascripts/token_access/components/inbound_token_access.vue @@ -0,0 +1,260 @@ + + diff --git a/app/assets/javascripts/token_access/components/token_access.vue b/app/assets/javascripts/token_access/components/outbound_token_access.vue similarity index 91% rename from app/assets/javascripts/token_access/components/token_access.vue rename to app/assets/javascripts/token_access/components/outbound_token_access.vue index 527f01f0a6fdc8..47ec0910a7bd00 100644 --- a/app/assets/javascripts/token_access/components/token_access.vue +++ b/app/assets/javascripts/token_access/components/outbound_token_access.vue @@ -17,7 +17,6 @@ import removeProjectCIJobTokenScopeMutation from '../graphql/mutations/remove_pr import updateCIJobTokenScopeMutation from '../graphql/mutations/update_ci_job_token_scope.mutation.graphql'; import getCIJobTokenScopeQuery from '../graphql/queries/get_ci_job_token_scope.query.graphql'; import getProjectsWithCIJobTokenScopeQuery from '../graphql/queries/get_projects_with_ci_job_token_scope.query.graphql'; -import OptInJwt from './opt_in_jwt.vue'; import TokenProjectsTable from './token_projects_table.vue'; export default { @@ -36,6 +35,27 @@ export default { projectsFetchError: __('There was a problem fetching the projects'), scopeFetchError: __('There was a problem fetching the job token scope value'), }, + fields: [ + { + key: 'project', + label: __('Project that can be accessed'), + thClass: 'gl-border-t-none!', + columnClass: 'gl-w-40p', + }, + { + key: 'namespace', + label: __('Namespace'), + thClass: 'gl-border-t-none!', + columnClass: 'gl-w-40p', + }, + { + key: 'actions', + label: '', + tdClass: 'gl-text-right', + thClass: 'gl-border-t-none!', + columnClass: 'gl-w-10p', + }, + ], components: { GlAlert, GlButton, @@ -45,7 +65,6 @@ export default { GlLoadingIcon, GlSprintf, GlToggle, - OptInJwt, TokenProjectsTable, }, inject: { @@ -230,9 +249,12 @@ export default { > {{ $options.i18n.settingDisabledMessage }} - + - diff --git a/app/assets/javascripts/token_access/components/token_access_app.vue b/app/assets/javascripts/token_access/components/token_access_app.vue new file mode 100644 index 00000000000000..410a6267dc89b4 --- /dev/null +++ b/app/assets/javascripts/token_access/components/token_access_app.vue @@ -0,0 +1,27 @@ + + diff --git a/app/assets/javascripts/token_access/components/token_projects_table.vue b/app/assets/javascripts/token_access/components/token_projects_table.vue index ce33478cbeecee..c00dd8828955d3 100644 --- a/app/assets/javascripts/token_access/components/token_projects_table.vue +++ b/app/assets/javascripts/token_access/components/token_projects_table.vue @@ -1,32 +1,11 @@