diff --git a/web/app/assets/javascripts/jam_rest.js b/web/app/assets/javascripts/jam_rest.js index 7755e467b..6fdb20c50 100644 --- a/web/app/assets/javascripts/jam_rest.js +++ b/web/app/assets/javascripts/jam_rest.js @@ -1478,7 +1478,7 @@ }); } - function validateUrl(url) { + function validateUrlSite(url) { return $.ajax({ type: "GET", url: '/api/data_validation?data=' + encodeURIComponent(url), @@ -1616,7 +1616,7 @@ this.resendBandInvitation = resendBandInvitation; this.getMount = getMount; this.createSourceChange = createSourceChange; - this.validateUrl = validateUrl; + this.validateUrlSite = validateUrlSite; return this; }; diff --git a/web/app/assets/javascripts/website_validator.js.coffee b/web/app/assets/javascripts/website_validator.js.coffee index 2475402ff..43c824427 100644 --- a/web/app/assets/javascripts/website_validator.js.coffee +++ b/web/app/assets/javascripts/website_validator.js.coffee @@ -3,28 +3,37 @@ context = window context.JK ||= {}; context.JK.WebsiteValidator = class WebsiteValidator + constructor: (@app, input_div) -> @EVENTS = context.JK.EVENTS @rest = context.JK.Rest() @input_div = input_div @url_input = @input_div.find('input') - this.show_validation_status() + this.show_format_status() @logger = context.JK.logger + @site_status = null init: () => - validator = this; + validator = this @url_input.bind 'blur', -> - alert 'invalid' unless validator.show_validation_status() - validator.validate_url_site() + if validator.show_format_status() + validator.validate_url_site() + + url_to_validate: () => + url = @url_input.val() + if 0 < url.length + url.substring(0,2000) + else + null validate_url_format: () => - regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ - regexp.test(@url_input.val()) + regexp = /(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ + regexp.test(this.url_to_validate()) - show_validation_status: () => - url = @url_input.val() + show_format_status: () => + url = this.url_to_validate() yn = true - if 0 < url.length + if url yn = this.validate_url_format() if yn @input_div.find('.valid_checkmark').show() @@ -33,15 +42,18 @@ context.JK.WebsiteValidator = class WebsiteValidator yn validate_url_site: () => - @rest.validateUrl(@url_input.val(), context.JK.currentUserId) - .done(this.processDidValidate) - .fail(this.processDidNotValidate) + @site_status = null + @rest.validateUrlSite(this.url_to_validate()) + .done(this.processSiteCheck) + .fail(this.processSiteCheckFail) - processDidValidate: (response) => - if 'valid' == response.message - @logger.debug("is valid") - else if 'invalid' == response.message - @logger.debug("is not valid") + processSiteCheck: (response) => + if 'Valid Site' == response.message + @site_status = 'valid' + else + @site_status = 'invalid' + @logger.debug("site_status = "+@site_status) - processDidNotValidate: () => - @logger.error("is not valid ... error") + processSiteCheckFail: () => + @logger.error("site check error") + @site_status = 'invalid' diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb index ae7ede30b..1739f9999 100644 --- a/web/app/controllers/api_users_controller.rb +++ b/web/app/controllers/api_users_controller.rb @@ -704,8 +704,13 @@ class ApiUsersController < ApiController vtype = data =~ /^http/ ? 'url' : 'username' if 'url' == vtype if data.present? - `curl --output /dev/null --silent --head --fail --show-error '#{data}'` - render json: { message: $?.success? ? 'valid' : 'invalid' }, status: 200 + result = `curl --output /dev/null --silent --head --fail --show-error '#{data}' 2>&1`.chomp + if $?.success? + render json: { message: 'Valid Site' }, status: 200 + else + result =~ /curl: \(\d+\) (.*)/ + render json: { message: 'Invalid Site', errors: [$1] }, status: 200 + end else render json: { message: "blank data #{data}" }, status: :unprocessable_entity end diff --git a/web/app/views/clients/_website_validator.html.slim b/web/app/views/clients/_website_validator.html.slim index 7573b166e..ec46ab565 100644 --- a/web/app/views/clients/_website_validator.html.slim +++ b/web/app/views/clients/_website_validator.html.slim @@ -1,4 +1,4 @@ div class="website_validator" id="#{siteid}_url" div class="valid_checkmark" ✓ - input type='text' id="url_input_#{siteid}" + input type='text' id="url_input_#{siteid}" maxlength="2000"