Skip to content
Snippets Groups Projects
Commit 2f9f3e28 authored by Sanad Liaquat's avatar Sanad Liaquat Committed by GitLab Release Tools Bot
Browse files

Merge branch 'qa-script-for-personal-access-token-cleanup' into 'master'

Add script to revoke personal access tokens

See merge request gitlab-org/gitlab-ce!24318

(cherry picked from commit 66c1141c)

88189d31 Add script to revoke personal access tokens
ffb17a3b Use qa element with wait
7643a872 Created some more qa elements
parent c7fd72a5
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -6,7 +6,7 @@
= container_title
.form-group
.input-group
= text_field_tag 'created-personal-access-token', new_token_value, readonly: true, class: "form-control js-select-on-focus", 'aria-describedby' => "created-token-help-block"
= text_field_tag 'created-personal-access-token', new_token_value, readonly: true, class: "qa-created-personal-access-token form-control js-select-on-focus", 'aria-describedby' => "created-token-help-block"
%span.input-group-append
= clipboard_button(text: new_token_value, title: clipboard_button_title, placement: "left", class: "input-group-text btn-default btn-clipboard")
%span#created-token-help-block.form-text.text-muted.text-danger Make sure you save it - you won't be able to access it again.
Loading
Loading
Loading
Loading
@@ -12,7 +12,7 @@
.row
.form-group.col-md-6
= f.label :name, class: 'label-bold'
= f.text_field :name, class: "form-control", required: true
= f.text_field :name, class: "form-control qa-personal-access-token-name-field", required: true
 
.row
.form-group.col-md-6
Loading
Loading
@@ -26,4 +26,4 @@
= render 'shared/tokens/scopes_form', prefix: 'personal_access_token', token: token, scopes: scopes
 
.prepend-top-default
= f.submit "Create #{type} token", class: "btn btn-success"
= f.submit "Create #{type} token", class: "btn btn-success qa-create-token-button"
Loading
Loading
@@ -29,7 +29,7 @@
%span.token-never-expires-label Never
%td= token.scopes.present? ? token.scopes.join(", ") : "<no scopes selected>"
- path = impersonation ? revoke_admin_user_impersonation_token_path(token.user, token) : revoke_profile_personal_access_token_path(token)
%td= link_to "Revoke", path, method: :put, class: "btn btn-danger float-right", data: { confirm: "Are you sure you want to revoke this #{type} Token? This action cannot be undone." }
%td= link_to "Revoke", path, method: :put, class: "btn btn-danger float-right qa-revoke-button", data: { confirm: "Are you sure you want to revoke this #{type} Token? This action cannot be undone." }
- else
.settings-message.text-center
This user has no active #{type} Tokens.
Loading
Loading
@@ -4,6 +4,6 @@
 
- scopes.each do |scope|
%fieldset.form-group.form-check
= check_box_tag "#{prefix}[scopes][]", scope, token.scopes.include?(scope), id: "#{prefix}_scopes_#{scope}", class: 'form-check-input'
= check_box_tag "#{prefix}[scopes][]", scope, token.scopes.include?(scope), id: "#{prefix}_scopes_#{scope}", class: "form-check-input qa-#{scope}-radio"
= label_tag ("#{prefix}_scopes_#{scope}"), scope, class: 'label-bold form-check-label'
.text-secondary= t scope, scope: [:doorkeeper, :scope_desc]
require_relative 'qa/tools/revoke_all_personal_access_tokens'
desc "Revokes all personal access tokens"
task :revoke_personal_access_tokens do
QA::Tools::RevokeAllPersonalAccessTokens.new.run
end
Loading
Loading
@@ -3,29 +3,51 @@ module QA
module Profile
class PersonalAccessTokens < Page::Base
view 'app/views/shared/_personal_access_tokens_form.html.haml' do
element :personal_access_token_name_field, 'text_field :name' # rubocop:disable QA/ElementWithPattern
element :create_token_button, 'submit "Create #{type} token"' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck
element :scopes_api_radios, "label :scopes" # rubocop:disable QA/ElementWithPattern
element :personal_access_token_name_field
element :create_token_button
end
view 'app/views/shared/tokens/_scopes_form.html.haml' do
element :api_radio, 'qa-#{scope}-radio' # rubocop:disable QA/ElementWithPattern, Lint/InterpolationCheck
end
 
view 'app/views/shared/_personal_access_tokens_created_container.html.haml' do
element :create_token_field, "text_field_tag 'created-personal-access-token'" # rubocop:disable QA/ElementWithPattern
element :created_personal_access_token
end
view 'app/views/shared/_personal_access_tokens_table.html.haml' do
element :revoke_button
end
 
def fill_token_name(name)
fill_in 'personal_access_token_name', with: name
fill_element(:personal_access_token_name_field, name)
end
 
def check_api
check 'personal_access_token_scopes_api'
check_element(:api_radio)
end
 
def create_token
click_on 'Create personal access token'
click_element(:create_token_button)
end
 
def created_access_token
page.find('#created-personal-access-token').value
find_element(:created_personal_access_token, wait: 30).value
end
def has_token_row_for_name?(token_name)
page.has_css?('tr', text: token_name, wait: 1.0)
end
def first_token_row_for_name(token_name)
page.find('tr', text: token_name, match: :first, wait: 1.0)
end
def revoke_first_token_with_name(token_name)
within first_token_row_for_name(token_name) do
accept_confirm do
click_element(:revoke_button)
end
end
end
end
end
Loading
Loading
# frozen_string_literal: true
require_relative '../../qa'
require 'net/protocol.rb'
# This script revokes all personal access tokens with the name of 'api-test-token' on the host specified by GITLAB_ADDRESS
# Required environment variables: GITLAB_USERNAME, GITLAB_PASSWORD and GITLAB_ADDRESS
# Run `rake revoke_personal_access_tokens`
module QA
module Tools
class RevokeAllPersonalAccessTokens
def run
do_run
rescue Net::ReadTimeout
STDOUT.puts 'Net::ReadTimeout during run. Trying again'
run
end
private
def do_run
raise ArgumentError, "Please provide GITLAB_USERNAME" unless ENV['GITLAB_USERNAME']
raise ArgumentError, "Please provide GITLAB_PASSWORD" unless ENV['GITLAB_PASSWORD']
raise ArgumentError, "Please provide GITLAB_ADDRESS" unless ENV['GITLAB_ADDRESS']
STDOUT.puts 'Running...'
Runtime::Browser.visit(ENV['GITLAB_ADDRESS'], Page::Main::Login)
Page::Main::Login.perform(&:sign_in_using_credentials)
Page::Main::Menu.perform(&:go_to_profile_settings)
Page::Profile::Menu.perform(&:click_access_tokens)
token_name = 'api-test-token'
Page::Profile::PersonalAccessTokens.perform do |page|
while page.has_token_row_for_name?(token_name)
page.revoke_first_token_with_name(token_name)
print "\e[32m.\e[0m"
end
end
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment