45 lines
1.2 KiB
Ruby
45 lines
1.2 KiB
Ruby
|
module Carto
|
||
|
class RequestToken < OauthToken
|
||
|
|
||
|
# Compatibility with ActiveRecord inheritance. When migrating to ActiveRecord,
|
||
|
# the class name changed from ::RequestToken to ::Carto::RequestToken
|
||
|
# Source: https://yiming.dev/blog/2017/12/07/add-sti-to-a-legacy-activerecord-model/
|
||
|
self.store_full_sti_class = false
|
||
|
|
||
|
attr_accessor :provided_oauth_verifier
|
||
|
|
||
|
def authorize!(user)
|
||
|
return false if authorized?
|
||
|
|
||
|
new_attributes = { user: user, authorized_at: Time.now }
|
||
|
new_attributes[:verifier] = OAuth::Helper.generate_key(20)[0,20] unless oauth10?
|
||
|
|
||
|
update!(new_attributes)
|
||
|
end
|
||
|
|
||
|
def exchange!
|
||
|
return false unless authorized?
|
||
|
return false unless oauth10? || verifier == provided_oauth_verifier
|
||
|
|
||
|
ActiveRecord::Base.transaction do
|
||
|
access_token = Carto::AccessToken.create!(user: user, client_application: client_application)
|
||
|
invalidate!
|
||
|
access_token
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def to_query
|
||
|
oauth10? ? super : "#{super}&oauth_callback_confirmed=true"
|
||
|
end
|
||
|
|
||
|
def oob?
|
||
|
callback_url == 'oob'
|
||
|
end
|
||
|
|
||
|
def oauth10?
|
||
|
(defined? OAUTH_10_SUPPORT) && OAUTH_10_SUPPORT && callback_url.blank?
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|