diff options
Diffstat (limited to 'app/controllers/settings/personal_access_tokens_controller.rb')
-rw-r--r-- | app/controllers/settings/personal_access_tokens_controller.rb | 53 |
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 |