module ZendeskAppsSupport::Validations::Manifest
Constants
- OAUTH_REQUIRED_FIELDS
- REQUIRED_MANIFEST_FIELDS
- TYPES_AVAILABLE
Public Class Methods
call(package)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 12 def call(package) return [ValidationError.new(:missing_manifest)] unless package.has_file?('manifest.json') manifest = package.manifest_json errors = [] errors << missing_keys_error(manifest) errors << default_locale_error(manifest, package) errors << oauth_error(manifest) errors << parameters_error(manifest) errors << invalid_hidden_parameter_error(manifest) errors << invalid_type_error(manifest) errors << name_as_parameter_name_error(manifest) if manifest['requirementsOnly'] errors << ban_location(manifest) errors << ban_framework_version(manifest) else errors << missing_location_error(package) errors << invalid_location_error(package) errors << duplicate_location_error(manifest) errors << missing_framework_version(manifest) errors << invalid_version_error(manifest, package) end errors.flatten.compact rescue JSON::ParserError => e return [ValidationError.new(:manifest_not_json, errors: e)] end
Private Class Methods
ban_framework_version(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 48 def ban_framework_version(manifest) ValidationError.new(:no_framework_version_required) unless manifest['frameworkVersion'].nil? end
ban_location(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 44 def ban_location(manifest) ValidationError.new(:no_location_required) unless manifest['location'].nil? end
default_locale_error(manifest, package)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 86 def default_locale_error(manifest, package) default_locale = manifest['defaultLocale'] unless default_locale.nil? if default_locale !~ Translations::VALID_LOCALE ValidationError.new(:invalid_default_locale, defaultLocale: default_locale) elsif package.translation_files.detect { |file| file.relative_path == "translations/#{default_locale}.json" }.nil? ValidationError.new(:missing_translation_file, defaultLocale: default_locale) end end end
duplicate_location_error(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 146 def duplicate_location_error(manifest) locations = *manifest['location'] duplicate_locations = *locations.select { |location| locations.count(location) > 1 }.uniq unless duplicate_locations.empty? ValidationError.new(:duplicate_location, duplicate_locations: duplicate_locations.join(', '), count: duplicate_locations.length) end end
invalid_location_error(package)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 101 def invalid_location_error(package) errors = [] manifest_locations = package.locations manifest_locations.find do |host, locations| error = if !Location.hosts.include?(host) ValidationError.new(:invalid_host, host_name: host) elsif (invalid_locations = locations.keys - Location.names_for(host)).any? ValidationError.new(:invalid_location, invalid_locations: invalid_locations.join(', '), host_name: host, count: invalid_locations.length) end # abort early for invalid host or location name if error errors << error break end locations.values.each do |path| errors << invalid_location_uri_error(package, path) end end errors end
invalid_location_uri_error(package, path)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 127 def invalid_location_uri_error(package, path) return nil if path == Package::LEGACY_URI_STUB validation_error = ValidationError.new(:invalid_location_uri, uri: path) uri = URI.parse(path) unless uri.absolute? ? valid_absolute_uri?(uri) : valid_relative_uri?(package, uri) validation_error end rescue URI::InvalidURIError => e validation_error end
invalid_type_error(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 192 def invalid_type_error(manifest) return unless manifest['parameters'].is_a?(Array) invalid_types = [] manifest['parameters'].each do |parameter| parameter_type = parameter.fetch('type', '') invalid_types << parameter_type unless TYPES_AVAILABLE.include?(parameter_type) end if invalid_types.any? ValidationError.new(:invalid_type_parameter, invalid_types: invalid_types.join(', '), count: invalid_types.length) end end
invalid_version_error(manifest, package)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 159 def invalid_version_error(manifest, package) valid_to_serve = AppVersion::TO_BE_SERVED target_version = manifest['frameworkVersion'] if target_version == AppVersion::DEPRECATED package.warnings << I18n.t('txt.apps.admin.warning.app_build.deprecated_version') end unless valid_to_serve.include?(target_version) return ValidationError.new(:invalid_version, target_version: target_version, available_versions: valid_to_serve.join(', ')) end end
missing_framework_version(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 155 def missing_framework_version(manifest) missing_keys_validation_error(['frameworkVersion']) if manifest['frameworkVersion'].nil? end
missing_keys_error(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 78 def missing_keys_error(manifest) missing = REQUIRED_MANIFEST_FIELDS.select do |key| manifest[key].nil? end missing_keys_validation_error(missing) if missing.any? end
missing_keys_validation_error(missing_keys)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 208 def missing_keys_validation_error(missing_keys) ValidationError.new('manifest_keys.missing', missing_keys: missing_keys.join(', '), count: missing_keys.length) end
missing_location_error(package)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 97 def missing_location_error(package) missing_keys_validation_error(['location']) unless package.has_location? end
name_as_parameter_name_error(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 172 def name_as_parameter_name_error(manifest) if manifest['parameters'].is_a?(Array) if manifest['parameters'].any? { |p| p['name'] == 'name' } ValidationError.new(:name_as_parameter_name) end end end
oauth_error(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 52 def oauth_error(manifest) return unless manifest['oauth'] missing = OAUTH_REQUIRED_FIELDS.select do |key| manifest['oauth'][key].nil? || manifest['oauth'][key].empty? end if missing.any? ValidationError.new('oauth_keys.missing', missing_keys: missing.join(', '), count: missing.length) end end
parameters_error(manifest)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 64 def parameters_error(manifest) return unless manifest['parameters'] unless manifest['parameters'].is_a?(Array) return ValidationError.new(:parameters_not_an_array) end para_names = manifest['parameters'].collect { |para| para['name'] } duplicate_parameters = para_names.select { |name| para_names.count(name) > 1 }.uniq unless duplicate_parameters.empty? return ValidationError.new(:duplicate_parameters, duplicate_parameters: duplicate_parameters) end end
valid_absolute_uri?(uri)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 138 def valid_absolute_uri?(uri) uri.scheme == 'https' || uri.host == 'localhost' end
valid_relative_uri?(package, uri)
click to toggle source
# File lib/zendesk_apps_support/validations/manifest.rb, line 142 def valid_relative_uri?(package, uri) uri.path.start_with?('assets/') && package.has_file?(uri.path) end