VRFS-2698 implemented site_validator

This commit is contained in:
Jonathan Kolyer 2015-02-08 06:10:31 +00:00
parent 90f3d9efe1
commit e466ca0f5a
2 changed files with 31 additions and 6 deletions

View File

@ -711,7 +711,7 @@ class ApiUsersController < ApiController
url = Utils.username_url(data, site)
end
unless url.blank?
if errmsg = Utils.site_validator(url)
if errmsg = Utils.site_validator(url, site)
render json: { message: 'Invalid Site', errors: { site: [errmsg] } }, status: 200
else
render json: { message: 'Valid Site' }, status: 200

View File

@ -7,12 +7,14 @@ class Utils
case site
when 'youtube'
"https://www.youtube.com/c/#{username}"
when 'facebook' #
when 'facebook'
"https://www.facebook.com/#{username}"
when 'soundcloud' #
when 'soundcloud'
"https://soundcloud.com/#{username}"
when 'bandcamp' #
when 'bandcamp'
"http://#{username}.bandcamp.com"
when 'bandcamp-fan'
"http://bandcamp.com/#{username}"
when 'fandalism'
"http://fandalism.com/#{username}"
when 'twitter'
@ -24,8 +26,31 @@ class Utils
end
end
def self.site_validator(url)
result = `curl --output /dev/null --silent --head --fail --show-error '#{url}' 2>&1`.chomp
def self.site_validator(url, site=nil)
uagent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36"
curl_args = "-A '#{uagent}' --silent --head --fail --show-error "
case site
when 'bandcamp'
cmd = "curl #{curl_args} '#{url}' 2>&1"
result = `#{cmd}`.chomp
if $?.success?
if /^HTTP\/\d+\.\d+ 2\d\d OK/ =~ result.lines[0]
return nil
else
if /http:\/\/(.*)\.bandcamp.com/ =~ url
return self.site_validator(self.username_url($1, 'bandcamp-fan'), 'bandcamp-fan')
end
return "Unrecognized url (#{url})"
end
else
result =~ /curl: \(\d+\) (.*)/
return "#{$1} (#{url})"
end
else
curl_args << "-L --output /dev/null "
cmd = "curl #{curl_args} '#{url}' 2>&1"
result = `#{cmd}`.chomp
end
if $?.success?
return nil
else