36 lines
670 B
Ruby
36 lines
670 B
Ruby
module Projects
|
|
class DownloadService < BaseService
|
|
WHITELIST = [
|
|
/^[^.]+\.fogbugz.com$/
|
|
]
|
|
|
|
def initialize(project, url)
|
|
@project, @url = project, url
|
|
end
|
|
|
|
def execute
|
|
return nil unless valid_url?(@url)
|
|
|
|
uploader = FileUploader.new(@project)
|
|
uploader.download!(@url)
|
|
uploader.store!
|
|
|
|
uploader.to_h
|
|
end
|
|
|
|
private
|
|
|
|
def valid_url?(url)
|
|
url && http?(url) && valid_domain?(url)
|
|
end
|
|
|
|
def http?(url)
|
|
url =~ /\A#{URI::regexp(['http', 'https'])}\z/
|
|
end
|
|
|
|
def valid_domain?(url)
|
|
host = URI.parse(url).host
|
|
WHITELIST.any? { |entry| entry === host }
|
|
end
|
|
end
|
|
end
|