diff --git a/app/models/user.rb b/app/models/user.rb index a3d2449d2..af65d5aaa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -887,6 +887,10 @@ class User < Principal project_ids.map(&:to_i) end + def self.prune(age=1.day) + User.where("created_on < ? AND status = ?", Time.now - age, STATUS_REGISTERED).destroy_all + end + protected def validate_password_length diff --git a/lib/tasks/redmine.rake b/lib/tasks/redmine.rake index 2bebaf18c..8cdf6f80f 100644 --- a/lib/tasks/redmine.rake +++ b/lib/tasks/redmine.rake @@ -40,6 +40,13 @@ namespace :redmine do end end + namespace :users do + desc 'Remove users who could not be activated after one day.' + task :prune => :environment do + User.prune + end + end + namespace :watchers do desc 'Removes watchers from what they can no longer view.' task :prune => :environment do diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb index ab1fe56ab..63867b92f 100644 --- a/test/unit/user_test.rb +++ b/test/unit/user_test.rb @@ -1313,6 +1313,16 @@ class UserTest < ActiveSupport::TestCase assert_equal [], User.find(2).bookmarked_project_ids end + def test_prune_should_destroy_not_activated_old_users + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 2.days.ago) + User.generate!(:status => User::STATUS_REGISTERED, :created_on => 2.days.ago) + User.generate!(:status => User::STATUS_REGISTERED) + + assert_difference 'User.count', -2 do + User.prune + end + end + if Object.const_defined?(:OpenID) def test_setting_identity_url normalized_open_id_url = 'http://example.com/'