lib/oauth/controllers/consumer_controller.rb in oauth-plugin-0.4.0.pre4 vs lib/oauth/controllers/consumer_controller.rb in oauth-plugin-0.4.0.pre5
- old
+ new
@@ -16,20 +16,45 @@
# creates request token and redirects on to oauth provider's auth page
# If user is already connected it displays a page with an option to disconnect and redo
def show
unless @token
- @request_token=@consumer.get_request_token(callback_oauth_consumer_url(params[:id]))
- session[@request_token.token]=@request_token.secret
- if @request_token.callback_confirmed?
- redirect_to @request_token.authorize_url
+ if @consumer.ancestors.include?(Oauth2Token)
+ request_url = callback2_oauth_consumer_url(params[:id]) + '?' + request.query_string
+ redirect_to @consumer.authorize_url(request_url)
else
- redirect_to(@request_token.authorize_url + "&oauth_callback=#{callback_oauth_consumer_url(params[:id])}")
+ request_url = callback_oauth_consumer_url(params[:id]) + '?' + request.query_string
+ @request_token = @consumer.get_request_token(request_url)
+ 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
end
end
end
+
+ def callback2
+ @token = @consumer.access_token(current_user,params[:code], callback2_oauth_consumer_url(params[:id]))
+ logger.info @token.inspect
+ if @token
+ # Log user in
+ if logged_in?
+ flash[:notice] = "#{params[:id].humanize} was successfully connected to your account"
+ else
+ self.current_user = @token.user
+ flash[:notice] = "You logged in with #{params[:id].humanize}"
+ end
+ go_back
+ else
+ flash[:error] = "An error happened, please try connecting again"
+ redirect_to oauth_consumer_url(params[:id])
+ end
+ end
+
def callback
logger.info "CALLBACK"
@request_token_secret=session[params[:oauth_token]]
if @request_token_secret
@token=@consumer.find_or_create_from_request_token(current_user,params[:oauth_token],@request_token_secret,params[:oauth_verifier])
@@ -49,10 +74,30 @@
end
end
end
+ def client
+ method = request.method.downcase.to_sym
+ path = "/#{params[:endpoint]}?#{request.query_string}"
+ if consumer_credentials[:expose]
+ if @token
+ oauth_response = @token.client.send(method, path)
+ if oauth_response.is_a? Net::HTTPRedirection
+ # follow redirect
+ oauth_response = @token.client.send(method, oauth_response['Location'])
+ end
+
+ render :text => oauth_response.body
+ else
+ render :text => "Token needed.", :status => 403
+ end
+ else
+ render :text => "Not allowed", :status => 403
+ end
+ end
+
def destroy
throw RecordNotFound unless @token
@token.destroy
if params[:commit]=="Reconnect"
redirect_to oauth_consumer_url(params[:id])
@@ -68,14 +113,21 @@
# Override this in your controller to decide where you want to redirect user to after callback is finished.
def go_back
redirect_to root_url
end
+ def consumer_credentials
+ OAUTH_CREDENTIALS[consumer_key]
+ end
+
+ def consumer_key
+ @consumer_key ||= params[:id].to_sym
+ end
+
def load_consumer
- consumer_key=params[:id].to_sym
throw RecordNotFound unless OAUTH_CREDENTIALS.include?(consumer_key)
- deny_access! unless logged_in? || OAUTH_CREDENTIALS[consumer_key][:allow_login]
+ deny_access! unless logged_in? || consumer_credentials[:allow_login]
@consumer="#{consumer_key.to_s.camelcase}Token".constantize
@token=@consumer.find(:first, :conditions=>{:user_id=>current_user.id.to_s}) if logged_in?
end
# Override this in you controller to deny user or redirect to login screen.
@@ -83,6 +135,6 @@
head 401
end
end
end
-end
\ No newline at end of file
+end