From e466ca0f5a99bd6a7a6cc7e2ac82f79112ebc878 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Sun, 8 Feb 2015 06:10:31 +0000 Subject: [PATCH] VRFS-2698 implemented site_validator --- web/app/controllers/api_users_controller.rb | 2 +- web/lib/utils.rb | 35 ++++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb index f31dd0ea0..34ea1154d 100644 --- a/web/app/controllers/api_users_controller.rb +++ b/web/app/controllers/api_users_controller.rb @@ -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 diff --git a/web/lib/utils.rb b/web/lib/utils.rb index 941294be4..87b1555c8 100644 --- a/web/lib/utils.rb +++ b/web/lib/utils.rb @@ -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