didww-v3 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/tests.yml +27 -0
  3. data/.rubocop.yml +22 -19
  4. data/CHANGELOG.md +53 -0
  5. data/Gemfile +20 -0
  6. data/README.md +7 -1
  7. data/Rakefile +6 -1
  8. data/bin/console +1 -0
  9. data/didww-v3.gemspec +3 -18
  10. data/lib/didww/{middleware.rb → base_middleware.rb} +5 -3
  11. data/lib/didww/callback/request_validator.rb +68 -0
  12. data/lib/didww/client.rb +91 -7
  13. data/lib/didww/complex_objects/base.rb +9 -6
  14. data/lib/didww/complex_objects/capacity_order_item.rb +17 -0
  15. data/lib/didww/complex_objects/cdr_export_filter.rb +1 -0
  16. data/lib/didww/complex_objects/configurations/base.rb +1 -0
  17. data/lib/didww/complex_objects/configurations/const.rb +1 -0
  18. data/lib/didww/complex_objects/configurations/h323_configuration.rb +1 -0
  19. data/lib/didww/complex_objects/configurations/iax2_configuration.rb +1 -0
  20. data/lib/didww/complex_objects/configurations/pstn_configuration.rb +1 -0
  21. data/lib/didww/complex_objects/configurations/sip_configuration.rb +11 -0
  22. data/lib/didww/complex_objects/configurations.rb +1 -0
  23. data/lib/didww/complex_objects/did_order_item.rb +14 -5
  24. data/lib/didww/encrypt.rb +101 -0
  25. data/lib/didww/jsonapi_middleware.rb +21 -0
  26. data/lib/didww/resources/address.rb +37 -0
  27. data/lib/didww/resources/address_verification.rb +56 -0
  28. data/lib/didww/resources/area.rb +12 -0
  29. data/lib/didww/resources/available_did.rb +13 -0
  30. data/lib/didww/resources/balance.rb +1 -0
  31. data/lib/didww/resources/base.rb +2 -1
  32. data/lib/didww/resources/capacity_pool.rb +47 -0
  33. data/lib/didww/resources/cdr_export.rb +12 -1
  34. data/lib/didww/resources/city.rb +5 -0
  35. data/lib/didww/resources/country.rb +1 -0
  36. data/lib/didww/resources/did.rb +9 -1
  37. data/lib/didww/resources/did_group.rb +5 -4
  38. data/lib/didww/resources/did_group_type.rb +1 -0
  39. data/lib/didww/resources/did_reservation.rb +17 -0
  40. data/lib/didww/resources/encrypted_file.rb +58 -0
  41. data/lib/didww/resources/identity.rb +78 -0
  42. data/lib/didww/resources/order.rb +10 -0
  43. data/lib/didww/resources/permanent_supporting_document.rb +15 -0
  44. data/lib/didww/resources/pop.rb +10 -0
  45. data/lib/didww/resources/proof.rb +19 -0
  46. data/lib/didww/resources/proof_type.rb +14 -0
  47. data/lib/didww/resources/public_key.rb +12 -0
  48. data/lib/didww/resources/qty_based_pricing.rb +20 -0
  49. data/lib/didww/resources/region.rb +1 -0
  50. data/lib/didww/resources/requirement.rb +61 -0
  51. data/lib/didww/resources/requirement_validation.rb +10 -0
  52. data/lib/didww/resources/shared_capacity_group.rb +27 -0
  53. data/lib/didww/resources/stock_keeping_unit.rb +1 -0
  54. data/lib/didww/resources/supporting_document_template.rb +14 -0
  55. data/lib/didww/resources/trunk/const.rb +1 -15
  56. data/lib/didww/resources/trunk.rb +2 -4
  57. data/lib/didww/resources/trunk_group.rb +1 -0
  58. data/lib/didww/version.rb +2 -1
  59. data/lib/didww.rb +5 -1
  60. metadata +39 -157
  61. data/.travis.yml +0 -5
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module ComplexObject
3
4
  module Configuration
@@ -149,6 +150,14 @@ module DIDWW
149
150
  # Nullable: No
150
151
  # Description: The transport layer that will be responsible for the actual transmission of SIP requests and responses (1 - UDP, 2 - TCP)
151
152
 
153
+ property :max_transfers, type: :integer
154
+ # Nullable: No
155
+ # Description: Max count of the REFER requests
156
+
157
+ property :max_30x_redirects, type: :integer
158
+ # Nullable: No
159
+ # Description: Max count of 301/302 redirects
160
+
152
161
  DEFAULTS = {
153
162
  username: DID_PLACEHOLDER,
154
163
  port: '5060',
@@ -161,6 +170,8 @@ module DIDWW
161
170
  dns_srv_failover_timer: 2000,
162
171
  rtp_timeout: 30,
163
172
  auth_enabled: false,
173
+ max_transfers: 0,
174
+ max_30x_redirects: 0,
164
175
  codec_ids: DEFAULT_CODEC_IDS,
165
176
  rerouting_disconnect_code_ids: DEFAULT_REROUTING_DISCONNECT_CODE_IDS,
166
177
  transport_protocol_id: 1
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'didww/complex_objects/configurations/base'
2
3
  require 'didww/complex_objects/configurations/sip_configuration'
3
4
  require 'didww/complex_objects/configurations/iax2_configuration'
@@ -1,14 +1,23 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module ComplexObject
3
4
  class DidOrderItem < Base
4
5
  # passed at order creation
5
- property :qty, type: :int
6
- property :sku_id, type: :string
6
+ property :qty, type: :int
7
+ property :available_did_id, type: :string
8
+ property :did_reservation_id, type: :string
9
+ property :sku_id, type: :string
10
+ property :billing_cycles_count, type: :string
7
11
 
8
12
  # returned
9
- property :setup_price, type: :decimal
10
- property :monthly_price, type: :decimal
11
- property :did_group_id, type: :string
13
+ property :setup_price, type: :decimal
14
+ property :monthly_price, type: :decimal
15
+ property :nrc, type: :decimal
16
+ property :mrc, type: :decimal
17
+ property :propated_mrc, type: :boolean
18
+ property :billed_from, type: :string
19
+ property :billed_to, type: :string
20
+ property :did_group_id, type: :string
12
21
  end
13
22
  end
14
23
  end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+ require 'openssl'
3
+ require 'openssl/oaep'
4
+ require 'net/http'
5
+
6
+ module DIDWW
7
+ # Allows to encrypt file on Ruby-side before uploading to `/v3/encrypted_files`.
8
+ # @example
9
+ # file_content_1 = File.read('file_to_send_1.jpg', mode: 'rb')
10
+ # file_content_2 = File.read('file_to_send_1.pdf', mode: 'rb')
11
+ # enc = DIDWW::Encrypt.new
12
+ # enc_data_1 = enc.encrypt(file_content_1)
13
+ # enc_data_2 = enc.encrypt(file_content_2)
14
+ # enc_io_1 = Faraday::UploadIO.new(StringIO.new(enc_data_1), 'application/octet-stream')
15
+ # enc_io_2 = Faraday::UploadIO.new(StringIO.new(enc_data_2), 'application/octet-stream')
16
+ # DIDWW::Resource::EncryptedFile.upload(
17
+ # encryption_fingerprint: enc.encryption_fingerprint,
18
+ # items: [
19
+ # { file: enc_io_1, description: 'file_to_send_1.jpg' },
20
+ # { file: enc_io_2, description: 'file_to_send_2.pdf' }
21
+ # ]
22
+ # ) # => Array if IDs
23
+ #
24
+ class Encrypt
25
+ AES_ALGO = [256, :CBC]
26
+ AES_KEY_LEN = 32
27
+ AES_IV_LEN = 16
28
+ LABEL = ''
29
+ SEPARATOR = ':::'
30
+
31
+ class << self
32
+ # @param binary [String]
33
+ # @return [String]
34
+ def encrypt(binary)
35
+ new.encrypt(binary)
36
+ end
37
+ end
38
+
39
+ attr_reader :public_keys, :encryption_fingerprint
40
+
41
+ def initialize
42
+ reset!
43
+ end
44
+
45
+ # @param binary [String] binary content of a file.
46
+ # @return [String] binary content of an encrypted file.
47
+ def encrypt(binary)
48
+ aes_key, aes_iv, encrypted_aes = encrypt_aes(binary)
49
+ aes_credentials = aes_key + aes_iv
50
+ encrypted_rsa_a = encrypt_rsa_oaep(public_keys[0], aes_credentials)
51
+ encrypted_rsa_b = encrypt_rsa_oaep(public_keys[1], aes_credentials)
52
+ encrypted_rsa_a + encrypted_rsa_b + encrypted_aes
53
+ end
54
+
55
+ # Resets public keys and fingerprint.
56
+ def reset!
57
+ @public_keys = fetch_public_keys
58
+ @encryption_fingerprint = calculate_fingerprint
59
+ end
60
+
61
+ private
62
+
63
+ # @return [Array(String,String)] public keys.
64
+ def fetch_public_keys
65
+ DIDWW::Resource::PublicKey.find.map(&:key)
66
+ end
67
+
68
+ def calculate_fingerprint
69
+ public_keys.map { |pub_key| fingerprint_for(pub_key) }.join(SEPARATOR)
70
+ end
71
+
72
+ # @param public_key [String] PEM public key.
73
+ # @return [String] hexstring digest SHA1 for public key binary.
74
+ def fingerprint_for(public_key)
75
+ public_key += "\n" unless public_key[-1] == "\n"
76
+ public_key_base64 = public_key.split("\n")[1..-2].join
77
+ public_key_bin = Base64.decode64(public_key_base64)
78
+ OpenSSL::Digest::SHA1.hexdigest(public_key_bin)
79
+ end
80
+
81
+ # @param public_key [String]
82
+ # @param text [String]
83
+ def encrypt_rsa_oaep(public_key, text)
84
+ rsa = OpenSSL::PKey::RSA.new(public_key)
85
+ rsa.public_encrypt_oaep(text, LABEL, OpenSSL::Digest::SHA256)
86
+ end
87
+
88
+ # @param binary [String]
89
+ # @return [Array(String,String,String)] binaries key, vector, encrypted data.
90
+ def encrypt_aes(binary)
91
+ key = SecureRandom.random_bytes(AES_KEY_LEN)
92
+ iv = SecureRandom.random_bytes(AES_IV_LEN)
93
+ cipher = OpenSSL::Cipher::AES.new(*AES_ALGO)
94
+ cipher.encrypt
95
+ cipher.key = key
96
+ cipher.iv = iv
97
+ encrypted = cipher.update(binary) + cipher.final
98
+ [key, iv, encrypted]
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ # :nodoc:
4
+ class JsonapiMiddleware < Faraday::Middleware
5
+ def call(request_env)
6
+ headers = {}
7
+ headers['Content-Type'] = 'application/vnd.api+json'
8
+ headers['Api-Key'] = DIDWW::Client.api_key
9
+ headers['User-Agent'] = "didww-v3 Ruby gem v#{VERSION}"
10
+ headers['x-didww-api-version'] = DIDWW::Client.api_version unless DIDWW::Client.api_version.blank?
11
+
12
+ request_env[:request_headers].merge!(headers)
13
+ request_env.url.host = URI(DIDWW::Client.api_base_url).host
14
+
15
+ @app.call(request_env).on_complete do |response_env|
16
+ # do something with the response
17
+ # response_env[:response_headers].merge!(...)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class Address < Base
5
+
6
+ has_one :identity, class_name: 'Identity'
7
+ has_one :country, class_name: 'Country'
8
+ has_many :proofs, class_name: 'Proof'
9
+ has_many :city, class_name: 'City'
10
+ has_many :area, class_name: 'Area'
11
+
12
+ property :city_name, type: :string
13
+ # Type: String
14
+ # Description:
15
+
16
+ property :postal_code, type: :string
17
+ # Type: String
18
+ # Description:
19
+
20
+ property :address, type: :string
21
+ # Type: String
22
+ # Description:
23
+
24
+ property :description, type: :string
25
+ # Type: String
26
+ # Description:
27
+
28
+ property :created_at, type: :date
29
+ # Type: Date
30
+ # Description:
31
+
32
+ property :verified, type: :boolean
33
+ # Type: Boolean
34
+ # Description:
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class AddressVerification < Base
5
+ STATUS_PENDING = 'Pending'
6
+ STATUS_APPROVED = 'Approved'
7
+ STATUS_REJECTED = 'Rejected'
8
+ STATUSES = [
9
+ STATUS_PENDING,
10
+ STATUS_APPROVED,
11
+ STATUS_REJECTED
12
+ ].freeze
13
+
14
+ has_one :address, class_name: 'Address'
15
+ has_many :dids, class_name: 'Did'
16
+ has_many :onetime_files, class_name: 'EncryptedFile'
17
+
18
+ property :service_description, type: :string
19
+ # Type: String
20
+ # Description:
21
+
22
+ property :status, type: :string
23
+ # Type: String
24
+ # Description:
25
+
26
+ property :reject_reasons, type: :string
27
+ # Type: String
28
+ # Description:
29
+
30
+ property :created_at, type: :date
31
+ # Type: Date
32
+ # Description:
33
+
34
+ property :callback_url, type: :string
35
+ # Type: String
36
+ # Description: valid URI for callbacks
37
+
38
+ property :callback_method, type: :string
39
+ # Type: String
40
+ # Description: GET or POST
41
+
42
+ def pending?
43
+ status == STATUS_PENDING
44
+ end
45
+
46
+ def approved?
47
+ status == STATUS_APPROVED
48
+ end
49
+
50
+ def rejected?
51
+ status == STATUS_REJECTED
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class Area < Base
5
+ has_one :country, class_name: 'Country'
6
+
7
+ property :name, type: :string
8
+ # Type: String
9
+ # Description: Regulatory Area name
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class AvailableDid < Base
5
+ has_one :did_group
6
+
7
+ property :number, type: :string
8
+ # Type: String
9
+ # Description: The actual DID number in the format [country code][area code][subscriber number].
10
+
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module Resource
3
4
  class Balance < Base
@@ -1,4 +1,5 @@
1
- require 'didww/middleware'
1
+ # frozen_string_literal: true
2
+ require 'didww/jsonapi_middleware'
2
3
  require 'didww/complex_objects/base'
3
4
 
4
5
  module DIDWW
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class CapacityPool < Base
5
+ has_many :countries, class: 'Country'
6
+ has_many :shared_capacity_groups, class: 'SharedCapacityGroup'
7
+ has_many :qty_based_pricings, class: 'QtyBasedPricing'
8
+
9
+ property :name, type: :string
10
+ # Type: String
11
+ # Description: Capacity pool name
12
+
13
+ property :renew_date, type: :string
14
+ # Type: String
15
+ # Description: Next monthly renew date in format 'YYYY-MM-DD'
16
+
17
+ property :total_channels_count, type: :integer
18
+ # Type: Integer
19
+ # Description: Channels count owned by customer in this pool
20
+
21
+ property :assigned_channels_count, type: :integer
22
+ # Type: Integer
23
+ # Description: Channels used by at least one service in this pool
24
+
25
+ property :minimum_limit, type: :integer
26
+ # Type: Integer
27
+ # Description: A minimum amount of channels in this pool. Customer cannot remove unassigned channels below this level.
28
+
29
+ property :minimum_qty_per_order, type: :integer
30
+ # Type: Integer
31
+ # Description: A minimum amount of new channels to add to this pool in one order.
32
+
33
+ property :setup_price, type: :decimal
34
+ # Type: String
35
+ # Description: Non-recurring price per channel
36
+
37
+ property :monthly_price, type: :decimal
38
+ # Type: String
39
+ # Description: Monthly recurring price per channel
40
+
41
+ property :metered_rate, type: :decimal
42
+ # Type: String
43
+ # Description: Metered rate per minute
44
+
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'forwardable'
2
3
  require 'didww/complex_objects/cdr_export_filter'
3
4
  require 'down/http'
@@ -7,6 +8,8 @@ module DIDWW
7
8
  class CdrExport < Base
8
9
  extend Forwardable
9
10
 
11
+ STATUS_COMPLETED = 'Completed'
12
+
10
13
  property :filters, type: :cdr_export_filter
11
14
  # Type: CDR Export Filters Object
12
15
  # Nullable: No
@@ -27,6 +30,14 @@ module DIDWW
27
30
  # Nullable: true
28
31
  # Description: url of csv file for downloading. available only when status is "Completed"
29
32
 
33
+ property :callback_url, type: :string
34
+ # Type: String
35
+ # Description: valid URI for callbacks
36
+
37
+ property :callback_method, type: :string
38
+ # Type: String
39
+ # Description: GET or POST
40
+
30
41
  def_delegators :filters, :year, :month, :did_number, :year=, :month=, :did_number=
31
42
 
32
43
  def initialize(params = {})
@@ -39,7 +50,7 @@ module DIDWW
39
50
  end
40
51
 
41
52
  def complete?
42
- status == 'Completed'
53
+ status == STATUS_COMPLETED
43
54
  end
44
55
  alias_method :completed?, :complete?
45
56
  end
@@ -1,6 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module Resource
3
4
  class City < Base
5
+ has_one :country, class_name: 'Country'
6
+ has_one :region, class_name: 'Region'
7
+ has_one :area, class_name: 'Area'
8
+
4
9
  property :name, type: :string
5
10
  # Type: String
6
11
  # Description: City name
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module Resource
3
4
  class Country < Base
@@ -1,8 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module Resource
3
4
  class Did < Base
4
5
  has_one :trunk
5
6
  has_one :trunk_group
7
+ has_one :capacity_pool
8
+ has_one :shared_capacity_group
9
+ has_one :address_verification
6
10
 
7
11
  property :blocked, type: :boolean
8
12
  # Type: Boolean
@@ -16,7 +20,7 @@ module DIDWW
16
20
  # Type: Boolean
17
21
  # Description: Identifier for terminated DIDs that will be removed from service at the end of the billing cycle.
18
22
 
19
- property :pending_removal, type: :boolean
23
+ property :billing_cycles_count, type: :integer
20
24
  # Type: Boolean
21
25
  # Description: Identifier for DIDs that are pending removal from your account.
22
26
 
@@ -36,6 +40,10 @@ module DIDWW
36
40
  # Type: Integer
37
41
  # Description: The number of channels included with this DID.
38
42
 
43
+ property :dedicated_channels_count, type: :integer
44
+ # Type: Integer
45
+ # Description: The number of channels included with this DID.
46
+
39
47
  property :expires_at, type: :time
40
48
  # Type: DateTime
41
49
  # Description: DateTime when the DID expired or will expire. DateTime is in the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", where "SSS" are milliseconds and 'Z' denotes Zulu time (UTC).
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module Resource
3
4
  class DidGroup < Base
@@ -49,6 +50,10 @@ module DIDWW
49
50
  # TODO
50
51
  # Meta attributes
51
52
  #
53
+ # :available_dids_enabled
54
+ # Type: Boolean
55
+ # Description: Defines if particular DID from this DID group can be ordered via available_dids or did_reservations.
56
+ #
52
57
  # needs_registration
53
58
  # Type: Boolean
54
59
  # Description: Defines if end-user registration is required for this DID Group.
@@ -56,10 +61,6 @@ module DIDWW
56
61
  # is_available
57
62
  # Type: Boolean
58
63
  # Description: Defines if numbers in this DID Group are currently in stock.
59
- #
60
- # restrictions
61
- # Type: String
62
- # Description: Describes possible restrictions for the DID Group, such as "End User Registration is Required".
63
64
 
64
65
  end
65
66
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module DIDWW
2
3
  module Resource
3
4
  class DidGroupType < Base
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class DidReservation < Base
5
+ has_one :available_did
6
+
7
+ property :expire_at, type: :time
8
+ # Type: DateTime
9
+ # Description: DateTime when the DID reservation expired or will expire. DateTime is in the ISO 8601 format "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", where "SSS" are milliseconds and 'Z' denotes Zulu time (UTC).
10
+
11
+ property :created_at, type: :time
12
+ # Type: DateTime
13
+ # Description: DID reservation created at DateTime.
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class EncryptedFile < Base
5
+ class UploadError < StandardError
6
+ end
7
+
8
+ property :description, type: :string
9
+ # Type: String
10
+ # Description:
11
+
12
+ property :expire_at, type: :date
13
+ # Type: Date
14
+ # Description:
15
+
16
+ # @return [Faraday::Connection]
17
+ def self.upload_connection
18
+ Faraday.new(url: site) do |connection|
19
+ connection.request :multipart
20
+ connection.request :url_encoded
21
+ connection.adapter Faraday.default_adapter
22
+ connection.use DIDWW::BaseMiddleware
23
+ end
24
+ end
25
+
26
+ # @param files [Rack::Multipart::UploadedFile,(#tempfile,#content_type,#original_filename)]
27
+ # @return [Array<String>]
28
+ # @raise [DIDWW::Resource::EncryptedFile::UploadError]
29
+ def self.upload_files(files, fingerprint)
30
+ items = files.map do |file|
31
+ {
32
+ file: Faraday::UploadIO.new(file.tempfile, file.content_type),
33
+ description: file.original_filename
34
+ }
35
+ end
36
+ payload = { encryption_fingerprint: fingerprint, items: items }
37
+ upload(payload)
38
+ end
39
+
40
+ # @param payload [Hash]
41
+ # encryption_fingerprint [String] DIDWW::Encrypt#encryption_fingerprint
42
+ # items [Array]
43
+ # file [Faraday::UploadIO] upload io
44
+ # description [String,nil] optional description
45
+ # @return [Array<String>]
46
+ # @raise [DIDWW::Resource::EncryptedFile::UploadError]
47
+ def self.upload(payload)
48
+ connection = upload_connection
49
+ response = connection.post('/v3/encrypted_files', encrypted_files: payload)
50
+ if response.status == 201
51
+ JSON.parse(response.body, symbolize_names: true)[:ids]
52
+ else
53
+ raise UploadError, "Code: #{response.status} #{response.body}"
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class Identity < Base
5
+ IDENTITY_TYPE_PERSONAL = 'Personal'
6
+ IDENTITY_TYPE_BUSINESS = 'Business'
7
+
8
+ has_one :country, class_name: 'Country'
9
+ has_many :proofs, class_name: 'Proof'
10
+ has_many :addresses, class_name: 'Address'
11
+ has_many :permanent_documents, class_name: 'PermanentSupportingDocument'
12
+
13
+ property :first_name, type: :string
14
+ # Type: String
15
+ # Description:
16
+
17
+ property :last_name, type: :string
18
+ # Type: String
19
+ # Description:
20
+
21
+ property :phone_number, type: :string
22
+ # Type: String
23
+ # Description:
24
+
25
+ property :id_number, type: :string
26
+ # Type: String
27
+ # Description:
28
+
29
+ property :birth_date, type: :date
30
+ # Type: Date
31
+ # Description:
32
+
33
+ property :company_name, type: :string
34
+ # Type: String
35
+ # Description:
36
+
37
+ property :company_reg_number, type: :string
38
+ # Type: String
39
+ # Description:
40
+
41
+ property :vat_id, type: :string
42
+ # Type: String
43
+ # Description:
44
+
45
+ property :description, type: :string
46
+ # Type: String
47
+ # Description:
48
+
49
+ property :personal_tax_id, type: :string
50
+ # Type: String
51
+ # Description:
52
+
53
+ property :identity_type, type: :string
54
+ # Type: String
55
+ # Description:
56
+
57
+ property :created_at, type: :date
58
+ # Type: Date
59
+ # Description:
60
+
61
+ property :external_reference_id, type: :string
62
+ # Type: String
63
+ # Description:
64
+
65
+ property :verified, type: :boolean
66
+ # Type: Boolean
67
+ # Description:
68
+
69
+ def personal?
70
+ identity_type == IDENTITY_TYPE_PERSONAL
71
+ end
72
+
73
+ def business?
74
+ identity_type == IDENTITY_TYPE_BUSINESS
75
+ end
76
+ end
77
+ end
78
+ end
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  require 'didww/complex_objects/did_order_item'
3
+ require 'didww/complex_objects/capacity_order_item'
2
4
 
3
5
  module DIDWW
4
6
  module Resource
@@ -45,6 +47,14 @@ module DIDWW
45
47
  # Type: Boolean
46
48
  # Description: Allowing back ordering
47
49
 
50
+ property :callback_url, type: :string
51
+ # Type: String
52
+ # Description: valid URI for callbacks
53
+
54
+ property :callback_method, type: :string
55
+ # Type: String
56
+ # Description: GET or POST
57
+
48
58
  def initialize(*args)
49
59
  super
50
60
  self.items ||= []
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module DIDWW
3
+ module Resource
4
+ class PermanentSupportingDocument < Base
5
+
6
+ has_many :files, class_name: 'EncryptedFile'
7
+ has_one :template, class_name: 'SupportingDocumentTemplate'
8
+ has_one :identity, class_name: 'Identity'
9
+
10
+ property :created_at, type: :date
11
+ # Type: Date
12
+ # Description:
13
+ end
14
+ end
15
+ end