summaryrefslogtreecommitdiff
path: root/app/controllers/settings/personal_access_tokens_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/settings/personal_access_tokens_controller.rb')
-rw-r--r--app/controllers/settings/personal_access_tokens_controller.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/app/controllers/settings/personal_access_tokens_controller.rb b/app/controllers/settings/personal_access_tokens_controller.rb
new file mode 100644
index 00000000000..a9cec61196e
--- /dev/null
+++ b/app/controllers/settings/personal_access_tokens_controller.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+class Settings::PersonalAccessTokensController < Settings::ApplicationController
+ def index
+ set_index_vars
+ @personal_access_token = finder.build
+ end
+
+ def create
+ @personal_access_token = finder.build(personal_access_token_params)
+
+ if @personal_access_token.save
+ PersonalAccessToken.redis_store!(current_user.id, @personal_access_token.token)
+ redirect_to settings_personal_access_tokens_path, notice: _("Your new personal access token has been created.")
+ else
+ set_index_vars
+ render :index
+ end
+ end
+
+ def revoke
+ @personal_access_token = finder.find(params[:id])
+
+ if @personal_access_token.revoke!
+ flash[:notice] = _("Revoked personal access token %{personal_access_token_name}!") % { personal_access_token_name: @personal_access_token.name }
+ else
+ flash[:alert] = _("Could not revoke personal access token %{personal_access_token_name}.") % { personal_access_token_name: @personal_access_token.name }
+ end
+
+ redirect_to settings_personal_access_tokens_path
+ end
+
+ private
+
+ def finder(options = {})
+ PersonalAccessTokensFinder.new({ user: current_user, impersonation: false }.merge(options))
+ end
+
+ def personal_access_token_params
+ params.require(:personal_access_token).permit(:name, :expires_at, scopes: [])
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def set_index_vars
+ @scopes = Gitlab::Auth.available_scopes_for(current_user)
+
+ @inactive_personal_access_tokens = finder(state: 'inactive').execute
+ @active_personal_access_tokens = finder(state: 'active').execute.order(:expires_at)
+
+ @new_personal_access_token = PersonalAccessToken.redis_getdel(current_user.id)
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+end