docbrown/app/lib/url.rb
Josh Puetz 7d4a7cc883
[deploy] Change lingering /internal paths to /admin (#9673)
* Change lingering `/internal` paths to `/admin`

* Fix multiline test expectation
2020-08-07 19:52:39 -04:00

77 lines
1.8 KiB
Ruby

# Utilities methods to safely build app wide URLs
module URL
SERVICE_WORKER = "/serviceworker.js".freeze
def self.protocol
ApplicationConfig["APP_PROTOCOL"]
end
def self.domain
ApplicationConfig["APP_DOMAIN"]
end
def self.url(uri = nil)
base_url = "#{protocol}#{domain}"
return base_url unless uri
URI.parse(base_url).merge(uri).to_s
end
# Creates an article URL
#
# @param article [Article] the article to create the URL for
def self.article(article)
url(article.path)
end
# Creates a comment URL
#
# @param comment [Comment] the comment to create the URL for
def self.comment(comment)
url(comment.path)
end
# Creates a reaction URL
#
# A reaction URL is the URL of its reactable.
#
# @param reactable [Reaction] the reaction to create the URL for
def self.reaction(reaction)
url(reaction.reactable.path)
end
# Creates a tag URL
#
# @param tag [Tag] the tag to create the URL for
def self.tag(tag, page = 1)
url(["/t/#{tag.name}", ("/page/#{page}" if page > 1)].join)
end
# Creates a user URL
#
# @param user [User] the user to create the URL for
def self.user(user)
url(user.username)
rescue URI::InvalidURIError # invalid username containing spaces will result in an error
nil
end
def self.organization(organization)
url(organization.slug)
end
# Ensures we don't consider serviceworker.js as referer
#
# @param referer [String] the unsanitized referer
# @example A safe referer
# sanitized_referer("/some/path") #=> "/some/path"
# @example serviceworker.js as referer
# sanitized_referer("serviceworker.js") #=> nil
# @example An empty string
# sanitized_referer("") #=> nil
def self.sanitized_referer(referer)
return if referer.blank? || URI(referer).path == SERVICE_WORKER
referer
end
end