Sha256: 18286421e001166c8a15a1da70a610d9810063615837a2cefcd06efac4c2509c

Contents?: true

Size: 1.1 KB

Versions: 11

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module DeviseTokenAuth::Url

  def self.generate(url, params = {})
    uri = URI(url)

    res = "#{uri.scheme}://#{uri.host}"
    res += ":#{uri.port}" if (uri.port && uri.port != 80 && uri.port != 443)
    res += uri.path.to_s if uri.path
    query = [uri.query, params.to_query].reject(&:blank?).join('&')
    res += "?#{query}"
    res += "##{uri.fragment}" if uri.fragment
    # repeat any query params after the fragment to deal with Angular eating any pre fragment query params, used
    # in the reset password redirect url
    res += "?#{query}" if uri.fragment

    res
  end

  def self.whitelisted?(url)
    url.nil? || \
      !!DeviseTokenAuth.redirect_whitelist.find do |pattern|
        !!Wildcat.new(pattern).match(url)
      end
  end

  # wildcard convenience class
  class Wildcat
    def self.parse_to_regex(str)
      escaped = Regexp.escape(str).gsub('\*','.*?')
      Regexp.new("^#{escaped}$", Regexp::IGNORECASE)
    end

    def initialize(str)
      @regex = self.class.parse_to_regex(str)
    end

    def match(str)
      !!@regex.match(str)
    end
  end

end

Version data entries

11 entries across 11 versions & 3 rubygems

Version Path
devise_token_auth-1.2.5 lib/devise_token_auth/url.rb
devise_token_auth-1.2.4 lib/devise_token_auth/url.rb
devise_token_auth-1.2.2 lib/devise_token_auth/url.rb
devise_token_auth-1.2.1 lib/devise_token_auth/url.rb
devise_token_auth-1.2.0 lib/devise_token_auth/url.rb
devise_token_auth-1.1.5 lib/devise_token_auth/url.rb
sidecar_token_auth-1.0.1 lib/devise_token_auth/url.rb
devise_token_auth-1.1.4 lib/devise_token_auth/url.rb
devise_token_auth_multitenancy-1.1.3.2 lib/devise_token_auth/url.rb
devise_token_auth_multitenancy-1.1.3.1 lib/devise_token_auth/url.rb
devise_token_auth_multitenancy-1.1.3.alpha1 lib/devise_token_auth/url.rb