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

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

Overview

Base class for all cards API requests.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSignableRequest

Constructs new SignableRequest object



48
49
50
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 48

def initialize
  @signatures = {}
end

Instance Attribute Details

#relationsObject (readonly)

Returns the value of attribute relations.



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

def relations
  @relations
end

#signaturesObject (readonly)

Returns the value of attribute signatures.



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

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.



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

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
138
139
140
# 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
  if relations
    model[:meta][:relations] = relations
  end

  return model
end

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

Restores request from snapshot.

Args:
  snapshot: Json-encoded snapshot request will be restored from.
  signatures: Request signatures.
  validation_token: validation token gotten from Virgil Identity Service
  relations: relations


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

def restore(snapshot, signatures, validation_token = nil, relations = nil)
  @snapshot = snapshot
  @signatures = signatures
  @validation_token = validation_token
  @relations = relations
  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)


71
72
73
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 71

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)


58
59
60
# File 'lib/virgil/sdk/client/requests/signable_request.rb', line 58

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