123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- class MigrateAgentsToServiceAuthentication < ActiveRecord::Migration[4.2]
- def twitter_consumer_key(agent)
- agent.options['consumer_key'].presence || agent.credential('twitter_consumer_key')
- end
- def twitter_consumer_secret(agent)
- agent.options['consumer_secret'].presence || agent.credential('twitter_consumer_secret')
- end
- def twitter_oauth_token(agent)
- agent.options['oauth_token'].presence || agent.options['access_key'].presence || agent.credential('twitter_oauth_token')
- end
- def twitter_oauth_token_secret(agent)
- agent.options['oauth_token_secret'].presence || agent.options['access_secret'].presence || agent.credential('twitter_oauth_token_secret')
- end
- def up
- agents = Agent.where(type: ['Agents::TwitterUserAgent', 'Agents::TwitterStreamAgent', 'Agents::TwitterPublishAgent']).each do |agent|
- service = agent.user.services.create!(
- provider: 'twitter',
- name: "Migrated '#{agent.name}'",
- token: twitter_oauth_token(agent),
- secret: twitter_oauth_token_secret(agent)
- )
- agent.service_id = service.id
- agent.save!(validate: false)
- end
- migrated = false
- if agents.length > 0
- puts <<-EOF.strip_heredoc
- Your Twitter agents were successfully migrated. You need to update your .env file and add the following two lines:
- TWITTER_OAUTH_KEY=#{twitter_consumer_key(agents.first)}
- TWITTER_OAUTH_SECRET=#{twitter_consumer_secret(agents.first)}
- To authenticate new accounts with your twitter OAuth application you need to log in the to twitter application management page (https://apps.twitter.com/)
- and set the callback URL of your application to "http#{ENV['FORCE_SSL'] == 'true' ? 's' : ''}://#{ENV['DOMAIN']}/auth/twitter/callback"
- EOF
- migrated = true
- end
- sleep 20 if migrated
- end
- def down
- raise ActiveRecord::IrreversibleMigration, "Cannot revert migration to OAuth services"
- end
- end
|