1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- class ExternalCredential::Twitter
- def self.app_verify(params)
- request_account_to_link(params)
- params
- end
- def self.request_account_to_link(credentials = {})
- external_credential = ExternalCredential.find_by(name: 'twitter')
- if !credentials[:consumer_key]
- credentials[:consumer_key] = external_credential.credentials['consumer_key']
- end
- if !credentials[:consumer_secret]
- credentials[:consumer_secret] = external_credential.credentials['consumer_secret']
- end
- consumer = OAuth::Consumer.new(
- credentials[:consumer_key],
- credentials[:consumer_secret], {
- site: 'https://api.twitter.com'
- }
- )
- request_token = consumer.get_request_token(oauth_callback: ExternalCredential.callback_url('twitter'))
- {
- request_token: request_token,
- authorize_url: request_token.authorize_url,
- }
- end
- def self.link_account(request_token, params)
- raise if request_token.params[:oauth_token] != params[:oauth_token]
- external_credential = ExternalCredential.find_by(name: 'twitter')
- access_token = request_token.get_access_token(oauth_verifier: params[:oauth_verifier])
- client = Twitter::REST::Client.new(
- consumer_key: external_credential.credentials[:consumer_key],
- consumer_secret: external_credential.credentials[:consumer_secret],
- access_token: access_token.token,
- access_token_secret: access_token.secret,
- )
- user = client.user
- # check if account already exists
- Channel.where(area: 'Twitter::Account').each do |channel|
- next if !channel.options
- next if !channel.options['user']
- next if !channel.options['user']['id']
- next if channel.options['user']['id'] != user['id']
- # update access_token
- channel.options['auth']['external_credential_id'] = external_credential.id
- channel.options['auth']['oauth_token'] = access_token.token
- channel.options['auth']['oauth_token_secret'] = access_token.secret
- channel.save
- return channel
- end
- # create channel
- Channel.create(
- area: 'Twitter::Account',
- options: {
- adapter: 'twitter',
- user: {
- id: user.id,
- screen_name: user.screen_name,
- name: user.name,
- },
- auth: {
- external_credential_id: external_credential.id,
- oauth_token: access_token.token,
- oauth_token_secret: access_token.secret,
- },
- sync: {
- limit: 20,
- search: [],
- mentions: {},
- direct_messages: {},
- track_retweets: false
- }
- },
- active: true,
- created_by_id: 1,
- updated_by_id: 1,
- )
- end
- end
|