Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@gitlab.com>2017-03-21 16:36:46 +0300
committerSean McGivern <sean@mcgivern.me.uk>2017-03-21 16:36:46 +0300
commitb356ce7e12e8ffbf19754908ffad2660aec9a07c (patch)
tree08583cf41c66c52be9ac42cf3adcb66a09f6a888
parent4ebc62391dea489935af80291363d76e67a64336 (diff)
Add a rake task to reset all email and private tokens
-rw-r--r--changelogs/unreleased/feature-tokens-rake-task.yml4
-rw-r--r--lib/tasks/tokens.rake38
-rw-r--r--spec/tasks/tokens_spec.rb21
3 files changed, 63 insertions, 0 deletions
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