policygen 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Policygen
4
+ module ViewHelpers
5
+ def privacy_policy
6
+ Renderer.new.privacy_policy.html_safe
7
+ end
8
+
9
+ def terms_of_service
10
+ Renderer.new.terms_of_service.html_safe
11
+ end
12
+
13
+ def cookie_policy
14
+
15
+ end
16
+ end
17
+ end
data/lib/policygen.rb ADDED
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "policygen/version"
4
+
5
+ # Policygen gem namespace
6
+ module Policygen
7
+ class Error < StandardError; end
8
+
9
+ # Returns Policygen gem configuration
10
+ def self.config
11
+ @config ||= Configuration.new
12
+ end
13
+
14
+ # Configures Policygen gem
15
+ # @yield [Configuration] configuration object
16
+ # @example
17
+ #
18
+ # Policygen.configure do |config|
19
+ # config.policy_path = "app/policies"
20
+ # end
21
+ def self.configure
22
+ yield config
23
+ end
24
+ end
25
+
26
+ require 'policygen/configuration'
27
+ require 'policygen/renderer'
28
+ require 'policygen/view_helpers'
29
+ require 'policygen/railtie' if defined?(Rails)
30
+ require 'policygen/sinatra' if defined?(Sinatra)
@@ -0,0 +1,404 @@
1
+ <div id="policygen-privacy-policy" class="<%= @css.container_class %>">
2
+ <h1 class="<%= @css.h1_class %>"><%= I18n.t('privacy_policy.title') %></h1>
3
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.last_updated', updated: @config.privacy_last_updated) %></h3>
4
+
5
+ <!-- Privacy notice -->
6
+ <section class="<%= @css.section_class %>">
7
+ <p class="<%= @css.body_class %>">
8
+ <%= I18n.t('privacy_policy.privacy_notice', entity_name: @config.entity_name, entity_website: @config.entity_website) %>
9
+ </p>
10
+ <ul class="<%= @css.ul_class %>">
11
+ <% @config.platforms.each do |platform| %>
12
+ <% if platform == :web %>
13
+ <li><%= I18n.t('privacy_policy.privacy_notice_web', entity_website: @config.entity_website) %></li>
14
+ <% elsif platform == :mobile %>
15
+ <li><%= I18n.t('privacy_policy.privacy_notice_mobile') %></li>
16
+ <% end %>
17
+ <% end %>
18
+ <li><%= I18n.t('privacy_policy.privacy_notice_other') %></li>
19
+ </ul>
20
+ <p class="<%= @css.body_class %>">
21
+ <%= I18n.t('privacy_policy.privacy_questions', privacy_email: @config.privacy_email, class: @css.link_class) %>
22
+ </p>
23
+ </section>
24
+
25
+ <!-- Summary -->
26
+ <section class="<%= @css.section_class %>">
27
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.summary.title') %></h2>
28
+ <p class="<%= @css.body_class %>">
29
+ <%= I18n.t('privacy_policy.summary.text') %>
30
+ </p>
31
+ <p class="<%= @css.body_class %>">
32
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.personal_information_question') %></span>
33
+ <% if @config.personal_information.empty? %>
34
+ <%= I18n.t('privacy_policy.summary.personal_information_no') %>
35
+ <% else %>
36
+ <%= I18n.t('privacy_policy.summary.personal_information_yes') %>
37
+ <a href="#personal-information" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.summary.personal_information_link') %></a>
38
+ <% end %>
39
+ </p>
40
+ <p class="<%= @css.body_class %>">
41
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.sensitive_information_question') %></span>
42
+ <% if @config.sensitive_information.empty? %>
43
+ <%= I18n.t('privacy_policy.summary.sensitive_information_no') %>
44
+ <% else %>
45
+ <%= I18n.t('privacy_policy.summary.sensitive_information_yes') %>
46
+ <a href="#sensitive-information" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.summary.sensitive_information_link') %></a>
47
+ <% end %>
48
+ </p>
49
+ <p class="<%= @css.body_class %>">
50
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.third_party_information_question') %></span>
51
+ <% if @config.third_party_data.empty? %>
52
+ <%= I18n.t('privacy_policy.summary.third_party_information_no') %>
53
+ <% else %>
54
+ <%= I18n.t('privacy_policy.summary.third_party_information_yes') %>
55
+ <a href="#third-party-data" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.summary.third_party_information_link') %></a>
56
+ <% end %>
57
+ </p>
58
+ <p class="<%= @css.body_class %>">
59
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.third_party_sharing_question') %></span>
60
+ <% if !@config.third_party_disclosure && !@config.third_party_sharing %>
61
+ <%= I18n.t('privacy_policy.summary.third_party_sharing_no') %>
62
+ <% else %>
63
+ <%= I18n.t('privacy_policy.summary.third_party_sharing_yes') %>
64
+ <a href="#third-party-sharing" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.summary.third_party_sharing_link') %></a>
65
+ <% end %>
66
+ </p>
67
+ <p class="<%= @css.body_class %>">
68
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.process_information_question') %></span>
69
+ <%= I18n.t('privacy_policy.summary.process_information') %>
70
+ <a href="#processing" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.summary.process_information_link') %></a>
71
+ </p>
72
+ <% if @config.security_measures %>
73
+ <p class="<%= @css.body_class %>">
74
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.security_measures_question') %></span>
75
+ <%= I18n.t('privacy_policy.summary.security_measures') %>
76
+ <a href="#security" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.summary.security_measures_link') %></a>
77
+ </p>
78
+ <% end %>
79
+ <p class="<%= @css.body_class %>">
80
+ <span class="<%= @css.bold_class %>"><%= I18n.t('privacy_policy.summary.rights_question') %></span>
81
+ <% if @config.privacy_page %>
82
+ <%= I18n.t('privacy_policy.summary.rights_link', privacy_page: @config.privacy_page, privacy_email: @config.privacy_email, class: @css.link_class) %>
83
+ <% else %>
84
+ <%= I18n.t('privacy_policy.summary.rights', privacy_email: @config.privacy_email, class: @css.link_class) %>
85
+ <% end %>
86
+ </p>
87
+ </section>
88
+
89
+ <!-- Policy Sections -->
90
+ <section class="<%= @css.section_class %>">
91
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.title') %></h1>
92
+ <ol class="<%= @css.ol_class %>">
93
+ <li><a href="#section-collected-information" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.information_we_collect') %></a></li>
94
+ <li><a href="#section-use" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.how_we_use_information') %></a></li>
95
+ <li><a href="#legal-basis" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.legal_basis') %></a></li>
96
+ <li><a href="#section-third-party-sharing" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.third_party_sharing') %></a></li>
97
+ <% if @config.web_tracking %>
98
+ <li><a href="#section-web-tracking" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.web_tracking') %></a></li>
99
+ <% end %>
100
+ <% if @config.security_measures %>
101
+ <li><a href="#section-security" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.security') %></a></li>
102
+ <% end %>
103
+ <li><a href="section-data-retention" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.data_retention') %></a></li>
104
+ <% if @config.us_state_privacy_laws %>
105
+ <li><a href="#section-us-state-privacy-laws" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.us_state_privacy_laws') %></a></li>
106
+ <% end %>
107
+ <li><a href="#section-privacy-rights" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.privacy_rights') %></a></li>
108
+ <li><a href="#section-privacy-policy-changes" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.policy_changes') %></a></li>
109
+ <li><a href="#section-contact" class="<%= @css.link_class %>"><%= I18n.t('privacy_policy.sections.contact') %></a></li>
110
+ </ol>
111
+ </section>
112
+
113
+ <!-- Collected Information -->
114
+ <section id="section-collected-information" class="<%= @css.section_class %>">
115
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.information_we_collect') %></h2>
116
+ <!-- Disclosed -->
117
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.information_we_collect.disclosed.heading') %></h3>
118
+ <!-- Personal -->
119
+ <% if @config.personal_information.empty? %>
120
+ <p class="<%= @css.body_class %>">
121
+ <%= I18n.t('privacy_policy.information_we_collect.disclosed.no_personal_information') %>
122
+ </p>
123
+ <% else %>
124
+ <p id="personal-information" class="<%= @css.body_class %>">
125
+ <%= I18n.t('privacy_policy.information_we_collect.disclosed.personal_information') %>
126
+ </p>
127
+ <ul class="<%= @css.ul_class %>">
128
+ <% @config.personal_information.each do |info| %>
129
+ <li><%= I18n.t("privacy_policy.information_we_collect.disclosed.#{info.to_s}") rescue info.to_s.titleize %></li>
130
+ <% end %>
131
+ </ul>
132
+ <% end %>
133
+ <!-- Sensitive -->
134
+ <% if @config.sensitive_information.empty? %>
135
+ <p class="<%= @css.body_class %>">
136
+ <%= I18n.t('privacy_policy.information_we_collect.disclosed.no_sensitive_information') %>
137
+ </p>
138
+ <% else %>
139
+ <p id="sensitive-information" class="<%= @css.body_class %>">
140
+ <%= I18n.t('privacy_policy.information_we_collect.disclosed.sensitive_information') %>
141
+ </p>
142
+ <ul class="<%= @css.ul_class %>">
143
+ <% @config.sensitive_information.each do |info| %>
144
+ <li><%= I18n.t("privacy_policy.information_we_collect.disclosed.#{info.to_s}") rescue info.to_s.titleize %></li>
145
+ <% end %>
146
+ </ul>
147
+ <% end %>
148
+ <!-- Payment Data -->
149
+ <% if @config.payment_data %>
150
+ <p class="<%= @css.body_class %>">
151
+ <%= I18n.t('privacy_policy.information_we_collect.disclosed.payment_data') %>
152
+ </p>
153
+ <% if !@config.payment_processors.empty? %>
154
+ <p class="<%= @css.body_class %>">
155
+ <%= I18n.t("privacy_policy.information_we_collect.disclosed.payment_processor") %>
156
+ </p>
157
+ <ul class="<%= @css.ul_class %>">
158
+ <% @config.payment_processors.each do |processor| %>
159
+ <li><a href="<%= processor %>" class="<%= @css.link_class %>"><%= processor %></a></li>
160
+ <% end %>
161
+ </ul>
162
+ <% end %>
163
+ <% end %>
164
+ <!-- Social Login -->
165
+ <% if @config.social_sign_in %>
166
+ <p class="<%= @css.body_class %>">
167
+ <%= I18n.t('privacy_policy.information_we_collect.disclosed.social_sign_in') %>
168
+ </p>
169
+ <% end %>
170
+
171
+ <!-- Derived Collected -->
172
+ <% if @config.app_usage_data || @config.web_tracking %>
173
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.information_we_collect.derived.heading') %></h3>
174
+ <!-- App Usage Data -->
175
+ <% if @config.app_usage_data %>
176
+ <p class="<%= @css.body_class %>">
177
+ <%= I18n.t('privacy_policy.information_we_collect.derived.app_usage_data') %>
178
+ </p>
179
+ <% end %>
180
+ <!-- Web Tracking -->
181
+ <% if @config.web_tracking %>
182
+ <p class="<%= @css.body_class %>">
183
+ <%= I18n.t('privacy_policy.information_we_collect.derived.cookies') %>
184
+ </p>
185
+ <p class="<%= @css.body_class %>">
186
+ <%= I18n.t('privacy_policy.information_we_collect.derived.web_tracking') %>
187
+ </p>
188
+ <% end %>
189
+ <% end %>
190
+
191
+ <!-- Third Party -->
192
+ <% if !@config.third_party_data.empty? %>
193
+ <h3 id="third-party-data" class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.information_we_collect.third_party.heading') %></h3>
194
+ <p class="<%= @css.body_class %>">
195
+ <%= I18n.t('privacy_policy.information_we_collect.third_party.data') %>
196
+ </p>
197
+ <ul class="<%= @css.ul_class %>">
198
+ <% @config.third_party_data.each do |info| %>
199
+ <li><%= I18n.t("privacy_policy.information_we_collect.third_party.#{info.to_s}") rescue info.to_s.titleize %></li>
200
+ <% end %>
201
+ </ul>
202
+ <% end %>
203
+ </section>
204
+
205
+ <!-- Use of Information -->
206
+ <section id="section-use" class="<%= @css.section_class %>">
207
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.how_we_use_information') %></h2>
208
+ <p class="<%= @css.body_class %>">
209
+ <%= I18n.t('privacy_policy.how_we_use_information.usage') %>
210
+ </p>
211
+ <% if @config.service_requirements.any? %>
212
+ <p class="<%= @css.body_class %>">
213
+ <%= I18n.t('privacy_policy.how_we_use_information.specifics') %>
214
+ </p>
215
+ <ul class="<%= @css.ul_class %>">
216
+ <% @config.service_requirements.each do |requirement| %>
217
+ <li><%= I18n.t("privacy_policy.how_we_use_information.#{requirement.to_s}") rescue requirement.to_s.titleize %></li>
218
+ <% end %>
219
+ </ul>
220
+ <% end %>
221
+ </section>
222
+
223
+ <!-- Legal Basis -->
224
+ <section id="legal-basis" class="<%= @css.section_class %>">
225
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.legal_basis') %></h2>
226
+ <p class="<%= @css.body_class %>">
227
+ <%= I18n.t('privacy_policy.legal_basis.text') %>
228
+ </p>
229
+ <ul class="<%= @css.ul_class %>">
230
+ <li><%= I18n.t('privacy_policy.legal_basis.consent') %></li>
231
+ <li><%= I18n.t('privacy_policy.legal_basis.contract') %></li>
232
+ <li><%= I18n.t('privacy_policy.legal_basis.legal') %></li>
233
+ <li><%= I18n.t('privacy_policy.legal_basis.vital_interests') %></li>
234
+ <li><%= I18n.t('privacy_policy.legal_basis.public_interest') %></li>
235
+ <li>
236
+ <%= I18n.t('privacy_policy.legal_basis.legitimate_interests') %>
237
+ <ul class="<%= @css.ul_class %>">
238
+ <% @config.legal_basis.each do |basis| %>
239
+ <li><%= I18n.t("privacy_policy.legal_basis.#{basis.to_s}") rescue basis.to_s.titleize %></li>
240
+ <% end %>
241
+ </ul>
242
+ </li>
243
+ </ul>
244
+ </section>
245
+
246
+ <!-- Third Party Sharing -->
247
+ <section id="section-third-party-sharing" class="<%= @css.section_class %>">
248
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.third_party_sharing') %></h2>
249
+ <% if @config.third_party_disclosure %>
250
+ <p class="<%= @css.body_class %>">
251
+ <%= I18n.t('privacy_policy.third_party_sharing.disclosure') %>
252
+ </p>
253
+ <% if @config.third_party_disclosure_entities.any? %>
254
+ <p class="<%= @css.body_class %>">
255
+ <%= I18n.t('privacy_policy.third_party_sharing.disclosure_entities') %>
256
+ </p>
257
+ <ul class="<%= @css.ul_class %>">
258
+ <% @config.third_party_disclosure_entities.each do |disclosure| %>
259
+ <li><%= I18n.t("privacy_policy.third_party_sharing.disclosure.#{disclosure.to_s}") rescue disclosure.to_s.titleize %></li>
260
+ <% end %>
261
+ </ul>
262
+ <% end %>
263
+ <% end %>
264
+ <p class="<%= @css.body_class %>">
265
+ <%= I18n.t('privacy_policy.third_party_sharing.business_transfers') %>
266
+ </p>
267
+ </section>
268
+
269
+ <!-- Web Tracking -->
270
+ <% if @config.web_tracking || @config.third_party_analytics %>
271
+ <section id="section-web-tracking" class="<%= @css.section_class %>">
272
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.web_tracking') %></h2>
273
+ <p class="<%= @css.body_class %>">
274
+ <%= I18n.t('privacy_policy.web_tracking.text') %>
275
+ </p>
276
+ <% if @config.web_tracking %>
277
+ <p class="<%= @css.body_class %>">
278
+ <%= I18n.t('privacy_policy.web_tracking.cookies') %>
279
+ </p>
280
+ <p class="<%= @css.body_class %>">
281
+ <%= I18n.t('privacy_policy.web_tracking.web_beacons') %>
282
+ </p>
283
+ <% end %>
284
+ <% if @config.third_party_analytics %>
285
+ <p class="<%= @css.body_class %>">
286
+ <%= I18n.t('privacy_policy.web_tracking.analytics') %>
287
+ </p>
288
+ <% end %>
289
+ </section>
290
+ <% end %>
291
+
292
+ <!-- Security Measures -->
293
+ <% if @config.security_measures %>
294
+ <section id="section-security" class="<%= @css.section_class %>">
295
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.security') %></h2>
296
+ <p class="<%= @css.body_class %>">
297
+ <%= I18n.t('privacy_policy.security.text') %>
298
+ </p>
299
+ </section>
300
+ <% end %>
301
+
302
+ <!-- Data Retention -->
303
+ <section id="section-data-retention" class="<%= @css.section_class %>">
304
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.data_retention') %></h2>
305
+ <p class="<%= @css.body_class %>">
306
+ <%= I18n.t('privacy_policy.data_retention.text') %>
307
+ </p>
308
+ <p class="<%= @css.body_class %>">
309
+ <% if @config.data_retention_period %>
310
+ <%= I18n.t('privacy_policy.data_retention.duration_custom', duration: @config.data_retention_period) %>
311
+ <% else %>
312
+ <%= I18n.t('privacy_policy.data_retention.duration_default') %>
313
+ <% end %>
314
+ </p>
315
+ <p class="<%= @css.body_class %>">
316
+ <%= I18n.t('privacy_policy.data_retention.deletion') %>
317
+ </p>
318
+ </section>
319
+
320
+ <!-- US State Privacy Laws -->
321
+ <% if @config.us_state_privacy_laws %>
322
+ <section id="section-us-state-privacy-laws" class="<%= @css.section_class %>">
323
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.us_state_privacy_laws') %></h2>
324
+
325
+ <!-- California -->
326
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.us_state_privacy_laws.california.heading') %></h3>
327
+ <p class="<%= @css.body_class %>">
328
+ <%= I18n.t('privacy_policy.us_state_privacy_laws.california.text') %>
329
+ </p>
330
+ <ul class="<%= @css.ul_class %>">
331
+ <li><%= I18n.t('privacy_policy.us_state_privacy_laws.california.right_to_know', privacy_email: @config.privacy_email, class: @css.link_class) %></li>
332
+ <li><%= I18n.t('privacy_policy.us_state_privacy_laws.california.right_to_delete', privacy_email: @config.privacy_email, class: @css.link_class) %></li>
333
+ <li><%= I18n.t('privacy_policy.us_state_privacy_laws.california.right_to_opt_out', privacy_email: @config.privacy_email, class: @css.link_class) %></li>
334
+ </ul>
335
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.us_state_privacy_laws.california.do_not_track_heading') %></h3>
336
+ <p class="<%= @css.body_class %>">
337
+ <%= I18n.t('privacy_policy.us_state_privacy_laws.california.do_not_track') %>
338
+ </p>
339
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.us_state_privacy_laws.california.shine_the_light_heading') %></h3>
340
+ <p class="<%= @css.body_class %>">
341
+ <%= I18n.t('privacy_policy.us_state_privacy_laws.california.shine_the_light', privacy_email: @config.privacy_email, class: @css.link_class) %>
342
+ </p>
343
+ <h3 class="<%= @css.h3_class %>"><%= I18n.t('privacy_policy.us_state_privacy_laws.california.minors_heading') %></h3>
344
+ <p class="<%= @css.body_class %>">
345
+ <%= I18n.t('privacy_policy.us_state_privacy_laws.california.minors') %>
346
+ </p>
347
+ </section>
348
+ <% end %>
349
+
350
+ <!-- Privacy Rights -->
351
+ <section id="section-privacy-rights" class="<%= @css.section_class %>">
352
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.privacy_rights') %></h2>
353
+ <p class="<%= @css.body_class %>">
354
+ <%= I18n.t('privacy_policy.privacy_rights.text') %>
355
+ </p>
356
+ <% if @config.privacy_page %>
357
+ <p class="<%= @css.body_class %>">
358
+ <%= I18n.t('privacy_policy.privacy_rights.access_page', privacy_page: @config.privacy_page, privacy_email: @config.privacy_email, class: @css.link_class) %>
359
+ </p>
360
+ <% else %>
361
+ <p class="<%= @css.body_class %>">
362
+ <%= I18n.t('privacy_policy.privacy_rights.access_email', privacy_email: @config.privacy_email, class: @css.link_class) %>
363
+ </p>
364
+ <% end %>
365
+ <p class="<%= @css.body_class %>">
366
+ <%= I18n.t('privacy_policy.privacy_rights.objection', privacy_email: @config.privacy_email, class: @css.link_class) %>
367
+ </p>
368
+ </section>
369
+
370
+ <!-- Privacy Policy Changes -->
371
+ <section id="section-privacy-policy-changes" class="<%= @css.section_class %>">
372
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.policy_changes') %></h2>
373
+ <p class="<%= @css.body_class %>">
374
+ <%= I18n.t('privacy_policy.policy_changes.text') %>
375
+ </p>
376
+ </section>
377
+
378
+ <!-- Contact -->
379
+ <section id="section-contact" class="<%= @css.section_class %>">
380
+ <h2 class="<%= @css.h2_class %>"><%= I18n.t('privacy_policy.sections.contact') %></h2>
381
+ <p class="<%= @css.body_class %>">
382
+ <%= I18n.t('privacy_policy.contact.text', privacy_email: @config.privacy_email, class: @css.link_class) %>
383
+ </p>
384
+ <p class="<%= @css.body_class %>">
385
+ <%= @config.entity_name %>
386
+ </p>
387
+ <% if @config.entity_address %>
388
+ <p class="<%= @css.body_class %>">
389
+ <%= I18n.t('privacy_policy.contact.address', entity_address: @config.entity_address) %>
390
+ </p>
391
+ <% end %>
392
+ <% if @config.dpo %>
393
+ <p class="<%= @css.body_class %>">
394
+ <%= I18n.t('privacy_policy.contact.dpo', dpo_name: @config.dpo_name) %>
395
+ </p>
396
+ <p>
397
+ <%= I18n.t('privacy_policy.contact.dpo_email', dpo_email: @config.dpo_email, class: @css.link_class) %>
398
+ </p>
399
+ <p>
400
+ <%= I18n.t('privacy_policy.contact.dpo_phone', dpo_phone: @config.dpo_phone) %>
401
+ </p>
402
+ <% end %>
403
+ </section>
404
+ </div>