43 lines
822 B
Ruby
43 lines
822 B
Ruby
module Html
|
|
class ImageUri
|
|
GITHUB_CAMO = {
|
|
scheme: "https",
|
|
host: "camo.githubusercontent.com"
|
|
}.freeze
|
|
|
|
GITHUB_BADGE = {
|
|
scheme: "https",
|
|
host: "github.com",
|
|
filename: "badge.svg"
|
|
}.freeze
|
|
|
|
attr_reader :uri, :original_source
|
|
|
|
delegate :scheme, :host, :path, to: :uri
|
|
|
|
def initialize(src)
|
|
@uri = URI(src)
|
|
@original_source = src
|
|
end
|
|
|
|
def allowed?
|
|
github_camo_user_content? || github_badge?
|
|
end
|
|
|
|
def github_badge?
|
|
scheme == GITHUB_BADGE[:scheme] &&
|
|
host == GITHUB_BADGE[:host] &&
|
|
filename == GITHUB_BADGE[:filename]
|
|
end
|
|
|
|
def github_camo_user_content?
|
|
scheme == GITHUB_CAMO[:scheme] && host == GITHUB_CAMO[:host]
|
|
end
|
|
|
|
private
|
|
|
|
def filename
|
|
File.basename path
|
|
end
|
|
end
|
|
end
|