zendesk_apps_support 3.3.6 → 3.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/locales/en.yml +7 -0
- data/config/locales/translations/zendesk_apps_support.yml +17 -1
- data/lib/zendesk_apps_support/manifest.rb +1 -1
- data/lib/zendesk_apps_support/manifest/parameter.rb +2 -1
- data/lib/zendesk_apps_support/validations/manifest.rb +57 -6
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 911488fbf5c3bbe10e98b1696e6b0915f6894b35
|
4
|
+
data.tar.gz: b383f7790f4ac3a8bc34a0e50b4d6d47e4f79af9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1ab63b2557319672569094b3561bd63edb21b708091475eacc02833c9be8185b26b693850021436a494ecaea13cc1ce4f670533d99381e83133ba15df217fab
|
7
|
+
data.tar.gz: 9e6a726beb6676c1dafaea5e0f3e1d6ab7d5d271a6f05be4dc0d8ffe56fc7f58b5a2e8494b6d8982a531425aa4b24df18203cea846252be1bca2a7f603712828
|
data/config/locales/en.yml
CHANGED
@@ -26,6 +26,12 @@ en:
|
|
26
26
|
symlink_in_zip: Symlinks are not allowed in the zip file
|
27
27
|
invalid_experiment: 'Manifest specifies unknown or unavailable experiment:
|
28
28
|
%{experiment}'
|
29
|
+
unacceptable_hash: The manifest field %{field} needs to be key-value pairs
|
30
|
+
with string keys, but it was %{value}
|
31
|
+
unacceptable_array: The manifest field %{field} needs to be an array,
|
32
|
+
but it was %{value}
|
33
|
+
unacceptable_array_of_strings: The manifest field %{field} need to be
|
34
|
+
an array containing strings
|
29
35
|
missing_requirements: Could not find requirements.json
|
30
36
|
requirements_not_supported: App requirements are not supported for marketing-only
|
31
37
|
apps
|
@@ -89,6 +95,7 @@ en:
|
|
89
95
|
one: "%{invalid_types} is an invalid parameter type."
|
90
96
|
other: "%{invalid_types} are invalid parameter types."
|
91
97
|
unacceptable_boolean: '%{field} must be a boolean value, got "%{value}".'
|
98
|
+
unacceptable_string: '%{field} must be a string, got "%{value}".'
|
92
99
|
invalid_no_template: noTemplate must be set to true, false, or an array
|
93
100
|
of valid locations.
|
94
101
|
duplicate_reference: 'Duplicate reference in manifest: "%{key}".'
|
@@ -56,6 +56,18 @@ parts:
|
|
56
56
|
key: "txt.apps.admin.error.app_build.invalid_experiment"
|
57
57
|
title: "App builder job: an experiment has been specifed that is not publically available or otherwise invalid. https://en.wikipedia.org/wiki/Manifest_file"
|
58
58
|
value: "Manifest specifies unknown or unavailable experiment: %{experiment}"
|
59
|
+
- translation:
|
60
|
+
key: "txt.apps.admin.error.app_build.unacceptable_hash"
|
61
|
+
title: "App builder job: the value for a field needs to be key-value pairs, but it was something else. https://en.wikipedia.org/wiki/Manifest_file"
|
62
|
+
value: "The manifest field %{field} needs to be key-value pairs with string keys, but it was %{value}"
|
63
|
+
- translation:
|
64
|
+
key: "txt.apps.admin.error.app_build.unacceptable_array"
|
65
|
+
title: "App builder job: the value for a field needs to be an array, but it was something else. https://en.wikipedia.org/wiki/Manifest_file"
|
66
|
+
value: "The manifest field %{field} needs to be an array, but it was %{value}"
|
67
|
+
- translation:
|
68
|
+
key: "txt.apps.admin.error.app_build.unacceptable_array_of_strings"
|
69
|
+
title: "App builder job: the value for domainWhitelist needs to be an array of strings, but it was something else. https://en.wikipedia.org/wiki/Manifest_file"
|
70
|
+
value: "The manifest field %{field} need to be an array containing strings"
|
59
71
|
- translation:
|
60
72
|
key: "txt.apps.admin.error.app_build.missing_requirements"
|
61
73
|
title: "App builder job: missing requirements error"
|
@@ -234,6 +246,10 @@ parts:
|
|
234
246
|
key: "txt.apps.admin.error.app_build.unacceptable_boolean"
|
235
247
|
title: "App builder job: this value needs to be either true or false, but something else was passed in. placeholder value is taken from user input. You can translate as: The value %{field} must be a Boolean... to avoid any gender issues."
|
236
248
|
value: "%{field} must be a boolean value, got \"%{value}\"."
|
249
|
+
- translation:
|
250
|
+
key: "txt.apps.admin.error.app_build.unacceptable_string"
|
251
|
+
title: "App builder job: this value needs to be a text string, but something else was passed in. placeholder value is taken from user input. You can translate as: The value %{field} must be a string... to avoid any gender issues."
|
252
|
+
value: "%{field} must be a string, got \"%{value}\"."
|
237
253
|
- translation:
|
238
254
|
key: "txt.apps.admin.error.app_build.invalid_no_template"
|
239
255
|
title: "App builder job: `noTemplate` needs to be true, false or a valid array, but something else was passed in. noTemplate, true, and false should not be translated."
|
@@ -261,4 +277,4 @@ parts:
|
|
261
277
|
- translation:
|
262
278
|
key: "txt.apps.admin.error.app_build.invalid_v1_location.other"
|
263
279
|
title: "The locations listed are not available in framework v1."
|
264
|
-
value: "%{invalid_locations} are invalid locations in framework v1."
|
280
|
+
value: "%{invalid_locations} are invalid locations in framework v1."
|
@@ -3,7 +3,8 @@ module ZendeskAppsSupport
|
|
3
3
|
class Manifest
|
4
4
|
class Parameter
|
5
5
|
TYPES = %w(text password checkbox url number multiline hidden).freeze
|
6
|
-
|
6
|
+
ATTRIBUTES = %i(name type required secure default).freeze
|
7
|
+
attr_reader(*ATTRIBUTES)
|
7
8
|
def default?
|
8
9
|
@has_default
|
9
10
|
end
|
@@ -22,14 +22,13 @@ module ZendeskAppsSupport
|
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
-
# rubocop:disable Metrics/AbcSize
|
26
25
|
def collate_manifest_errors(package)
|
27
26
|
manifest = package.manifest
|
28
27
|
|
29
28
|
errors = []
|
30
29
|
errors << missing_keys_error(manifest)
|
30
|
+
errors << type_checks(manifest)
|
31
31
|
errors << oauth_error(manifest)
|
32
|
-
errors << boolean_error(manifest)
|
33
32
|
errors << default_locale_error(manifest, package)
|
34
33
|
|
35
34
|
if manifest.marketing_only?
|
@@ -40,7 +39,6 @@ module ZendeskAppsSupport
|
|
40
39
|
errors << invalid_hidden_parameter_error(manifest)
|
41
40
|
errors << invalid_type_error(manifest)
|
42
41
|
errors << name_as_parameter_name_error(manifest)
|
43
|
-
errors << no_template_format_error(manifest)
|
44
42
|
end
|
45
43
|
|
46
44
|
if manifest.requirements_only? || manifest.marketing_only?
|
@@ -59,7 +57,55 @@ module ZendeskAppsSupport
|
|
59
57
|
|
60
58
|
errors.flatten.compact
|
61
59
|
end
|
62
|
-
|
60
|
+
|
61
|
+
def type_checks(manifest)
|
62
|
+
errors = []
|
63
|
+
errors << boolean_error(manifest)
|
64
|
+
errors << string_error(manifest)
|
65
|
+
errors << no_template_format_error(manifest)
|
66
|
+
unless manifest.experiments.is_a?(Hash)
|
67
|
+
errors << ValidationError.new(
|
68
|
+
:unacceptable_hash,
|
69
|
+
field: 'experiments',
|
70
|
+
value: manifest.experiments.class.to_s
|
71
|
+
)
|
72
|
+
end
|
73
|
+
whitelist = manifest.domain_whitelist
|
74
|
+
unless whitelist.nil? || whitelist.is_a?(Array) && whitelist.all? { |dom| dom.is_a? String }
|
75
|
+
errors << ValidationError.new(:unacceptable_array_of_strings, field: 'domainWhitelist')
|
76
|
+
end
|
77
|
+
parameters = manifest.original_parameters
|
78
|
+
unless parameters.nil? || parameters.is_a?(Array)
|
79
|
+
errors << ValidationError.new(
|
80
|
+
:unacceptable_array,
|
81
|
+
field: 'parameters',
|
82
|
+
value: parameters.class.to_s
|
83
|
+
)
|
84
|
+
end
|
85
|
+
errors
|
86
|
+
end
|
87
|
+
|
88
|
+
def string_error(manifest)
|
89
|
+
manifest_strings = %i(
|
90
|
+
default_locale
|
91
|
+
version
|
92
|
+
framework_version
|
93
|
+
remote_installation_url
|
94
|
+
terms_conditions_url
|
95
|
+
google_analytics_code
|
96
|
+
)
|
97
|
+
errors = manifest_strings.map do |field|
|
98
|
+
validate_string(manifest.public_send(field), field)
|
99
|
+
end
|
100
|
+
|
101
|
+
if manifest.author
|
102
|
+
author_strings = %w(name email url)
|
103
|
+
errors << (author_strings.map do |field|
|
104
|
+
validate_string(manifest.author[field], "author #{field}")
|
105
|
+
end)
|
106
|
+
end
|
107
|
+
errors
|
108
|
+
end
|
63
109
|
|
64
110
|
def boolean_error(manifest)
|
65
111
|
booleans = %i(requirements_only marketing_only single_install signed_urls private)
|
@@ -72,6 +118,12 @@ module ZendeskAppsSupport
|
|
72
118
|
errors.compact
|
73
119
|
end
|
74
120
|
|
121
|
+
def validate_string(value, label_for_error)
|
122
|
+
unless value.is_a?(String) || value.nil?
|
123
|
+
ValidationError.new(:unacceptable_string, field: label_for_error, value: value)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
75
127
|
def validate_boolean(value, label_for_error)
|
76
128
|
unless [true, false].include? value
|
77
129
|
ValidationError.new(:unacceptable_boolean, field: label_for_error, value: value)
|
@@ -294,8 +346,7 @@ module ZendeskAppsSupport
|
|
294
346
|
end
|
295
347
|
end
|
296
348
|
|
297
|
-
# TODO:
|
298
|
-
# included locations
|
349
|
+
# TODO: check the app actually runs in included locations
|
299
350
|
def no_template_format_error(manifest)
|
300
351
|
no_template = manifest.no_template
|
301
352
|
return if [false, true].include? no_template
|