zendesk_apps_support 4.4.2 → 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d2e58ed37d53238a4125173c9b4cc4e401a2364
4
- data.tar.gz: 31120c07af28f6a706c6be119012d8345aa51f74
3
+ metadata.gz: 68ec75f6edd58e546096a0264c27bb17652cdac8
4
+ data.tar.gz: f7941d0e10b8ed005b59e88af3c2c6ac50dbe742
5
5
  SHA512:
6
- metadata.gz: 7d793ec518b66b7e1890f89a04e714987a61a335343c4007246782689eb6abc5b4af258338049f46a331a4400026d0d572761d410eb851b053f2fbb1ef5d9d8d
7
- data.tar.gz: 0b9bb7cc6678f80e2dd19009fe6a314831fa59e73aab6035a1640cd505e29cc672a60a3636e82923ec59600f874c3d4d92a6ee576b25d30fe903eaf468c58a1b
6
+ metadata.gz: 006e9e8e880b349aa33a3fcff1925e3fccbe9b12ff0ee950ecba54a79ba73363652f43fddfe27720263c6d949da4b06af14d9ce7a0120fc4c43623fe571e5d20
7
+ data.tar.gz: 38c4f30c83611fd1e81b13e50df3e5c25027e07348b9dd6352d926cfee0560c156dec281c90e0fd7fbe3ad4fce23c0c9bde28758899ad357ed3c658bd9ffe240
@@ -57,6 +57,8 @@ en:
57
57
  banner:
58
58
  invalid_format: Banner image must be a PNG file.
59
59
  invalid_size: Invalid banner image dimensions. Must be %{required_banner_width}x%{required_banner_height}px.
60
+ dirty_svg: "%{svg} contains invalid markup and was unable to be automatically
61
+ regenerated."
60
62
  oauth_keys:
61
63
  missing:
62
64
  one: 'Missing required oauth field in manifest: %{missing_keys}'
@@ -120,3 +122,5 @@ en:
120
122
  deprecated_version: You are targeting a deprecated version of the framework.
121
123
  Your app will work, but it might break when the new framework version
122
124
  is deployed.
125
+ sanitised_svg: The markup in %{svg} has been edited for use in Zendesk,
126
+ and may not display as intended.
@@ -128,6 +128,10 @@ parts:
128
128
  key: "txt.apps.admin.error.app_build.banner.invalid_size"
129
129
  title: "App builder job: Banner image invalid size error"
130
130
  value: "Invalid banner image dimensions. Must be %{required_banner_width}x%{required_banner_height}px."
131
+ - translation:
132
+ key: "txt.apps.admin.error.app_build.dirty_svg"
133
+ title: "App builder job: invalid SVG markup error"
134
+ value: "%{svg} contains invalid markup and was unable to be automatically regenerated."
131
135
  - translation:
132
136
  key: "txt.apps.admin.error.app_build.oauth_keys.missing.one"
133
137
  title: "App builder job: missing oauth fields error"
@@ -202,6 +206,10 @@ parts:
202
206
  key: "txt.apps.admin.warning.app_build.deprecated_version"
203
207
  title: "App builder job: deprecated version specified"
204
208
  value: 'You are targeting a deprecated version of the framework. Your app will work, but it might break when the new framework version is deployed.'
209
+ - translation:
210
+ key: "txt.apps.admin.warning.app_build.sanitised_svg"
211
+ title: "App builder job: warning that contents of svg have been sanitised and overwritten"
212
+ value: "The markup in %{svg} has been edited for use in Zendesk, and may not display as intended."
205
213
  - translation:
206
214
  key: "txt.apps.admin.error.app_build.invalid_version"
207
215
  title: "App builder job: invalid framework version"
@@ -27,6 +27,7 @@ module ZendeskAppsSupport
27
27
  autoload :Stylesheets, 'zendesk_apps_support/validations/stylesheets'
28
28
  autoload :Requirements, 'zendesk_apps_support/validations/requirements'
29
29
  autoload :Banner, 'zendesk_apps_support/validations/banner'
30
+ autoload :Svg, 'zendesk_apps_support/validations/svg'
30
31
  end
31
32
 
32
33
  class Manifest
@@ -30,6 +30,7 @@ module ZendeskAppsSupport
30
30
  def validate(marketplace: true)
31
31
  [].tap do |errors|
32
32
  errors << Validations::Manifest.call(self)
33
+
33
34
  if has_manifest?
34
35
  errors << Validations::Marketplace.call(self) if marketplace
35
36
  errors << Validations::Source.call(self)
@@ -43,6 +44,7 @@ module ZendeskAppsSupport
43
44
  end
44
45
 
45
46
  errors << Validations::Banner.call(self) if has_banner?
47
+ errors << Validations::Svg.call(self) if has_svgs?
46
48
 
47
49
  errors.flatten!.compact!
48
50
  end
@@ -91,6 +93,10 @@ module ZendeskAppsSupport
91
93
  @lib_files ||= js_files.select { |f| f =~ %r{^lib/} }
92
94
  end
93
95
 
96
+ def svg_files
97
+ @svg_files ||= files.select { |f| f =~ %r{^assets/.*\.svg$} }
98
+ end
99
+
94
100
  def template_files
95
101
  files.select { |f| f =~ %r{^templates/.*\.hdbs$} }
96
102
  end
@@ -181,6 +187,10 @@ module ZendeskAppsSupport
181
187
  File.file?(path_to(path))
182
188
  end
183
189
 
190
+ def has_svgs?
191
+ svg_files.any?
192
+ end
193
+
184
194
  def has_requirements?
185
195
  has_file?(REQUIREMENTS_FILENAME)
186
196
  end
@@ -7,7 +7,7 @@ module ZendeskAppsSupport
7
7
  BANNER_WIDTH = 830
8
8
  BANNER_HEIGHT = 200
9
9
 
10
- class <<self
10
+ class << self
11
11
  def call(package)
12
12
  File.open(package.path_to('assets/banner.png'), 'rb') do |fh|
13
13
  begin
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+ require 'loofah'
3
+
4
+ module ZendeskAppsSupport
5
+ module Validations
6
+ module Svg
7
+ @strip_declaration = Loofah::Scrubber.new do |node|
8
+ node.remove if node.name == 'xml' && node.children.empty?
9
+ end
10
+
11
+ @empty_malformed_markup = Loofah::Scrubber.new do |node|
12
+ node.next.remove while node.name == 'svg' && node.next
13
+ end
14
+
15
+ # CRUFT: ignore a (very specific) style attribute which Loofah would otherwise scrub.
16
+ # This attribute is deprecated (https://www.w3.org/TR/filter-effects/#AccessBackgroundImage)
17
+ # but is included in many of the test apps used in fixtures for tests in ZAM, ZAT etc.
18
+ @remove_enable_background = Loofah::Scrubber.new do |node|
19
+ match_pattern = Regexp.new("enable-background:.*?(\;|\z)")
20
+ if node.name == 'svg' && node['style']
21
+ node['style'] = node['style'].gsub(match_pattern, '')
22
+ node.attributes['style'].remove if node['style'].empty?
23
+ end
24
+ end
25
+
26
+ class << self
27
+ def call(package)
28
+ errors = []
29
+
30
+ package.svg_files.each do |svg|
31
+ markup = Loofah.xml_fragment(svg.read)
32
+ .scrub!(@strip_declaration)
33
+ .scrub!(@remove_enable_background)
34
+ .to_xml.strip
35
+
36
+ clean_markup = Loofah.xml_fragment(markup)
37
+ .scrub!(:prune)
38
+ .scrub!(@empty_malformed_markup)
39
+ .to_xml
40
+
41
+ filepath = svg.relative_path
42
+
43
+ next if clean_markup == markup
44
+ begin
45
+ compressed_clean_markup = clean_markup.tr("\n", '').squeeze(' ').gsub(/\>\s+\</, '><')
46
+ IO.write(filepath, compressed_clean_markup)
47
+ package.warnings << I18n.t('txt.apps.admin.warning.app_build.sanitised_svg', svg: filepath)
48
+ rescue
49
+ errors << ValidationError.new(:dirty_svg, svg: filepath)
50
+ end
51
+ end
52
+ errors
53
+ end
54
+ end
55
+ end
56
+ end
57
+ 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.4.2
4
+ version: 4.5.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: 2017-09-25 00:00:00.000000000 Z
14
+ date: 2017-10-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: i18n
@@ -111,6 +111,34 @@ dependencies:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
113
  version: 0.3.0
114
+ - !ruby/object:Gem::Dependency
115
+ name: loofah
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ - !ruby/object:Gem::Dependency
129
+ name: nokogiri
130
+ requirement: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: 1.6.8
135
+ type: :runtime
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: 1.6.8
114
142
  - !ruby/object:Gem::Dependency
115
143
  name: rspec
116
144
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +195,20 @@ dependencies:
167
195
  - - "~>"
168
196
  - !ruby/object:Gem::Version
169
197
  version: 0.46.0
198
+ - !ruby/object:Gem::Dependency
199
+ name: byebug
200
+ requirement: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: 9.0.6
205
+ type: :development
206
+ prerelease: false
207
+ version_requirements: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: 9.0.6
170
212
  description: Support to help you develop Zendesk Apps.
171
213
  email:
172
214
  - dev@zendesk.com
@@ -207,6 +249,7 @@ files:
207
249
  - lib/zendesk_apps_support/validations/requirements.rb
208
250
  - lib/zendesk_apps_support/validations/source.rb
209
251
  - lib/zendesk_apps_support/validations/stylesheets.rb
252
+ - lib/zendesk_apps_support/validations/svg.rb
210
253
  - lib/zendesk_apps_support/validations/templates.rb
211
254
  - lib/zendesk_apps_support/validations/translations.rb
212
255
  - lib/zendesk_apps_support/validations/validation_error.rb
@@ -222,7 +265,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
265
  requirements:
223
266
  - - ">="
224
267
  - !ruby/object:Gem::Version
225
- version: '0'
268
+ version: '2.0'
226
269
  required_rubygems_version: !ruby/object:Gem::Requirement
227
270
  requirements:
228
271
  - - ">="