Module: Clavis::Security::RedirectUriValidator
- Defined in:
- lib/clavis/security/redirect_uri_validator.rb
Class Method Summary collapse
-
.valid_provider_uri?(provider_name, uri) ⇒ Boolean
Validates a URI for a specific provider.
-
.valid_uri?(uri) ⇒ Boolean
Validates a URI against the configured allowed hosts.
-
.validate_provider_uri!(provider_name, uri) ⇒ Boolean
Validates a URI for a specific provider and raises an exception if invalid.
-
.validate_uri!(uri) ⇒ Boolean
Validates a URI and raises an exception if invalid.
Class Method Details
.valid_provider_uri?(provider_name, uri) ⇒ Boolean
Validates a URI for a specific provider
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 59 |
# File 'lib/clavis/security/redirect_uri_validator.rb', line 34 def valid_provider_uri?(provider_name, uri) return false if uri.nil? || uri.empty? begin # First check if the URI is valid against allowed hosts return false unless valid_uri?(uri) # Get the configured redirect URI for the provider provider_config = Clavis.configuration.provider_config(provider_name) configured_uri = provider_config[:redirect_uri] return true if configured_uri.nil? # No specific URI configured parsed_uri = URI.parse(uri) parsed_configured_uri = URI.parse(configured_uri) # Check if exact matching is required return uri == configured_uri if Clavis.configuration.exact_redirect_uri_matching # Check if the host and path match parsed_uri.host == parsed_configured_uri.host && parsed_uri.path == parsed_configured_uri.path rescue URI::InvalidURIError, Clavis::ProviderNotConfigured false end end |
.valid_uri?(uri) ⇒ Boolean
Validates a URI against the configured allowed hosts
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/clavis/security/redirect_uri_validator.rb', line 12 def valid_uri?(uri) return false if uri.nil? || uri.empty? begin parsed_uri = URI.parse(uri) # Check if localhost is allowed in development return allow_localhost_in_development? if localhost?(parsed_uri.host) # Check against allowed hosts return true if host_allowed?(parsed_uri.host) false rescue URI::InvalidURIError false end end |
.validate_provider_uri!(provider_name, uri) ⇒ Boolean
Validates a URI for a specific provider and raises an exception if invalid
78 79 80 81 82 83 84 |
# File 'lib/clavis/security/redirect_uri_validator.rb', line 78 def validate_provider_uri!(provider_name, uri) is_valid = valid_provider_uri?(provider_name, uri) raise Clavis::InvalidRedirectUri, uri if !is_valid && Clavis.configuration.raise_on_invalid_redirect is_valid end |
.validate_uri!(uri) ⇒ Boolean
Validates a URI and raises an exception if invalid
65 66 67 68 69 70 71 |
# File 'lib/clavis/security/redirect_uri_validator.rb', line 65 def validate_uri!(uri) is_valid = valid_uri?(uri) raise Clavis::InvalidRedirectUri, uri if !is_valid && Clavis.configuration.raise_on_invalid_redirect is_valid end |