zendesk_apps_support 4.44.0.alpha.5 → 4.44.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 819e620049b981005127f9ebf2f8beb2eda7869af04dfbf9beb48d5600527371
4
- data.tar.gz: 3e19f3ed1983ee0acfb4b321ad4534f4f86ab50c156722b9d8fd12951f8b7eca
3
+ metadata.gz: 6ab47aa0e5d6274fd6b7527a5bb09dc16c833359464c5535855940892466687e
4
+ data.tar.gz: 34e8962b318292e95eb5b784bddaea7a409d4fe7feb0edd010aa76021bc13d04
5
5
  SHA512:
6
- metadata.gz: df1ff143120996fb43f41e6aefd6438519c5a89b27c16a9c60870f963243b9c1d07681cb8b2c9e3dab68a917b1c43c58b17a492f74b760a43fa4c81b003ad35e
7
- data.tar.gz: cbe74096f6e394d03fad114b625635af807f194a251ebec7b21b9e58cd80d0fd51475958c1dae62f06488e7363496b48a822c81638e68edbad3e10701838b888
6
+ metadata.gz: 3783f916fe8f1546a9c9eba93c13e91a7bb1690f8872fb056be89fec7f48f901b491f757a7b5117d7f14bf1bcb902ae2aef58dad4c9e733462c4a4648291eb37
7
+ data.tar.gz: 3a075c7d184f66d49ab4fe5f569ea8196eca5ef51288fad0a36035d9de0058cea9868047cece4f0fca78351944133d05132e53a511113238c1cf2262f34a3145
@@ -281,6 +281,11 @@ en:
281
281
  invalid_url: '%{field} must be a valid URL, got "%{value}".'
282
282
  password_parameter_type_deprecated: 'Password parameter type can no longer
283
283
  be used. Use Secure settings instead. Learn more: %{link}.'
284
+ field_requires_secure_parameter: "%{field} cannot be defined in a non-secure
285
+ parameter."
286
+ field_cannot_be_empty: "%{field} cannot be empty."
287
+ field_contains_invalid_values: "%{field} contains invalid values: %{values}."
288
+ field_contains_invalid_keys: "%{field} contains invalid keys: %{keys}."
284
289
  warning:
285
290
  app_build:
286
291
  deprecated_version: You are targeting a deprecated version of the framework.
@@ -633,3 +633,19 @@ parts:
633
633
  key: "txt.apps.admin.error.app_build.password_parameter_type_deprecated"
634
634
  title: "App builder job: Password parameter type is deprecated"
635
635
  value: "Password parameter type can no longer be used. Use Secure settings instead. Learn more: %{link}."
636
+ - translation:
637
+ key: "txt.apps.admin.error.app_build.field_requires_secure_parameter"
638
+ title: "App builder job: Error when parameter field requires secure setting set to true. Placeholder %{field} shows parameter field along with parameter name like \"parameter[name='param'].scopes\" found in the supplied manifest file."
639
+ value: "%{field} cannot be defined in a non-secure parameter."
640
+ - translation:
641
+ key: "txt.apps.admin.error.app_build.field_cannot_be_empty"
642
+ title: "App builder job: field cannot be empty. %{field} will be replaced with empty fields such as \"name\", \"author\" \"parameter[name='param'].scopes\" etc in the supplied manifest file."
643
+ value: "%{field} cannot be empty."
644
+ - translation:
645
+ key: "txt.apps.admin.error.app_build.field_contains_invalid_values"
646
+ title: "App builder job: Error for invalid field values. Placeholder %{field} shows parameter fields like \"parameter[name='param'].scopes\" in the supplied manifest file, %{values} shows the invalid values in the user input corresponding to those fields."
647
+ value: "%{field} contains invalid values: %{values}."
648
+ - translation:
649
+ key: "txt.apps.admin.error.app_build.field_contains_invalid_keys"
650
+ title: "App builder job: Error for invalid field keys. Placeholder %{field} shows parameter fields like \"parameter[name='param'].scopes\" provided in the supplied manifest file, %{keys} shows the invalid keys found within the field."
651
+ value: "%{field} contains invalid keys: %{keys}."
@@ -4,7 +4,7 @@ module ZendeskAppsSupport
4
4
  class Manifest
5
5
  class Parameter
6
6
  TYPES = %w[text password checkbox url number multiline hidden oauth].freeze
7
- ATTRIBUTES = %i[name type required secure default].freeze
7
+ ATTRIBUTES = %i[name type required secure default scopes].freeze
8
8
  attr_reader(*ATTRIBUTES)
9
9
  def default?
10
10
  @has_default
@@ -17,6 +17,7 @@ module ZendeskAppsSupport
17
17
  @secure = p['secure'] || false
18
18
  @has_default = p.key? 'default'
19
19
  @default = p['default'] if @has_default
20
+ @scopes = p['scopes']
20
21
  end
21
22
  end
22
23
  end
@@ -36,9 +36,10 @@ module ZendeskAppsSupport
36
36
  skip_marketplace_translations = options.fetch(:skip_marketplace_translations, false)
37
37
  error_on_password_parameter = options.fetch(:error_on_password_parameter, false)
38
38
  validate_custom_objects_v2 = options.fetch(:validate_custom_objects_v2, false)
39
+ validate_scopes_for_secure_parameter = options.fetch(:validate_scopes_for_secure_parameter, false)
39
40
 
40
41
  errors = []
41
- errors << Validations::Manifest.call(self, error_on_password_parameter: error_on_password_parameter)
42
+ errors << Validations::Manifest.call(self, error_on_password_parameter: error_on_password_parameter, validate_scopes_for_secure_parameter: validate_scopes_for_secure_parameter)
42
43
 
43
44
  if has_valid_manifest?(errors)
44
45
  errors << Validations::Marketplace.call(self) if marketplace
@@ -11,9 +11,10 @@ module ZendeskAppsSupport
11
11
  OAUTH_REQUIRED_FIELDS = %w[client_id client_secret authorize_uri access_token_uri].freeze
12
12
  PARAMETER_TYPES = ZendeskAppsSupport::Manifest::Parameter::TYPES
13
13
  OAUTH_MANIFEST_LINK = 'https://developer.zendesk.com/apps/docs/developer-guide/manifest#oauth'
14
+ SECURE_PARAM_SCOPES = %w[header body url_host url_path jwt_secret_key jwt_claim basic_auth_username basic_auth_password].freeze
14
15
 
15
16
  class << self
16
- def call(package, error_on_password_parameter: false)
17
+ def call(package, error_on_password_parameter: false, validate_scopes_for_secure_parameter: false)
17
18
  unless package.has_file?('manifest.json')
18
19
  nested_manifest = package.files.find { |file| file =~ %r{\A[^/]+?/manifest\.json\Z} }
19
20
  if nested_manifest
@@ -24,7 +25,7 @@ module ZendeskAppsSupport
24
25
 
25
26
  package.warnings << password_parameter_warning if !error_on_password_parameter && password_param_present?(package.manifest)
26
27
 
27
- collate_manifest_errors(package, error_on_password_parameter)
28
+ collate_manifest_errors(package, error_on_password_parameter, validate_scopes_for_secure_parameter)
28
29
  rescue JSON::ParserError => e
29
30
  return [ValidationError.new(:manifest_not_json, errors: e)]
30
31
  rescue ZendeskAppsSupport::Manifest::OverrideError => e
@@ -37,7 +38,7 @@ module ZendeskAppsSupport
37
38
  manifest.parameters.any? { |p| p.type == 'password' }
38
39
  end
39
40
 
40
- def collate_manifest_errors(package, error_on_password_parameter)
41
+ def collate_manifest_errors(package, error_on_password_parameter, validate_scopes_for_secure_parameter)
41
42
  manifest = package.manifest
42
43
 
43
44
  errors = [
@@ -46,7 +47,7 @@ module ZendeskAppsSupport
46
47
  oauth_error(manifest),
47
48
  default_locale_error(manifest, package),
48
49
  validate_urls(manifest),
49
- validate_parameters(manifest),
50
+ validate_parameters(manifest, validate_scopes_for_secure_parameter),
50
51
  if manifest.requirements_only? || manifest.marketing_only?
51
52
  [ ban_location(manifest),
52
53
  ban_framework_version(manifest) ]
@@ -87,7 +88,7 @@ module ZendeskAppsSupport
87
88
  errors
88
89
  end
89
90
 
90
- def validate_parameters(manifest)
91
+ def validate_parameters(manifest, validate_scopes_for_secure_parameter)
91
92
  if manifest.marketing_only?
92
93
  marketing_only_errors(manifest)
93
94
  else
@@ -97,7 +98,8 @@ module ZendeskAppsSupport
97
98
  invalid_type_error(manifest),
98
99
  too_many_oauth_parameters(manifest),
99
100
  oauth_cannot_be_secure(manifest),
100
- name_as_parameter_name_error(manifest)
101
+ name_as_parameter_name_error(manifest),
102
+ *(validate_scopes_for_secure_parameter ? invalid_secure_param_scopes_errors(manifest) : invalid_scopes_key_error(manifest)),
101
103
  ]
102
104
  end
103
105
  end
@@ -110,6 +112,52 @@ module ZendeskAppsSupport
110
112
  end
111
113
  end
112
114
 
115
+ def invalid_scopes_key_error(manifest)
116
+ errors = []
117
+ manifest.parameters.each do |parameter|
118
+ next if parameter.scopes.nil?
119
+
120
+ errors << ValidationError.new(:field_contains_invalid_keys,
121
+ field: "parameters[name=\"#{parameter.name}\"]",
122
+ keys: 'scopes')
123
+ end
124
+ errors
125
+ end
126
+
127
+ def invalid_secure_param_scopes_errors(manifest)
128
+ errors = []
129
+
130
+ manifest.parameters.each do |parameter|
131
+ next if parameter.scopes.nil?
132
+
133
+ unless parameter.secure
134
+ errors << ValidationError.new(:field_requires_secure_parameter, field: "parameters[name=\"#{parameter.name}\"].scopes")
135
+ end
136
+
137
+ unless parameter.scopes.is_a?(Array)
138
+ errors << ValidationError.new(:unacceptable_array,
139
+ field: "parameters[name=\"#{parameter.name}\"].scopes",
140
+ value: parameter.scopes.class.to_s)
141
+ next
142
+ end
143
+
144
+ if parameter.scopes.empty?
145
+ errors << ValidationError.new(:field_cannot_be_empty, field: "parameters[name=\"#{parameter.name}\"].scopes")
146
+ end
147
+
148
+ invalid_scopes = parameter.scopes - SECURE_PARAM_SCOPES
149
+ if invalid_scopes.any?
150
+ errors << ValidationError.new(
151
+ :field_contains_invalid_values,
152
+ field: "parameters[name=\"#{parameter.name}\"].scopes",
153
+ values: invalid_scopes.join(I18n.t('txt.apps.admin.error.app_build.listing_comma'))
154
+ )
155
+ end
156
+ end
157
+
158
+ errors
159
+ end
160
+
113
161
  def marketing_only_errors(manifest)
114
162
  [
115
163
  ban_parameters(manifest),
@@ -261,12 +309,12 @@ module ZendeskAppsSupport
261
309
  end
262
310
 
263
311
  invalid_required = manifest.parameters.map do |parameter|
264
- validate_boolean(parameter.required, "parameters.#{parameter.name}.required")
312
+ validate_boolean(parameter.required, "parameters[name=\"#{parameter.name}\"].required")
265
313
  end.compact
266
314
  return invalid_required if invalid_required.any?
267
315
 
268
316
  invalid_secure = manifest.parameters.map do |parameter|
269
- validate_boolean(parameter.secure, "parameters.#{parameter.name}.secure")
317
+ validate_boolean(parameter.secure, "parameters[name=\"#{parameter.name}\"].secure")
270
318
  end.compact
271
319
  return invalid_secure if invalid_secure.any?
272
320
  end
@@ -1,3 +1,3 @@
1
1
  module ZendeskAppsSupport
2
- VERSION = '4.44.0.alpha.5'
2
+ VERSION = "4.44.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zendesk_apps_support
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.44.0.alpha.5
4
+ version: 4.44.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James A. Rosen
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2025-10-29 00:00:00.000000000 Z
14
+ date: 2025-11-06 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: i18n