2015-06-12 05:02:36 -05:00
|
|
|
class UrlHelper
|
2013-11-20 06:10:08 -06:00
|
|
|
|
2015-06-12 05:02:36 -05:00
|
|
|
def self.is_local(url)
|
2014-07-18 10:54:18 -05:00
|
|
|
url.present? && (
|
|
|
|
Discourse.store.has_been_uploaded?(url) ||
|
2016-07-15 11:37:51 -05:00
|
|
|
!!(url =~ /^\/(assets|plugins|images)\//) ||
|
2014-07-18 10:54:18 -05:00
|
|
|
url.start_with?(Discourse.asset_host || Discourse.base_url_no_prefix)
|
|
|
|
)
|
2013-11-20 06:10:08 -06:00
|
|
|
end
|
|
|
|
|
2015-06-12 05:02:36 -05:00
|
|
|
def self.absolute(url, cdn = Discourse.asset_host)
|
2016-09-05 00:57:46 -05:00
|
|
|
cdn = "https:" << cdn if cdn && cdn =~ /^\/\//
|
2013-12-16 17:35:34 -06:00
|
|
|
url =~ /^\/[^\/]/ ? (cdn || Discourse.base_url_no_prefix) + url : url
|
|
|
|
end
|
|
|
|
|
2015-06-12 05:02:36 -05:00
|
|
|
def self.absolute_without_cdn(url)
|
|
|
|
self.absolute(url, nil)
|
2013-11-20 06:10:08 -06:00
|
|
|
end
|
|
|
|
|
2015-06-12 05:02:36 -05:00
|
|
|
def self.schemaless(url)
|
2016-06-30 09:55:01 -05:00
|
|
|
url.sub(/^http:/i, "")
|
2013-11-20 06:10:08 -06:00
|
|
|
end
|
|
|
|
|
2017-12-12 10:50:39 -06:00
|
|
|
DOUBLE_ESCAPED_REGEXP ||= /%25([0-9a-f]{2})/i
|
|
|
|
|
|
|
|
# Prevents double URL encode
|
|
|
|
# https://stackoverflow.com/a/37599235
|
|
|
|
def self.escape_uri(uri, pattern = URI::UNSAFE)
|
|
|
|
encoded = URI.encode(uri, pattern)
|
|
|
|
encoded.gsub!(DOUBLE_ESCAPED_REGEXP, '%\1')
|
|
|
|
encoded
|
|
|
|
end
|
|
|
|
|
2013-11-20 06:10:08 -06:00
|
|
|
end
|