rest_pki 1.0.0 → 1.1.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +6 -1
  4. data/lib/rest_pki.rb +32 -0
  5. data/lib/rest_pki/cades_signature.rb +52 -0
  6. data/lib/rest_pki/color.rb +37 -0
  7. data/lib/rest_pki/digest_algorithm.rb +158 -0
  8. data/lib/rest_pki/digest_algorithm_and_value.rb +29 -0
  9. data/lib/rest_pki/oids.rb +163 -0
  10. data/lib/rest_pki/pades_measurement_units.rb +6 -0
  11. data/lib/rest_pki/pades_page_orientation.rb +7 -0
  12. data/lib/rest_pki/pades_paper_size.rb +17 -0
  13. data/lib/rest_pki/pades_signature_explorer.rb +17 -0
  14. data/lib/rest_pki/pades_signer_info.rb +11 -0
  15. data/lib/rest_pki/pades_size.rb +17 -0
  16. data/lib/rest_pki/pades_visual_rectangle.rb +25 -0
  17. data/lib/rest_pki/page_optimization.rb +34 -0
  18. data/lib/rest_pki/pdf_container_definition.rb +266 -0
  19. data/lib/rest_pki/pdf_helper.rb +29 -0
  20. data/lib/rest_pki/pdf_mark.rb +81 -0
  21. data/lib/rest_pki/pdf_mark_element.rb +54 -0
  22. data/lib/rest_pki/pdf_mark_element_type.rb +7 -0
  23. data/lib/rest_pki/pdf_mark_image.rb +25 -0
  24. data/lib/rest_pki/pdf_mark_image_element.rb +33 -0
  25. data/lib/rest_pki/pdf_mark_page_options.rb +8 -0
  26. data/lib/rest_pki/pdf_mark_qr_code_element.rb +32 -0
  27. data/lib/rest_pki/pdf_mark_text_element.rb +47 -0
  28. data/lib/rest_pki/pdf_marker.rb +61 -0
  29. data/lib/rest_pki/pdf_text_section.rb +57 -0
  30. data/lib/rest_pki/pdf_text_style.rb +7 -0
  31. data/lib/rest_pki/pk_algorithms.rb +173 -0
  32. data/lib/rest_pki/pk_certificate.rb +99 -0
  33. data/lib/rest_pki/resource_content_or_reference.rb +25 -0
  34. data/lib/rest_pki/resources/pades_explorer_model.rb +12 -0
  35. data/lib/rest_pki/resources/pdf_marker_model.rb +12 -0
  36. data/lib/rest_pki/signature_algorithm_and_value.rb +11 -0
  37. data/lib/rest_pki/signature_explorer.rb +48 -0
  38. data/lib/rest_pki/signature_policy_identifier.rb +10 -0
  39. data/lib/rest_pki/validation_item.rb +2 -2
  40. data/lib/rest_pki/validation_results.rb +11 -11
  41. data/lib/rest_pki/version.rb +1 -1
  42. metadata +37 -3
@@ -0,0 +1,6 @@
1
+ module RestPki
2
+ class PadesMeasurementUnits
3
+ CENTIMETERS = 'Centimeters'
4
+ PDF_POINTS = 'PdfPoints'
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ module RestPki
2
+ class PadesPageOrientation
3
+ AUTO = 'Auto'
4
+ PORTRAIT = 'Portrait'
5
+ LANDSCAPE = 'Landscape'
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ module RestPki
2
+ class PadesPaperSize
3
+ CUSTOM = 'Custom'
4
+ A0 = 'A0'
5
+ A1 = 'A1'
6
+ A2 = 'A2'
7
+ A3 = 'A3'
8
+ A4 = 'A4'
9
+ A5 = 'A5'
10
+ A6 = 'A6'
11
+ A7 = 'A7'
12
+ A8 = 'A8'
13
+ LETTER = 'Letter'
14
+ LEGAL = 'Legal'
15
+ LEDGER = 'Ledger'
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module RestPki
2
+ PDF_MIME_TYPE = 'application/pdf'
3
+ class PadesSignatureExplorer < SignatureExplorer
4
+ def initialize(restpki_client)
5
+ super(restpki_client)
6
+ end
7
+
8
+ def open()
9
+ if @signature_file_content.to_s.empty?
10
+ raise 'The signature file to be opened not set'
11
+ end
12
+
13
+ request = get_request(PDF_MIME_TYPE)
14
+ @restpki_client.post('Api/PadesSignatures/Open', request, 'pades_explorer_model')
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module RestPki
2
+ class PadesSignerInfo < CadesSignerInfo
3
+ attr_reader :is_document_timestamp, :signature_fie_id_name
4
+
5
+ def initialize(model)
6
+ super(model)
7
+ @is_document_timestamp = model['isDocumentTimestamp']
8
+ @signature_fie_id_name = model['signatureFieldName']
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module RestPki
2
+ class PadesSize
3
+ attr_accessor :width, :height
4
+
5
+ def initialize(width, height)
6
+ @width = width
7
+ @height = height
8
+ end
9
+
10
+ def to_model
11
+ {
12
+ width: @width,
13
+ height: @height,
14
+ }
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module RestPki
2
+ class PadesVisualRectangle
3
+ attr_accessor :left, :right, :top, :bottom, :width, :height
4
+
5
+ def initialize()
6
+ @left = nil
7
+ @top = nil
8
+ @right = nil
9
+ @bottom = nil
10
+ @width = nil
11
+ @height = nil
12
+ end
13
+
14
+ def to_model()
15
+ return {
16
+ left: @left,
17
+ top: @top,
18
+ right: @right,
19
+ bottom: @bottom,
20
+ width: @width,
21
+ height: @height
22
+ }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ module RestPki
2
+ class PageOptimization
3
+ attr_accessor :paper_size, :page_orientation
4
+ attr_reader :custom_paper_size
5
+
6
+ def initialize(paper_size = nil, custom_paper_size = nil, page_orientation = nil)
7
+ @paper_size = paper_size
8
+ @page_orientation = page_orientation
9
+ unless custom_paper_size.nil?
10
+ @custom_paper_size = PadesSize.new(custom_paper_size.width, custom_paper_size.height)
11
+ end
12
+ end
13
+
14
+ def custom_paper_size=(value)
15
+ @custom_paper_size = value
16
+ @paper_size = PadesPaperSize::CUSTOM
17
+ end
18
+
19
+ def to_model
20
+ custom_paper_size = nil
21
+ if @paper_size.equal?(PadesPaperSize::CUSTOM)
22
+ if @custom_paper_size.nil?
23
+ raise 'The custom paper size parameters was not provided'
24
+ end
25
+ custom_paper_size = @custom_paper_size.to_model
26
+ end
27
+ {
28
+ paperSize: @paper_size,
29
+ customPaperSize: custom_paper_size,
30
+ pageOrientation: @page_orientation,
31
+ }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,266 @@
1
+ module RestPki
2
+ class PdfContainerDefinition
3
+ attr_reader :container
4
+
5
+ def initialize
6
+ @container = PadesVisualRectangle.new
7
+ end
8
+
9
+ def width(value)
10
+ @container.width = value
11
+ FixedWidth.new(@container)
12
+ end
13
+
14
+ def var_width
15
+ VarWidth.new(@container)
16
+ end
17
+
18
+ def full_width
19
+ @container.left = 0.0
20
+ @container.right = 0.0
21
+ WidthDefined.new(@container)
22
+ end
23
+
24
+ def height(value)
25
+ @container.height = value
26
+ FixedHeight.new(@container)
27
+ end
28
+
29
+ def var_height
30
+ VarHeight.new(@container)
31
+ end
32
+
33
+ def full_height
34
+ @container.top = 0.0
35
+ @container.bottom = 0.0
36
+ HeightDefined.new(@container)
37
+ end
38
+
39
+ def var_width_and_height
40
+ VarWidthAndHeight.new(@container)
41
+ end
42
+
43
+ def full
44
+ @container.top = 0.0
45
+ @container.right = 0.0
46
+ @container.bottom = 0.0
47
+ @container.left = 0.0
48
+ @container
49
+ end
50
+ end
51
+
52
+ class FixedWidth
53
+
54
+ def initialize(container)
55
+ @container = container
56
+ end
57
+
58
+ def anchor_left(margin=0.0)
59
+ @container.left = margin
60
+ WidthDefined.new(@container)
61
+ end
62
+
63
+ def anchor_right(margin=0.0)
64
+ @container.right = margin
65
+ WidthDefined.new(@container)
66
+ end
67
+
68
+ def center
69
+ WidthDefined.new(@container)
70
+ end
71
+ end
72
+
73
+ class VarWidth
74
+
75
+ def initialize(container)
76
+ @container = container
77
+ end
78
+
79
+ def margins(left_margin, right_margin=nil)
80
+ if right_margin.nil?
81
+ right_margin = left_margin
82
+ end
83
+ @container.left = left_margin
84
+ @container.right = right_margin
85
+ WidthDefined.new(@container)
86
+ end
87
+ end
88
+
89
+ class FixedHeight
90
+
91
+ def initialize(container)
92
+ @container = container
93
+ end
94
+
95
+ def anchor_top(margin=0.0)
96
+ @container.top = margin
97
+ HeightDefined.new(@container)
98
+ end
99
+
100
+ def anchor_bottom(margin=0.0)
101
+ @container.bottom = margin
102
+ HeightDefined.new(@container)
103
+ end
104
+
105
+ def center
106
+ HeightDefined.new(@container)
107
+ end
108
+ end
109
+
110
+ class VarHeight
111
+
112
+ def initialize(container)
113
+ @container = container
114
+ end
115
+
116
+ def margins(top_margin, bottom_margin=nil)
117
+ if bottom_margin.nil?
118
+ bottom_margin = top_margin
119
+ end
120
+ @container.top = top_margin
121
+ @container.bottom = bottom_margin
122
+ HeightDefined.new(@container)
123
+ end
124
+ end
125
+
126
+ class WidthDefined
127
+ def initialize(container)
128
+ @container = container
129
+ end
130
+
131
+ def height(value)
132
+ @container.height = value
133
+ WidthDefinedFixedHeight.new(@container)
134
+ end
135
+
136
+ def var_height
137
+ WidthDefinedVarHeight.new(@container)
138
+ end
139
+
140
+ def full_height
141
+ @container.top = 0.0
142
+ @container.bottom = 0.0
143
+ @container
144
+ end
145
+ end
146
+
147
+ class HeightDefined
148
+ def initialize(container)
149
+ @container = container
150
+ end
151
+
152
+ def width(value)
153
+ @container.width = value
154
+ HeightDefinedFixedWidth.new(@container)
155
+ end
156
+
157
+ def var_width
158
+ HeightDefinedVarWidth.new(@container)
159
+ end
160
+
161
+ def full_width
162
+ @container.left = 0.0
163
+ @container.right = 0.0
164
+ @container
165
+ end
166
+ end
167
+
168
+ class WidthDefinedFixedHeight
169
+
170
+ def initialize(container)
171
+ @container = container
172
+ end
173
+
174
+ def anchor_top(margin=0.0)
175
+ @container.top = margin
176
+ @container
177
+ end
178
+
179
+ def anchor_bottom(margin=0.0)
180
+ @container.bottom = margin
181
+ @container
182
+ end
183
+
184
+ def center
185
+ @container
186
+ end
187
+ end
188
+
189
+ class WidthDefinedVarHeight
190
+
191
+ def initialize(container)
192
+ @container = container
193
+ end
194
+
195
+ def margins(top_margin, bottom_margin=nil)
196
+ if bottom_margin.nil?
197
+ bottom_margin = top_margin
198
+ end
199
+ @container.top = top_margin
200
+ @container.bottom = bottom_margin
201
+ @container
202
+ end
203
+ end
204
+
205
+ class HeightDefinedFixedWidth
206
+
207
+ def initialize(container)
208
+ @container = container
209
+ end
210
+
211
+ def anchor_left(margin=0.0)
212
+ @container.left = margin
213
+ @container
214
+ end
215
+
216
+ def anchor_right(margin=0.0)
217
+ @container.right = margin
218
+ @container
219
+ end
220
+
221
+ def center
222
+ @container
223
+ end
224
+ end
225
+
226
+ class HeightDefinedVarWidth
227
+
228
+ def initialize(container)
229
+ @container = container
230
+ end
231
+
232
+ def margins(left_margin, right_margin=nil)
233
+ if right_margin.nil?
234
+ right_margin = left_margin
235
+ end
236
+ @container.left = left_margin
237
+ @container.right = right_margin
238
+ @container
239
+ end
240
+ end
241
+
242
+ class VarWidthAndHeight
243
+
244
+ def initialize(container)
245
+ @container = container
246
+ end
247
+
248
+ def margins(top_margin, right_margin=nil, bottom_margin=nil, left_margin=nil)
249
+ if right_margin.nil?
250
+ right_margin = top_margin
251
+ end
252
+ if bottom_margin.nil?
253
+ bottom_margin = top_margin
254
+ end
255
+ if left_margin.nil?
256
+ left_margin = right_margin
257
+ end
258
+ @container.top = top_margin
259
+ @container.right = right_margin
260
+ @container.left = left_margin
261
+ @container.bottom = bottom_margin
262
+ @container
263
+ end
264
+ end
265
+
266
+ end
@@ -0,0 +1,29 @@
1
+ module RestPki
2
+ class PdfHelper
3
+ def initialize; end
4
+
5
+ def container
6
+ PdfContainerDefinition.new
7
+ end
8
+
9
+ def mark
10
+ PdfMark.new
11
+ end
12
+
13
+ def text_element
14
+ PdfMarkTextElement.new
15
+ end
16
+
17
+ def image_element
18
+ PdfMarkImageElement.new
19
+ end
20
+
21
+ def qr_code_element
22
+ PdfMarkQRCodeElement.new
23
+ end
24
+
25
+ def text_section(text=nil)
26
+ PdfTextSection.new(text)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,81 @@
1
+ module RestPki
2
+ class PdfMark
3
+ attr_accessor :container, :border_width, :border_color, :background_color, :page_option, :page_option_number
4
+ attr_reader :elements
5
+
6
+ def initialize
7
+ @container = nil
8
+ @border_width = 0.0
9
+ @border_color = Color.from_rgb_string('#000000') # Black
10
+ @background_color = Color.from_rgb_string('#FFFFFF', 0) # Transparent
11
+ @elements = []
12
+ @page_option = PdfMarkPageOptions::ALL_PAGES
13
+ @page_option_number = nil
14
+ end
15
+
16
+ def to_model
17
+ elements = @elements.map { |e| e.to_model }
18
+
19
+ {
20
+ container: @container,
21
+ backgroundColor: @background_color.to_model,
22
+ borderColor: @border_color.to_model,
23
+ borderWidth: @border_width,
24
+ elements: elements,
25
+ pageOption: @page_option,
26
+ pageOptionNumber: @page_option_number,
27
+ }
28
+ end
29
+
30
+ #region FluentApi
31
+
32
+ def on_container(container)
33
+ @container = container
34
+ self
35
+ end
36
+
37
+ def with_border_width(border_width)
38
+ @border_width = border_width
39
+ self
40
+ end
41
+
42
+ def on_all_pages
43
+ @page_option = PdfMarkPageOptions::ALL_PAGES
44
+ self
45
+ end
46
+
47
+ def on_new_page
48
+ @page_option = PdfMarkPageOptions::NEW_PAGE
49
+ self
50
+ end
51
+
52
+ def on_single_page(page_number)
53
+ @page_option = PdfMarkPageOptions::SINGLE_PAGE
54
+ @page_option_number = page_number
55
+ self
56
+ end
57
+
58
+ def on_single_page_from_end(page_number)
59
+ @page_option = PdfMarkPageOptions::SINGLE_PAGE_FROM_END
60
+ @page_option_number = page_number
61
+ self
62
+ end
63
+
64
+ def add_element(element)
65
+ @elements.push(element)
66
+ self
67
+ end
68
+
69
+ def with_border_color(border_color)
70
+ @border_color = border_color
71
+ self
72
+ end
73
+
74
+ def with_background_color(background_color)
75
+ @background_color = background_color
76
+ self
77
+ end
78
+ #endregion
79
+
80
+ end
81
+ end