digidoc_client 0.2.1 → 0.3.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 +4 -4
- data/README.markdown +22 -9
- data/lib/digidoc/client.rb +31 -13
- data/lib/digidoc/version.rb +1 -1
- metadata +26 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97cf4180a037e5662c655d3c2d715941bffb8e3d
|
4
|
+
data.tar.gz: e4626d04d2fdf7c1ad676425a6a8c2743ece33b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f16df55441c4cb37fa414d6e1189443a83972155aaf9988fc3236581ce21ddaca2e1aef9bed1eae68a77109cd683f51ab34481740a77597835a6cc1c4b202e6
|
7
|
+
data.tar.gz: 1b97636970606b98920b80b391a846803ec0a85271832b2c9165ff14bb2fdbd2bce93277921cf150d2c0365d246311937b0dda89b0482341663f0a98076e0bf1
|
data/README.markdown
CHANGED
@@ -12,7 +12,7 @@ Add gem dependency in your `Gemfile` and install the gem:
|
|
12
12
|
|
13
13
|
client = Digidoc::Client.new
|
14
14
|
client.authenticate(
|
15
|
-
:phone => '+
|
15
|
+
:phone => '+37260000007', :message_to_display => 'Authenticating',
|
16
16
|
:service_name => 'Testing'
|
17
17
|
)
|
18
18
|
client.authentication_status
|
@@ -20,24 +20,37 @@ Add gem dependency in your `Gemfile` and install the gem:
|
|
20
20
|
### Signing
|
21
21
|
|
22
22
|
client = Digidoc::Client.new
|
23
|
+
client.logger = Logger.new('digidoc_service.log')
|
23
24
|
client.start_session
|
24
|
-
client.create_signed_doc
|
25
|
+
client.create_signed_doc
|
25
26
|
client.signed_doc_info
|
26
|
-
|
27
|
+
|
27
28
|
file1 = File.open('file1.pdf')
|
28
29
|
client.add_datafile(file1)
|
29
30
|
file2 = File.open('file2.pdf')
|
30
31
|
client.add_datafile(file2)
|
31
|
-
|
32
|
-
client.mobile_sign(:phone => '
|
32
|
+
|
33
|
+
client.mobile_sign(:phone => '+37260000007', :role => ' My Company LLC / CTO')
|
33
34
|
client.sign_status
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
|
36
|
+
# Check signature status here...
|
37
|
+
|
38
|
+
client.save_signed_doc do |content, format|
|
39
|
+
File.open("signed_document.#{format}", 'w') do |f|
|
40
|
+
if format == :bdoc
|
41
|
+
f.binmode
|
42
|
+
f.write(Base64.decode64(content))
|
43
|
+
else
|
44
|
+
f.write(content)
|
45
|
+
end
|
46
|
+
end
|
37
47
|
end
|
38
|
-
|
48
|
+
|
39
49
|
client.close_session
|
40
50
|
|
51
|
+
### More test numbers and details
|
52
|
+
[In English](http://www.id.ee/?id=36381)
|
53
|
+
|
41
54
|
## Digidoc specifications
|
42
55
|
|
43
56
|
[In English](http://www.sk.ee/upload/files/DigiDocService_spec_eng.pdf)
|
data/lib/digidoc/client.rb
CHANGED
@@ -6,6 +6,7 @@ require 'crack/xml'
|
|
6
6
|
require 'mime/types'
|
7
7
|
require 'digest/sha1'
|
8
8
|
require 'nokogiri'
|
9
|
+
require 'logger'
|
9
10
|
|
10
11
|
class NestedOpenStruct < OpenStruct
|
11
12
|
def initialize(hash = nil)
|
@@ -24,13 +25,13 @@ module Digidoc
|
|
24
25
|
TestEndpointUrl = 'https://openxades.org:9443/DigiDocService'
|
25
26
|
|
26
27
|
class Client
|
27
|
-
|
28
|
-
attr_accessor :session_code, :endpoint_url, :respond_with_nested_struct, :embedded_datafiles
|
28
|
+
attr_accessor :logger, :session_code, :endpoint_url, :respond_with_nested_struct, :embedded_datafiles
|
29
29
|
|
30
30
|
def initialize(endpoint_url = TestEndpointUrl)
|
31
31
|
self.endpoint_url = endpoint_url || TestEndpointUrl
|
32
32
|
self.respond_with_nested_struct = true
|
33
33
|
self.embedded_datafiles = []
|
34
|
+
#self.logger = Logger.new(STDOUT)
|
34
35
|
end
|
35
36
|
|
36
37
|
# Authentication message
|
@@ -84,9 +85,11 @@ module Digidoc
|
|
84
85
|
def start_session(*args)
|
85
86
|
self.session_code = nil
|
86
87
|
self.embedded_datafiles = []
|
88
|
+
|
87
89
|
options = args.last || {}
|
88
90
|
signed_doc_file = options.delete(:signed_doc_file)
|
89
91
|
signed_doc_xml = signed_doc_file.read if signed_doc_file
|
92
|
+
signed_doc_xml = Base64.encode64(signed_doc_xml) if signed_doc_xml && signed_doc_xml.starts_with?('PK')
|
90
93
|
|
91
94
|
response = savon_client.call('StartSession') do |locals|
|
92
95
|
locals.message 'bHoldSession' => true, 'SigDocXML' => signed_doc_xml
|
@@ -104,12 +107,20 @@ module Digidoc
|
|
104
107
|
# Creates DigiDoc container
|
105
108
|
def create_signed_doc(*args)
|
106
109
|
options = args.last || {}
|
110
|
+
format = options.delete(:format) || :bdoc # vaikimisi bdoc
|
111
|
+
|
112
|
+
if format == :xml
|
113
|
+
version = '1.3'
|
114
|
+
format = 'DIGIDOC-XML'
|
115
|
+
elsif format == :bdoc
|
116
|
+
version = '2.1'
|
117
|
+
format = 'BDOC'
|
118
|
+
end
|
107
119
|
|
108
120
|
session_code = options.delete(:session_code) || self.session_code
|
109
|
-
version = options.delete(:version) || '1.3'
|
110
121
|
|
111
122
|
response = savon_client.call('CreateSignedDoc') do |locals|
|
112
|
-
locals.message 'Sesscode' => session_code, 'Format' =>
|
123
|
+
locals.message 'Sesscode' => session_code, 'Format' => format, 'Version' => version
|
113
124
|
end
|
114
125
|
|
115
126
|
result = soap_fault?(response) ? response.to_hash[:fault] : response.to_hash[:create_signed_doc_response]
|
@@ -245,8 +256,7 @@ module Digidoc
|
|
245
256
|
result = respond_with_hash_or_nested(response.to_hash[:fault])
|
246
257
|
else
|
247
258
|
escaped = Crack::XML.parse(response.http.body).to_hash['SOAP_ENV:Envelope']['SOAP_ENV:Body']['dig:GetSignedDocResponse']['SignedDocData']
|
248
|
-
|
249
|
-
digidoc_container = escaped#CGI.unescapeHTML(escaped)
|
259
|
+
digidoc_container = escaped
|
250
260
|
|
251
261
|
if embedded_datafiles.present?
|
252
262
|
xmldata = Nokogiri::XML(digidoc_container)
|
@@ -254,8 +264,10 @@ module Digidoc
|
|
254
264
|
digidoc_container = xmldata.to_xml
|
255
265
|
end
|
256
266
|
|
267
|
+
format = digidoc_container.starts_with?('<?xml') ? :xml : :bdoc
|
268
|
+
|
257
269
|
if block_given?
|
258
|
-
yield
|
270
|
+
yield(digidoc_container, format)
|
259
271
|
else
|
260
272
|
digidoc_container
|
261
273
|
end
|
@@ -314,17 +326,23 @@ module Digidoc
|
|
314
326
|
end
|
315
327
|
|
316
328
|
def savon_client
|
317
|
-
|
329
|
+
options = {
|
318
330
|
raise_errors: false,
|
319
331
|
endpoint: self.endpoint_url,
|
320
332
|
namespace: TargetNamespace,
|
321
333
|
open_timeout: 10,
|
322
334
|
ssl_version: :TLSv1,
|
323
|
-
ssl_verify_mode: :none
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
335
|
+
ssl_verify_mode: :none
|
336
|
+
}
|
337
|
+
|
338
|
+
if self.logger
|
339
|
+
options.merge!(logger: self.logger,
|
340
|
+
log_level: :debug,
|
341
|
+
log: true
|
342
|
+
)
|
343
|
+
end
|
344
|
+
|
345
|
+
Savon.client(options)
|
328
346
|
end
|
329
347
|
|
330
348
|
def datafile(filename, mime_type, size, content, id)
|
data/lib/digidoc/version.rb
CHANGED
metadata
CHANGED
@@ -1,153 +1,153 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: digidoc_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tarmo Talu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 2.3.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.3.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: savon
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.4.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.4.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mime-types
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.16'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.16'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: crack
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.1.8
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.1.8
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: nokogiri
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 1.4.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.4.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: guard
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: guard-rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: growl
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rb-fsevent
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
|
-
- -
|
143
|
+
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
145
|
version: '0'
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
description: An easy way to interact with Estonian DigiDoc services.
|
@@ -157,7 +157,7 @@ executables: []
|
|
157
157
|
extensions: []
|
158
158
|
extra_rdoc_files: []
|
159
159
|
files:
|
160
|
-
- .gitignore
|
160
|
+
- ".gitignore"
|
161
161
|
- Gemfile
|
162
162
|
- Guardfile
|
163
163
|
- README.markdown
|
@@ -178,17 +178,17 @@ require_paths:
|
|
178
178
|
- lib
|
179
179
|
required_ruby_version: !ruby/object:Gem::Requirement
|
180
180
|
requirements:
|
181
|
-
- -
|
181
|
+
- - ">="
|
182
182
|
- !ruby/object:Gem::Version
|
183
183
|
version: '0'
|
184
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
185
|
requirements:
|
186
|
-
- -
|
186
|
+
- - ">="
|
187
187
|
- !ruby/object:Gem::Version
|
188
188
|
version: '0'
|
189
189
|
requirements: []
|
190
190
|
rubyforge_project: digidoc_client
|
191
|
-
rubygems_version: 2.
|
191
|
+
rubygems_version: 2.2.2
|
192
192
|
signing_key:
|
193
193
|
specification_version: 4
|
194
194
|
summary: Ruby library to interact with Estonian DigiDoc services.
|