Class: Masks::OpenID::Authorization
- Inherits:
-
Object
- Object
- Masks::OpenID::Authorization
- Defined in:
- app/models/masks/openid/authorization.rb
Overview
Manages authorizations for OpenID/OAuth2 requests.
Instance Attribute Summary collapse
-
#client ⇒ Object
Returns the value of attribute client.
-
#response ⇒ Object
Returns the value of attribute response.
-
#response_type ⇒ Object
Returns the value of attribute response_type.
-
#scopes ⇒ Object
Returns the value of attribute scopes.
Class Method Summary collapse
Instance Method Summary collapse
- #actor ⇒ Object
- #approved!(req, res) ⇒ Object
-
#initialize(env, **opts) ⇒ Authorization
constructor
A new instance of Authorization.
- #perform ⇒ Object
- #session ⇒ Object
Constructor Details
#initialize(env, **opts) ⇒ Authorization
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/models/masks/openid/authorization.rb', line 16 def initialize(env, **opts) @env = env @app = Rack::OAuth2::Server::Authorize.new do |req, res| @client = session.config.model(:openid_client).find_by(key: req.client_id) req.bad_request!(:client_id, "not found") unless @client unless req.redirect_uri req.invalid_request!('"redirect_uri" missing') end unless @client.redirect_uris.any? @client.redirect_uris = [req.redirect_uri.to_s] @client.valid? || req.invalid_request!('"redirect_uri" invalid') end res.redirect_uri = req.verify_redirect_uri!(@client.redirect_uris) @scopes = req.scope & @client.scopes if res.protocol_params_location == :fragment && req.nonce.blank? req.invalid_request! "nonce required" end if @client.response_types.include?( Array(req.response_type).collect(&:to_s).join(" ") ) if actor if opts[:approved] || client. @client.save if @client.redirect_uris_changed? approved! req, res elsif opts.key?(:approved) req.access_denied! end end else req.unsupported_response_type! end end end |
Instance Attribute Details
#client ⇒ Object
Returns the value of attribute client.
6 7 8 |
# File 'app/models/masks/openid/authorization.rb', line 6 def client @client end |
#response ⇒ Object
Returns the value of attribute response.
6 7 8 |
# File 'app/models/masks/openid/authorization.rb', line 6 def response @response end |
#response_type ⇒ Object
Returns the value of attribute response_type.
6 7 8 |
# File 'app/models/masks/openid/authorization.rb', line 6 def response_type @response_type end |
#scopes ⇒ Object
Returns the value of attribute scopes.
6 7 8 |
# File 'app/models/masks/openid/authorization.rb', line 6 def scopes @scopes end |
Class Method Details
.perform(env, **opts) ⇒ Object
9 10 11 12 13 |
# File 'app/models/masks/openid/authorization.rb', line 9 def perform(env, **opts) = new(env, **opts) .perform end |
Instance Method Details
#actor ⇒ Object
64 65 66 |
# File 'app/models/masks/openid/authorization.rb', line 64 def actor @actor ||= (session.actor if session.passed?) end |
#approved!(req, res) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'app/models/masks/openid/authorization.rb', line 72 def approved!(req, res) response_types = Array(req.response_type) if response_types.include? :code = actor..create!( openid_client: client, redirect_uri: res.redirect_uri, nonce: req.nonce, scopes: @scopes ) res.code = .code end if response_types.include? :token access_token = actor.openid_access_tokens.create!( openid_client: client, scopes: @scopes ) res.access_token = access_token.to_bearer_token end if response_types.include? :id_token id_token = actor.openid_id_tokens.create!( openid_client: @client, nonce: req.nonce ) res.id_token = id_token.to_jwt( code: (res.respond_to?(:code) ? res.code : nil), access_token: (res.respond_to?(:access_token) ? res.access_token : nil) ) end res.approve! end |
#perform ⇒ Object
68 69 70 |
# File 'app/models/masks/openid/authorization.rb', line 68 def perform @response = @app.call(@env) end |
#session ⇒ Object
60 61 62 |
# File 'app/models/masks/openid/authorization.rb', line 60 def session @session ||= @env[Masks::Middleware::SESSION_KEY] end |