Jump To …

authorization.rb

An Authorization represents a connection to someone’s social media profile.

class Authorization
  include MongoMapper::Document

If you don’t hook up an Authorization to a User… you’re not making much sense.

  belongs_to :user
  key :user_id, ObjectId

  key :uid,          Integer, required: true
  key :provider,     String,  required: true
  key :oauth_token,  String
  key :oauth_secret, String
  key :nickname

Super cool validations. We don’t want to let two people sign up with the same external auth, but just in case there’s a clash between providers, we scope it. So easy!

  validates_uniqueness_of :uid, scope: :provider

Locates an authorization from data provided from a successful omniauth authentication response

  def self.find_from_hash(hash)

Pull out the details

    uid      = hash['uid'].to_i
    provider = hash['provider']

Find the first record from the details

    first provider: provider, uid: uid
  end

  def self.create_from_session!(session, user)

Create a new authorization with the provided details

    create!(
      user:         user,
      uid:          session[:uid],
      provider:     session[:provider],
      nickname:     session[:nickname],
      oauth_token:  session[:oauth_token],
      oauth_secret: session[:oauth_secret]
    )
  end

Creates an authorization from a sucessful omniauth authentication response

  def self.create_from_hash!(hash, base_uri, user = nil)

If there isn’t a user, create a user and author.

    if user.nil?
      author = Author.create_from_hash!(hsh, base_uri)
      user   = User.create(
                 :author   => author,
                 :username => author.username
               )
    end

Grab the user information from the hash

    uid, provider, nickname = hash['uid'], hash['provider'], hash['info']['nickname']

Grab the credentials, including token and secret, from the hash

    credentials = hash['credentials']
    token, secret = credentials['token'], credentials['secret']

Create a new authorization with the provided details

    create!(
      user: user,
      uid: uid,
      provider: provider,
      nickname: nickname,
      oauth_token: token,
      oauth_secret: secret
    )
  end

  timestamps!

end