diff options
Diffstat (limited to 'app/services/personal_access_tokens/last_used_service.rb')
-rw-r--r-- | app/services/personal_access_tokens/last_used_service.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/app/services/personal_access_tokens/last_used_service.rb b/app/services/personal_access_tokens/last_used_service.rb new file mode 100644 index 00000000000..9066fd1acdf --- /dev/null +++ b/app/services/personal_access_tokens/last_used_service.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +module PersonalAccessTokens + class LastUsedService + def initialize(personal_access_token) + @personal_access_token = personal_access_token + end + + def execute + # Needed to avoid calling service on Oauth tokens + return unless @personal_access_token.has_attribute?(:last_used_at) + + # We _only_ want to update last_used_at and not also updated_at (which + # would be updated when using #touch). + @personal_access_token.update_column(:last_used_at, Time.zone.now) if update? + end + + private + + def update? + return false if ::Gitlab::Database.read_only? + + last_used = @personal_access_token.last_used_at + + last_used.nil? || (last_used <= 1.day.ago) + end + end +end |