From b356ce7e12e8ffbf19754908ffad2660aec9a07c Mon Sep 17 00:00:00 2001 From: James Lopez Date: Tue, 21 Mar 2017 13:36:46 +0000 Subject: [PATCH] Add a rake task to reset all email and private tokens --- .../unreleased/feature-tokens-rake-task.yml | 4 ++ lib/tasks/tokens.rake | 38 +++++++++++++++++++ spec/tasks/tokens_spec.rb | 21 ++++++++++ 3 files changed, 63 insertions(+) create mode 100644 changelogs/unreleased/feature-tokens-rake-task.yml create mode 100644 lib/tasks/tokens.rake create mode 100644 spec/tasks/tokens_spec.rb diff --git a/changelogs/unreleased/feature-tokens-rake-task.yml b/changelogs/unreleased/feature-tokens-rake-task.yml new file mode 100644 index 00000000000..6c3845757db --- /dev/null +++ b/changelogs/unreleased/feature-tokens-rake-task.yml @@ -0,0 +1,4 @@ +--- +title: New rake task to reset all email and private tokens +merge_request: +author: diff --git a/lib/tasks/tokens.rake b/lib/tasks/tokens.rake new file mode 100644 index 00000000000..95735f43802 --- /dev/null +++ b/lib/tasks/tokens.rake @@ -0,0 +1,38 @@ +require_relative '../../app/models/concerns/token_authenticatable.rb' + +namespace :tokens do + desc "Reset all GitLab user auth tokens" + task reset_all_auth: :environment do + reset_all_users_token(:reset_authentication_token!) + end + + desc "Reset all GitLab email tokens" + task reset_all_email: :environment do + reset_all_users_token(:reset_incoming_email_token!) + end + + def reset_all_users_token(reset_token_method) + TmpUser.find_in_batches do |batch| + puts "Processing batch starting with user ID: #{batch.first.id}" + STDOUT.flush + + batch.each(&reset_token_method) + end + end +end + +class TmpUser < ActiveRecord::Base + include TokenAuthenticatable + + self.table_name = 'users' + + def reset_authentication_token! + write_new_token(:authentication_token) + save!(validate: false) + end + + def reset_incoming_email_token! + write_new_token(:incoming_email_token) + save!(validate: false) + end +end diff --git a/spec/tasks/tokens_spec.rb b/spec/tasks/tokens_spec.rb new file mode 100644 index 00000000000..19036c7677c --- /dev/null +++ b/spec/tasks/tokens_spec.rb @@ -0,0 +1,21 @@ +require 'rake_helper' + +describe 'tokens rake tasks' do + let!(:user) { create(:user) } + + before do + Rake.application.rake_require 'tasks/tokens' + end + + describe 'reset_all task' do + it 'invokes create_hooks task' do + expect { run_rake_task('tokens:reset_all_auth') }.to change { user.reload.authentication_token } + end + end + + describe 'reset_all_email task' do + it 'invokes create_hooks task' do + expect { run_rake_task('tokens:reset_all_email') }.to change { user.reload.incoming_email_token } + end + end +end