scinote-web/app/models/connected_device.rb

41 lines
1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
class ConnectedDevice < ApplicationRecord
belongs_to :oauth_access_token, class_name: 'Doorkeeper::AccessToken'
validates :uid, presence: true
after_destroy :revoke_token
def self.for_user(user)
where(oauth_access_token_id: Doorkeeper::AccessToken.select(:id).where(resource_owner_id: user.id))
end
def self.from_request_headers(headers, token = nil)
return unless headers['Device-Id']
current_token = Doorkeeper::AccessToken.find_by(
token: headers['Authorization']&.gsub(/Bearer\s/, '')
)
return unless token || current_token
connected_device = ConnectedDevice.find_or_initialize_by(uid: headers['Device-Id'])
connected_device.update!(
name: headers['Device-Name'],
metadata: {
os: headers['Device-Os'],
app_version: headers['Device-App-Version']
}.compact,
last_seen_at: Time.current,
oauth_access_token_id: token&.id || current_token&.id
)
connected_device
end
private
def revoke_token
oauth_access_token.revoke
end
end