Class: Virgil::SDK::Client::Requests::SignableRequest

Inherits:
Object
  • Object
show all
Extended by:
SignaturesBase64
Defined in:
lib/virgil/sdk/client/requests/signable_request.rb

Overview

Base class for all API requests.

Direct Known Subclasses

CreateCardRequest, RevokeCardRequest

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SignaturesBase64

signatures_from_base64, signatures_to_base64

Constructor Details

#initializeSignableRequest

Constructs new SignableRequest object



51
52
53
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 51

def initialize
  @signatures = {}
end

Instance Attribute Details

#signaturesObject (readonly)

Returns the value of attribute signatures.



45
46
47
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 45

def signatures
  @signatures
end

#snapshotObject (readonly)

Request data snapshot



114
115
116
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 114

def snapshot
  @snapshot
end

#validation_tokenObject (readonly)

Returns the value of attribute validation_token.



45
46
47
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 45

def validation_token
  @validation_token
end

Instance Method Details

#exportObject

Exports request snapshot.

Returns:

base64-encoded json representation of the request model.


107
108
109
110
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 107

def export
  json_string = self.request_model.to_json
  Base64.strict_encode64(json_string)
end

#request_modelObject

Request model used for json representation.



124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 124

def request_model
  model = {
    'content_snapshot': Base64.strict_encode64(snapshot.to_s),
    'meta': {
      'signs': signatures
    }
  }

  if validation_token
    model[:meta][:validation] = {'token': validation_token.value}
  end

  return model
end

#restore(snapshot, signatures, validation_token = nil) ⇒ Object

Restores request from snapshot.

Args:
  snapshot: Json-encoded snapshot request will be restored from.
  signatures: Request signatures.


84
85
86
87
88
89
90
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 84

def restore(snapshot, signatures, validation_token = nil)
  @snapshot = snapshot
  @signatures = signatures
  @validation_token = validation_token
  model = JSON.parse(Crypto::Bytes.new(snapshot).to_s)
  restore_from_snapshot_model(model)
end

#restore_from_snapshot_model(snapshot) ⇒ Object

Restores request from snapshot model.

Should be implemented in the derived classes.

Args:

snapshot: snapshot model dict

Raises:

NotImplementedError

Raises:

  • (NotImplementedError)


74
75
76
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 74

def restore_from_snapshot_model(snapshot)
  raise NotImplementedError.new
end

#sign_with(fingerprint_id, signature) ⇒ Object

Adds signature to request.“”“



119
120
121
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 119

def sign_with(fingerprint_id, signature)
  @signatures[fingerprint_id] = signature
end

#snapshot_modelObject

Constructs snapshot model for exporting and signing.

Should be implemented in the derived classes.

Raises:

NotImplementedError

Raises:

  • (NotImplementedError)


61
62
63
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 61

def snapshot_model
  raise NotImplementedError.new
end

#take_snapshotObject

Takes request data snapshot.

Returns:

Request snapshot bytes.


97
98
99
100
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 97

def take_snapshot
  json_string = self.snapshot_model.to_json
  Crypto::Bytes.from_string(json_string)
end