lib/osso/routes/oauth.rb in osso-0.0.3.4 vs lib/osso/routes/oauth.rb in osso-0.0.3.5

- old
+ new

@@ -3,56 +3,61 @@ require 'rack/oauth2' module Osso class Oauth < Sinatra::Base include AppConfig - # Send your users here in order to being an authentication - # flow. This flow follows the authorization grant oauth - # spec with one exception - you must also pass the domain - # of the user who wants to sign in. - get '/authorize' do - @enterprise = Models::EnterpriseAccount. - includes(:saml_providers). - find_by!(domain: params[:domain]) + register Sinatra::Namespace + # rubocop:disable Metrics/BlockLength + namespace '/oauth' do + # Send your users here in order to being an authentication + # flow. This flow follows the authorization grant oauth + # spec with one exception - you must also pass the domain + # of the user who wants to sign in. + get '/authorize' do + @enterprise = Models::EnterpriseAccount. + includes(:saml_providers). + find_by!(domain: params[:domain]) - Rack::OAuth2::Server::Authorize.new do |req, _res| - client = Models::OauthClient.find_by!(identifier: req.client_id) - req.verify_redirect_uri!(client.redirect_uri_values) - end.call(env) + Rack::OAuth2::Server::Authorize.new do |req, _res| + client = Models::OauthClient.find_by!(identifier: req.client_id) + req.verify_redirect_uri!(client.redirect_uri_values) + end.call(env) - if @enterprise.single_provider? - session[:oauth_state] = params[:state] - redirect "/auth/saml/#{@enterprise.provider.id}" - end + if @enterprise.single_provider? + session[:oauth_state] = params[:state] + redirect "/auth/saml/#{@enterprise.provider.id}" + end - # TODO: multiple provider support - # erb :multiple_providers + # TODO: multiple provider support + # erb :multiple_providers - rescue Rack::OAuth2::Server::Authorize::BadRequest => e - @error = e - return erb :error - end + rescue Rack::OAuth2::Server::Authorize::BadRequest => e + @error = e + return erb :error + end - # Exchange an authorization code token for an access token. - # In addition to the token, you must include all paramaters - # required by Oauth spec: redirect_uri, client ID, and client secret - post '/token' do - Rack::OAuth2::Server::Token.new do |req, res| - code = Models::AuthorizationCode. - find_by_token!(params[:code]) - client = Models::OauthClient.find_by!(identifier: req.client_id) - req.invalid_client! if client.secret != req.client_secret - req.invalid_grant! if code.redirect_uri != req.redirect_uri - res.access_token = code.access_token.to_bearer_token - end.call(env) - end + # Exchange an authorization code token for an access token. + # In addition to the token, you must include all paramaters + # required by Oauth spec: redirect_uri, client ID, and client secret + post '/token' do + Rack::OAuth2::Server::Token.new do |req, res| + code = Models::AuthorizationCode. + find_by_token!(params[:code]) + client = Models::OauthClient.find_by!(identifier: req.client_id) + req.invalid_client! if client.secret != req.client_secret + req.invalid_grant! if code.redirect_uri != req.redirect_uri + res.access_token = code.access_token.to_bearer_token + end.call(env) + end - # Use the access token to request a user profile - get '/me' do - json Models::AccessToken. - includes(:user). - valid. - find_by_token!(params[:access_token]). - user + # Use the access token to request a user profile + get '/me' do + json Models::AccessToken. + includes(:user). + valid. + find_by_token!(params[:access_token]). + user + end end end end +# rubocop:enable Metrics/BlockLength