Skip to content

How to override 'site' option for Freshbooks #141

@kpgarrod

Description

@kpgarrod

I am authorising as a Freshbooks consumer with OAuth. Each of my users may have his own Freshbooks account. Each Freshbooks user has his own subdomain (e.g. example.freshbooks.com). In order to authorise, I have to use urls on that subdomain.

I couldn't find an easy way to change the 'site' option for each user. I ended up overriding OauthConsumersController#show with this:

  def show
    case params[:id]
    when 'freshbooks'
      request_url = callback_oauth_consumer_url(params[:id]) + callback2_querystring
      @request_token = @consumer.get_request_token(request_url)  
      @request_token.consumer.options['site'] ="https://#{params['subdomain']}.freshbooks.com"
      session[@request_token.token]=@request_token.secret 
      if @request_token.callback_confirmed?
        redirect_to @request_token.authorize_url
      else
        redirect_to(@request_token.authorize_url + "&oauth_callback=#{callback_oauth_consumer_url(params[:id])}")
      end
    else
      super
    end
  end 

It's far from beautiful and obviously fragile, so I would love to know the 'right' way of doing it.

BTW, it was not straightforward to configure Freshbooks, so I include my Token here in case it saves somebody some time:

require 'oauth/signature/plaintext'
class FreshbooksToken < ConsumerToken
  FRESHBOOKS_SETTINGS={
    :site => "",
    :request_token_path => "/oauth/oauth_request.php",
    :access_token_path => "/oauth/oauth_access.php",
    :authorize_path => "/oauth/oauth_authorize.php",
    :scheme=> :query_string, #this is the only one Freshbooks accepts
    :signature_method=>"PLAINTEXT",  # this is the only one Freshbooks accepts
    }


  def self.consumer(options={})
    @consumer ||= OAuth::Consumer.new(credentials[:key], credentials[:secret], FRESHBOOKS_SETTINGS.merge(options))
  end
end

Thanks in advance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions