Skip to content

Instantly share code, notes, and snippets.

@jonstorer
Last active August 21, 2017 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonstorer/3d57ee81a81c6e032d44ea6a4742008b to your computer and use it in GitHub Desktop.
Save jonstorer/3d57ee81a81c6e032d44ea6a4742008b to your computer and use it in GitHub Desktop.
class IdentityProviderAdapter
def self.find(identity_provider_name, access_token, refresh_token)
self.const_get(identity_provider_name.capitalize.constantize).new(access_token, refresh_token)
end
end
class IdentityProviderAdapter::Facebook
def initialize(access_token, refresh_token)
@access_token = access_token
@refresh_token = refresh_token
end
def email
@email ||= client.get_object('me', fields: 'email')['email']
end
def email_verified
@email_verified ||= #whatever
end
private
def client
@client ||= Koala::Facebook::API.new(@access_token)
end
end
class IdentityProviderAdapter::Google
# etc
end
class IdentityProviderAdapter::Office365
# etc
end
class FetchEmailFromProviderIdentityWorker
include Sidekiq::Worker
def perform(id)
identity Identity.find(id)
adapter = IdentityProviderAdapter.find(identity.identity_provider, identity.access_token, identity.refresh_token)
unless Identity.where(email: adapter.email).exist?
identity.user.identities.create!({
type: Identity::Email.name,
email: adapter.email,
verified: adapter.email_verified
})
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment