Class: Jobs::InvalidateInactiveAdmins

Inherits:
Scheduled show all
Defined in:
app/jobs/scheduled/invalidate_inactive_admins.rb

Instance Method Summary collapse

Methods inherited from Scheduled

#perform

Methods inherited from Base

acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately

Instance Method Details

#execute(_) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/jobs/scheduled/invalidate_inactive_admins.rb', line 7

def execute(_)
  return if SiteSetting.invalidate_inactive_admin_email_after_days == 0

  timestamp = SiteSetting.invalidate_inactive_admin_email_after_days.days.ago

  User
    .human_users
    .where(admin: true)
    .where(active: true)
    .where("last_seen_at < ?", timestamp)
    .where(
      "NOT EXISTS ( SELECT 1 from api_keys WHERE api_keys.user_id = users.id AND COALESCE(last_used_at, updated_at) > ? )",
      timestamp,
    )
    .where(
      "NOT EXISTS ( SELECT 1 from posts WHERE posts.user_id = users.id AND created_at > ?)",
      timestamp,
    )
    .each do |user|
      User.transaction do
        user.deactivate(Discourse.system_user)
        user.email_tokens.update_all(confirmed: false, expired: true)

        reason =
          I18n.t(
            "user.deactivated_by_inactivity",
            count: SiteSetting.invalidate_inactive_admin_email_after_days,
          )
        StaffActionLogger.new(Discourse.system_user).log_user_deactivate(user, reason)

        Discourse.authenticators.each do |authenticator|
          if authenticator.can_revoke? && authenticator.description_for_user(user).present?
            authenticator.revoke(user)
          end
        end
      end
    end
end