echochamber 1.0.1
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 +7 -0
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +79 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +22 -0
- data/README.md +87 -0
- data/Rakefile +12 -0
- data/doc/Echochamber.html +131 -0
- data/doc/Echochamber/Agreement.html +529 -0
- data/doc/Echochamber/Agreement/UrlFileInfo.html +263 -0
- data/doc/Echochamber/Client.html +4161 -0
- data/doc/Echochamber/CounterSignerInfo.html +265 -0
- data/doc/Echochamber/Credentials.html +330 -0
- data/doc/Echochamber/Credentials/CredentialsError.html +123 -0
- data/doc/Echochamber/Fileinfo.html +303 -0
- data/doc/Echochamber/InvalidParameterError.html +123 -0
- data/doc/Echochamber/ParameterError.html +123 -0
- data/doc/Echochamber/PhoneInfo.html +279 -0
- data/doc/Echochamber/Recipient.html +309 -0
- data/doc/Echochamber/RecipientSecurityOption.html +294 -0
- data/doc/Echochamber/Reminder.html +277 -0
- data/doc/Echochamber/Request.html +4167 -0
- data/doc/Echochamber/Request/Failure.html +123 -0
- data/doc/Echochamber/RequiredParameterError.html +123 -0
- data/doc/Echochamber/UrlFileInfo.html +295 -0
- data/doc/Echochamber/User.html +420 -0
- data/doc/Echochamber/Validatable.html +355 -0
- data/doc/Echochamber/Validator.html +180 -0
- data/doc/Echochamber/Widget.html +654 -0
- data/doc/Echochamber/WidgetCompletionInfo.html +309 -0
- data/doc/Echochamber/WidgetPersonalization.html +326 -0
- data/doc/Echochamber/WidgetSecurityOption.html +359 -0
- data/doc/Echochamber/WidgetSignerSecurityOption.html +296 -0
- data/doc/Echochamber/WidgetStatus.html +314 -0
- data/doc/Echochamber/WidgetVaultingInfo.html +265 -0
- data/doc/_index.html +338 -0
- data/doc/class_list.html +54 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +157 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +157 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +178 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +581 -0
- data/doc/top-level-namespace.html +112 -0
- data/echochamber.gemspec +35 -0
- data/features/support/env.rb +8 -0
- data/fixtures/agreement.pdf +0 -0
- data/fixtures/vcr_cassettes/agreement_combined_pdf.yml +1465 -0
- data/fixtures/vcr_cassettes/agreement_document_file.yml +1465 -0
- data/fixtures/vcr_cassettes/agreement_documents.yml +42 -0
- data/fixtures/vcr_cassettes/agreement_form_data.yml +44 -0
- data/fixtures/vcr_cassettes/agreement_info.yml +50 -0
- data/fixtures/vcr_cassettes/agreement_signing_urls.yml +42 -0
- data/fixtures/vcr_cassettes/audit_trail_pdf.yml +1643 -0
- data/fixtures/vcr_cassettes/cancel_agreement.yml +46 -0
- data/fixtures/vcr_cassettes/create_agreement.yml +50 -0
- data/fixtures/vcr_cassettes/create_reminder.yml +47 -0
- data/fixtures/vcr_cassettes/create_transient_document.yml +716 -0
- data/fixtures/vcr_cassettes/create_user.yml +50 -0
- data/fixtures/vcr_cassettes/create_widget.yml +48 -0
- data/fixtures/vcr_cassettes/get_agreements.yml +46 -0
- data/fixtures/vcr_cassettes/get_library_document.yml +45 -0
- data/fixtures/vcr_cassettes/get_library_document_data.yml +1191 -0
- data/fixtures/vcr_cassettes/get_library_document_file.yml +42 -0
- data/fixtures/vcr_cassettes/get_library_documents.yml +47 -0
- data/fixtures/vcr_cassettes/get_token.yml +44 -0
- data/fixtures/vcr_cassettes/get_user.yml +46 -0
- data/fixtures/vcr_cassettes/get_users.yml +43 -0
- data/fixtures/vcr_cassettes/get_widget.yml +49 -0
- data/fixtures/vcr_cassettes/get_widget_document_file.yml +2682 -0
- data/fixtures/vcr_cassettes/get_widget_documents.yml +44 -0
- data/fixtures/vcr_cassettes/get_widgets.yml +50 -0
- data/fixtures/vcr_cassettes/library_combined_document.yml +2197 -0
- data/fixtures/vcr_cassettes/library_document_audit_trail.yml +1570 -0
- data/fixtures/vcr_cassettes/personalize_widget.yml +47 -0
- data/fixtures/vcr_cassettes/update_widget_status.yml +46 -0
- data/lib/echochamber.rb +10 -0
- data/lib/echochamber/agreement.rb +32 -0
- data/lib/echochamber/agreement/client.rb +118 -0
- data/lib/echochamber/agreement/fileinfo.rb +20 -0
- data/lib/echochamber/agreement/phone_info.rb +19 -0
- data/lib/echochamber/agreement/recipient.rb +23 -0
- data/lib/echochamber/agreement/recipient_security_option.rb +20 -0
- data/lib/echochamber/agreement/request.rb +142 -0
- data/lib/echochamber/agreement/url_file_info.rb +18 -0
- data/lib/echochamber/client.rb +82 -0
- data/lib/echochamber/credentials.rb +33 -0
- data/lib/echochamber/library_documents/client.rb +83 -0
- data/lib/echochamber/library_documents/request.rb +78 -0
- data/lib/echochamber/reminder.rb +17 -0
- data/lib/echochamber/request.rb +141 -0
- data/lib/echochamber/user.rb +29 -0
- data/lib/echochamber/validatable.rb +54 -0
- data/lib/echochamber/version.rb +3 -0
- data/lib/echochamber/widget.rb +42 -0
- data/lib/echochamber/widget/client.rb +127 -0
- data/lib/echochamber/widget/counter_signer_info.rb +19 -0
- data/lib/echochamber/widget/request.rb +135 -0
- data/lib/echochamber/widget/widget_completion_info.rb +19 -0
- data/lib/echochamber/widget/widget_personalization.rb +21 -0
- data/lib/echochamber/widget/widget_security_option.rb +22 -0
- data/lib/echochamber/widget/widget_signer_security_option.rb +18 -0
- data/lib/echochamber/widget/widget_status.rb +20 -0
- data/lib/echochamber/widget/widget_vaulting_info.rb +16 -0
- data/spec/lib/agreement/client_spec.rb +157 -0
- data/spec/lib/client_spec.rb +78 -0
- data/spec/lib/library_documents/client_spec.rb +71 -0
- data/spec/lib/request_spec.rb +18 -0
- data/spec/lib/shared_client.rb +22 -0
- data/spec/lib/user_spec.rb +6 -0
- data/spec/lib/validatable_spec.rb +110 -0
- data/spec/lib/version_spec.rb +7 -0
- data/spec/lib/widget/client_spec.rb +154 -0
- data/spec/spec_helper.rb +21 -0
- metadata +344 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Echochamber
|
|
2
|
+
class UrlFileInfo < Hash
|
|
3
|
+
|
|
4
|
+
include Validatable
|
|
5
|
+
|
|
6
|
+
# Validates UrlFileInfo parameters
|
|
7
|
+
#
|
|
8
|
+
# @param [Hash] params SYMBOL-referenced Hash
|
|
9
|
+
# @option params [String] :url A publicly accessible URL for retrieving the raw file content. HTTP authentication is supported using standard embedded syntax - i.e. http://username:password@your.server.com/path/to/file (REQUIRED)
|
|
10
|
+
# @option params [String] :mimeType The mime type of the referenced file, used to determine if the file can be accepted and the necessary conversion steps can be performed.
|
|
11
|
+
# @option params [String] :name The original system file name of the document being sent - used to name attachments, and to infer the mime type if one is not explicitly specified
|
|
12
|
+
def initialize(params)
|
|
13
|
+
require_keys([:url], params)
|
|
14
|
+
merge! params
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require 'echochamber/agreement/client'
|
|
2
|
+
require 'echochamber/library_documents/client'
|
|
3
|
+
require 'echochamber/widget/client'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
module Echochamber
|
|
7
|
+
|
|
8
|
+
class Client
|
|
9
|
+
|
|
10
|
+
attr_reader :token
|
|
11
|
+
# Initializes the Client object
|
|
12
|
+
#
|
|
13
|
+
# @param credentials [Echochamber::Credentials] Initialized Echochamber::Credentials
|
|
14
|
+
# @return [Echochamber::Client] Initialized Echochamber::Client
|
|
15
|
+
def initialize(credentials)
|
|
16
|
+
@token = Echochamber::Request.get_token(credentials)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Creates a user for the current application
|
|
20
|
+
#
|
|
21
|
+
# @param user [Echochamber::User]
|
|
22
|
+
# @return [String] User ID of new Echosign user
|
|
23
|
+
def create_user(user)
|
|
24
|
+
user_response = Echochamber::Request.create_user(user, token)
|
|
25
|
+
user_response.fetch("userId")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Creates a reminder
|
|
29
|
+
#
|
|
30
|
+
# @param reminder [Echochamber::Reminder]
|
|
31
|
+
# @return [String] Reminder ID
|
|
32
|
+
def create_reminder(reminder)
|
|
33
|
+
reminder_response = Echochamber::Request.create_reminder(token, reminder)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Creates a transient document for later referral
|
|
37
|
+
#
|
|
38
|
+
# @param file_name [String]
|
|
39
|
+
# @param mime_type [String]
|
|
40
|
+
# @param file_handle [File]
|
|
41
|
+
# @return [String] Transient document ID
|
|
42
|
+
def create_transient_document(file_name, mime_type, file_handle)
|
|
43
|
+
transient_document_response = Echochamber::Request.create_transient_document(token, file_name, file_handle, mime_type)
|
|
44
|
+
transient_document_response.fetch("transientDocumentId")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Retrieve a PDF audit file for an agreement
|
|
48
|
+
#
|
|
49
|
+
# @param agreement_id [String] (REQUIRED)
|
|
50
|
+
# @param file_path [String] File path to save the document. If no file path is given, nothing is saved to disk.
|
|
51
|
+
# @return [String] Raw bytes from document file
|
|
52
|
+
def audit_trail_pdf(agreement_id, file_path=nil)
|
|
53
|
+
response = Echochamber::Request.audit_trail_pdf(token, agreement_id)
|
|
54
|
+
unless file_path.nil?
|
|
55
|
+
file = File.new(file_path, 'wb')
|
|
56
|
+
file.write(response)
|
|
57
|
+
file.close
|
|
58
|
+
end
|
|
59
|
+
response
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# Gets all the users in an account that the caller has permissions to access.
|
|
64
|
+
#
|
|
65
|
+
# @param user_email [String] The email address of the user whose details are being requested (REQUIRED)
|
|
66
|
+
# @return [Hash] User info hash
|
|
67
|
+
def get_users(user_email)
|
|
68
|
+
Echochamber::Request.get_users(token, user_email)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Gets all the users in an account that the caller has permissions to access.
|
|
72
|
+
#
|
|
73
|
+
# @param user_id [String]
|
|
74
|
+
# @return [Hash] User info hash
|
|
75
|
+
def get_user(user_id)
|
|
76
|
+
Echochamber::Request.get_user(token, user_id)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
end # class Client
|
|
81
|
+
|
|
82
|
+
end # module Echochamber
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Echochamber
|
|
2
|
+
class Credentials < Hash
|
|
3
|
+
|
|
4
|
+
include Validatable
|
|
5
|
+
|
|
6
|
+
# Builds a Credentials object
|
|
7
|
+
#
|
|
8
|
+
# @param app_id [String] Application key
|
|
9
|
+
# @param app_secret [String] Application secret
|
|
10
|
+
# @param api_key [String] API Key
|
|
11
|
+
# @param email [String] User email
|
|
12
|
+
# @param password [String] User password
|
|
13
|
+
# @return [Echochamber::Credentials] Echosign credentials
|
|
14
|
+
def initialize(app_id, app_secret, api_key, email, password)
|
|
15
|
+
|
|
16
|
+
merge!(
|
|
17
|
+
{
|
|
18
|
+
applicationCredentials: {
|
|
19
|
+
applicationId: app_id,
|
|
20
|
+
applicationSecret: app_secret
|
|
21
|
+
},
|
|
22
|
+
userCredentials: {
|
|
23
|
+
apiKey: api_key,
|
|
24
|
+
email: email,
|
|
25
|
+
password: password
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
module Echochamber
|
|
2
|
+
|
|
3
|
+
class Client
|
|
4
|
+
|
|
5
|
+
# Retrieves library documents metadata for a user.
|
|
6
|
+
#
|
|
7
|
+
# @param user_id [String] The ID of the user whose library documents are being requested.
|
|
8
|
+
# @param user_email [String] The email address of the user whose library documents are being requested. If both user_id and user_email are provided then user_id is given preference. If neither is specified then the user is inferred from the access token.
|
|
9
|
+
# @return [Hash] Library documents metadata
|
|
10
|
+
def get_library_documents(user_id=nil, user_email=nil)
|
|
11
|
+
Echochamber::Request.get_library_documents(token, user_id, user_email)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Retrieves library document metadata
|
|
15
|
+
#
|
|
16
|
+
# @param library_document_id [String] (REQUIRED)
|
|
17
|
+
# @return [Hash] Library document metadata
|
|
18
|
+
def get_library_document(library_document_id)
|
|
19
|
+
Echochamber::Request.get_library_document(token, library_document_id)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Retrieves library document files metadata
|
|
23
|
+
#
|
|
24
|
+
# @param library_document_id [String] (REQUIRED)
|
|
25
|
+
# @return [Hash] Library document files metadata
|
|
26
|
+
def get_library_document_files(library_document_id)
|
|
27
|
+
Echochamber::Request.get_library_document_files(token, library_document_id)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Retrieves library document file data
|
|
31
|
+
#
|
|
32
|
+
# @param library_document_id (REQUIRED)
|
|
33
|
+
# @param file_id [String] (REQUIRED)
|
|
34
|
+
# @param file_path [String] File path for saving the document. If none is given, nothing will be saved to disk.
|
|
35
|
+
# @return [String] Raw library document file data
|
|
36
|
+
def get_library_document_file(library_document_id, file_id, file_path=nil)
|
|
37
|
+
response = Echochamber::Request.get_library_document_file(token, library_document_id, file_id)
|
|
38
|
+
unless file_path.nil?
|
|
39
|
+
file = File.new(file_path, 'wb')
|
|
40
|
+
file.write(response)
|
|
41
|
+
file.close
|
|
42
|
+
end
|
|
43
|
+
response
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Retrieves library document audit trail file
|
|
47
|
+
#
|
|
48
|
+
# @param library_document_id (REQUIRED)
|
|
49
|
+
# @param file_path [String] File path for saving the document. If none is given, nothing will be saved to disk.
|
|
50
|
+
# @return [String] Raw library document file data
|
|
51
|
+
def library_document_audit_trail(library_document_id, file_path=nil)
|
|
52
|
+
response = Echochamber::Request.library_document_audit_trail(token, library_document_id)
|
|
53
|
+
unless file_path.nil?
|
|
54
|
+
file = File.new(file_path, 'wb')
|
|
55
|
+
file.write(response)
|
|
56
|
+
file.close
|
|
57
|
+
end
|
|
58
|
+
response
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Retrieves library combined document file
|
|
62
|
+
#
|
|
63
|
+
# @param library_document_id (REQUIRED)
|
|
64
|
+
# @param file_path [String] File path for saving the document. If none is given, nothing will be saved to disk.
|
|
65
|
+
# @param auditReport [Boolean] When set to YES attach an audit report to the library document PDF. Default value will be false.
|
|
66
|
+
# @return [String] Raw library combined document file data
|
|
67
|
+
def library_combined_document(library_document_id, file_path=nil, auditReport=false)
|
|
68
|
+
response = Echochamber::Request.library_combined_document(token, library_document_id, auditReport)
|
|
69
|
+
unless file_path.nil?
|
|
70
|
+
file = File.new(file_path, 'wb')
|
|
71
|
+
file.write(response)
|
|
72
|
+
file.close
|
|
73
|
+
end
|
|
74
|
+
response
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Echochamber::Request
|
|
2
|
+
|
|
3
|
+
# Retrieves library documents for a user.
|
|
4
|
+
#
|
|
5
|
+
# @param token [String] Auth Token
|
|
6
|
+
# @param user_id [String] The ID of the user whose library documents are being requested.
|
|
7
|
+
# @param user_email [String] The email address of the user whose library documents are being requested. If both user_id and user_email are provided then user_id is given preference. If neither is specified then the user is inferred from the access token.
|
|
8
|
+
# @return [Hash] Library documents metadata
|
|
9
|
+
def self.get_library_documents(token, user_id=nil, user_email=nil)
|
|
10
|
+
headers = { 'Access-Token' => token }
|
|
11
|
+
headers.merge!('X-User-Id' => user_id) unless user_id.nil?
|
|
12
|
+
headers.merge!('X-User-Email' => user_email) unless user_email.nil?
|
|
13
|
+
endpoint = ENDPOINT.fetch(:libraryDocument)
|
|
14
|
+
response = get(endpoint, headers)
|
|
15
|
+
JSON.parse(response)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieves library document metadata for a user.
|
|
19
|
+
#
|
|
20
|
+
# @param token [String] Auth Token
|
|
21
|
+
# @param library_document_id [String]
|
|
22
|
+
# @return [Hash] Library document metadata
|
|
23
|
+
def self.get_library_document(token, library_document_id)
|
|
24
|
+
headers = { 'Access-Token' => token }
|
|
25
|
+
endpoint = "#{ENDPOINT.fetch(:libraryDocument)}/#{library_document_id}"
|
|
26
|
+
response = get(endpoint, headers)
|
|
27
|
+
JSON.parse(response)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Retrieves library document file
|
|
31
|
+
#
|
|
32
|
+
# @param token [String] Auth Token
|
|
33
|
+
# @param library_document_id [String] (REQUIRED)
|
|
34
|
+
# @return [Hash] Library document files metadata
|
|
35
|
+
def self.get_library_document_files(token, library_document_id)
|
|
36
|
+
headers = { 'Access-Token' => token }
|
|
37
|
+
endpoint = "#{ENDPOINT.fetch(:libraryDocument)}/#{library_document_id}/documents"
|
|
38
|
+
response = get(endpoint, headers)
|
|
39
|
+
JSON.parse(response)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Retrieves library document file data
|
|
43
|
+
#
|
|
44
|
+
# @param token [String] Auth Token
|
|
45
|
+
# @param library_document_id [String] (REQUIRED)
|
|
46
|
+
# @param file_id [String] (REQUIRED)
|
|
47
|
+
# @return [String] Library document file data
|
|
48
|
+
def self.get_library_document_file(token, library_document_id, file_id)
|
|
49
|
+
headers = { 'Access-Token' => token }
|
|
50
|
+
endpoint = "#{ENDPOINT.fetch(:libraryDocument)}/#{library_document_id}/documents/#{file_id}"
|
|
51
|
+
response = get(endpoint, headers)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Retrieves library document file data
|
|
55
|
+
#
|
|
56
|
+
# @param token [String] Auth Token
|
|
57
|
+
# @param library_document_id [String] (REQUIRED)
|
|
58
|
+
# @return [String] Library document file data
|
|
59
|
+
def self.library_document_audit_trail(token, library_document_id)
|
|
60
|
+
headers = { 'Access-Token' => token }
|
|
61
|
+
endpoint = "#{ENDPOINT.fetch(:libraryDocument)}/#{library_document_id}/auditTrail"
|
|
62
|
+
response = get(endpoint, headers)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Retrieves library combined document file
|
|
66
|
+
#
|
|
67
|
+
# @param token [String] Auth Token
|
|
68
|
+
# @param library_document_id [String] (REQUIRED)
|
|
69
|
+
# @return [String] Raw library combined document file data
|
|
70
|
+
def self.library_combined_document(token, library_document_id, auditReport)
|
|
71
|
+
headers = { 'Access-Token' => token }
|
|
72
|
+
endpoint = "#{ENDPOINT.fetch(:libraryDocument)}/#{library_document_id}/combinedDocument"
|
|
73
|
+
endpoint << add_query(endpoint, "auditReport=#{auditReport}")
|
|
74
|
+
response = get(endpoint, headers)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Echochamber
|
|
2
|
+
class Reminder < Hash
|
|
3
|
+
|
|
4
|
+
include Validatable
|
|
5
|
+
|
|
6
|
+
# Reminder options
|
|
7
|
+
#
|
|
8
|
+
# @param [Hash] params SYMBOL-referenced Hash containing exactly one of the following:
|
|
9
|
+
# @option params [String] :agreementId (REQUIRED)
|
|
10
|
+
# @option params [String] :comment An Optional message sent to the recipients, describing what is being sent and why their signatures are required.
|
|
11
|
+
# @return [Echochamber::Reminder]
|
|
12
|
+
def initialize(params)
|
|
13
|
+
require_keys([:agreementId], params)
|
|
14
|
+
merge!(params)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
require 'rest-client'
|
|
2
|
+
require 'echochamber/agreement/request'
|
|
3
|
+
require 'echochamber/library_documents/request'
|
|
4
|
+
require 'echochamber/widget/request'
|
|
5
|
+
|
|
6
|
+
module Echochamber::Request
|
|
7
|
+
class Failure < StandardError; end
|
|
8
|
+
|
|
9
|
+
BASE_URL = 'https://secure.echosign.com/api/rest/v2'
|
|
10
|
+
|
|
11
|
+
ENDPOINT = {
|
|
12
|
+
token: BASE_URL + '/auth/tokens',
|
|
13
|
+
user: BASE_URL + '/users',
|
|
14
|
+
agreement: BASE_URL + '/agreements',
|
|
15
|
+
reminder: BASE_URL + '/reminders',
|
|
16
|
+
transientDocument: BASE_URL + '/transientDocuments',
|
|
17
|
+
libraryDocument: BASE_URL + '/libraryDocuments',
|
|
18
|
+
widget: BASE_URL + '/widgets'
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
# Retrieves the authentication token
|
|
22
|
+
#
|
|
23
|
+
# @param credentials [Echochamber::Credentials] Initialized Echochamber::Credentials
|
|
24
|
+
# @return [String] Valid authentication token
|
|
25
|
+
def self.get_token(credentials)
|
|
26
|
+
headers = { :content_type => :json, :accept => :json }
|
|
27
|
+
response = post(ENDPOINT.fetch(:token), credentials, headers)
|
|
28
|
+
response_body = JSON.parse(response.body)
|
|
29
|
+
response_body.fetch("accessToken")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Performs REST create_user operation
|
|
33
|
+
#
|
|
34
|
+
# @param body [Hash] Valid request body
|
|
35
|
+
# @param token [String] Auth Token
|
|
36
|
+
# @return [Hash] New user response body
|
|
37
|
+
def self.create_user(body, token)
|
|
38
|
+
endpoint = ENDPOINT.fetch(:user)
|
|
39
|
+
headers = { :content_type => :json, :accept => :json, 'Access-Token' => token}
|
|
40
|
+
response = post(endpoint, body, headers)
|
|
41
|
+
JSON.parse(response.body)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Sends a reminder for an agreement.
|
|
45
|
+
#
|
|
46
|
+
# @param body [Hash] Valid request body
|
|
47
|
+
# @param token [String] Auth Token
|
|
48
|
+
# @return [Hash] Response body
|
|
49
|
+
def self.create_reminder(token, body)
|
|
50
|
+
endpoint = ENDPOINT.fetch(:reminder)
|
|
51
|
+
headers = { :content_type => :json, :accept => :json, 'Access-Token' => token}
|
|
52
|
+
response = post(endpoint, body, headers)
|
|
53
|
+
JSON.parse(response.body)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Performs REST create_transient_document operation
|
|
57
|
+
#
|
|
58
|
+
# @param token [String] Auth token (REQUIRED)
|
|
59
|
+
# @param file_name [String] File name (REQUIRED)
|
|
60
|
+
# @param file_handle [File] File handle (REQUIRED)
|
|
61
|
+
# @param mime_type [String] Mime type
|
|
62
|
+
# @return [Hash] Transient Document Response Body
|
|
63
|
+
def self.create_transient_document(token, file_name, file_handle, mime_type=nil)
|
|
64
|
+
headers = { :content_type => :json, :accept => :json, 'Access-Token' => token }
|
|
65
|
+
|
|
66
|
+
begin
|
|
67
|
+
response = RestClient.post(
|
|
68
|
+
ENDPOINT.fetch(:transientDocument),
|
|
69
|
+
{ 'File-Name' => file_name,
|
|
70
|
+
'Mime-Type' => mime_type,
|
|
71
|
+
'File' => file_handle,
|
|
72
|
+
:multipart => true},
|
|
73
|
+
headers
|
|
74
|
+
)
|
|
75
|
+
rescue Exception => error
|
|
76
|
+
raise_error(error)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
JSON.parse(response.body)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Gets all the users in an account that the caller has permissions to access.
|
|
83
|
+
#
|
|
84
|
+
# @param token [String] Auth Token
|
|
85
|
+
# @param user_email [String] The email address of the user whose details are being requested.
|
|
86
|
+
# @return [Hash] User info hash
|
|
87
|
+
def self.get_users(token, user_email)
|
|
88
|
+
headers = { 'Access-Token' => token }
|
|
89
|
+
endpoint = "#{ENDPOINT.fetch(:user)}?x-user-email=#{user_email}"
|
|
90
|
+
response = get(endpoint, headers)
|
|
91
|
+
JSON.parse(response)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Gets all the users in an account that the caller has permissions to access.
|
|
95
|
+
#
|
|
96
|
+
# @param token [String] Auth Token
|
|
97
|
+
# @param user_id [String]
|
|
98
|
+
# @return [Hash] User info hash
|
|
99
|
+
def self.get_user(token, user_id)
|
|
100
|
+
headers = { 'Access-Token' => token }
|
|
101
|
+
endpoint = "#{ENDPOINT.fetch(:user)}/#{user_id}"
|
|
102
|
+
response = get(endpoint, headers)
|
|
103
|
+
JSON.parse(response)
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
private
|
|
108
|
+
|
|
109
|
+
def self.get(endpoint, headers)
|
|
110
|
+
begin
|
|
111
|
+
RestClient.get(
|
|
112
|
+
endpoint,
|
|
113
|
+
headers
|
|
114
|
+
)
|
|
115
|
+
rescue Exception => error
|
|
116
|
+
raise_error(error)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def self.post(endpoint, body, headers)
|
|
121
|
+
begin
|
|
122
|
+
RestClient.post(
|
|
123
|
+
endpoint,
|
|
124
|
+
body.to_json,
|
|
125
|
+
headers
|
|
126
|
+
)
|
|
127
|
+
rescue Exception => error
|
|
128
|
+
raise_error(error)
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def self.add_query(url, query)
|
|
133
|
+
(url.include?('?') ? '&' : '?') + query
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def self.raise_error(error)
|
|
137
|
+
raise Failure, "#{error.inspect}. \nSee Adobe Echosign REST API documentation for Error code meanings: https://secure.echosign.com/public/docs/restapi/v2"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
141
|
+
|