Class: Silkey::Models::JwtPayload
- Inherits:
-
Object
- Object
- Silkey::Models::JwtPayload
- Defined in:
- lib/silkey/models/jwt_payload.rb
Overview
Generates message to sign based on plain object data (keys => values)
Instance Method Summary collapse
- #import(data = {}) ⇒ Object
-
#message_to_sign_by_silkey ⇒ Object
rubocop:enable Metrics/AbcSize.
-
#message_to_sign_by_user ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#scope ⇒ Object
rubocop:enable Style/HashSyntax.
- #set_address(addr) ⇒ Object
- #set_email(email) ⇒ Object
- #set_migrations(migrating) ⇒ Object
-
#set_scope(scope) ⇒ Object
rubocop:disable Naming/AccessorMethodName.
- #set_silkey_signature(sig, timestamp) ⇒ Object
- #set_user_signature(sig, timestamp) ⇒ Object
- #validate ⇒ Object
Instance Method Details
#import(data = {}) ⇒ Object
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/silkey/models/jwt_payload.rb', line 120 def import(data = {}) return data if data.is_a?(Silkey::Models::JwtPayload) data.each do |k, v| var = k.to_s.underscore if var == 'scope' set_scope(v) else instance_variable_set("@#{var}", v) end end self end |
#message_to_sign_by_silkey ⇒ Object
rubocop:enable Metrics/AbcSize
98 99 100 101 102 103 104 105 106 |
# File 'lib/silkey/models/jwt_payload.rb', line 98 def return '' if Silkey::Utils.empty?(email) if Silkey::Utils.empty?() self. = Silkey::Utils. end "#{email.to_s.unpack('H*')[0]}#{Silkey::Utils.int_to_hex()}" end |
#message_to_sign_by_user ⇒ Object
rubocop:disable Metrics/AbcSize
Creates message that's need to be sign by user
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/silkey/models/jwt_payload.rb', line 85 def data = { address: Silkey::Utils.strings_to_hex(['address']) + Silkey::Utils.remove0x(address).downcase, migration: Silkey::Utils.strings_to_hex(['migration']) + (migration ? '01' : '00'), scope: Silkey::Utils.strings_to_hex(['scope', scope]), userSignatureTimestamp: Silkey::Utils.strings_to_hex(['userSignatureTimestamp']) + Silkey::Utils.int_to_hex() } data.keys.sort.map { |k| data[k] }.join('') end |
#scope ⇒ Object
rubocop:enable Style/HashSyntax
33 34 35 |
# File 'lib/silkey/models/jwt_payload.rb', line 33 def scope _scope.keys.sort.join(Silkey::Settings.SCOPE_DIVIDER) end |
#set_address(addr) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/silkey/models/jwt_payload.rb', line 45 def set_address(addr) raise "`#{addr}` is not ethereum address" unless Silkey::Utils.ethereum_address?(addr) self.address = addr self end |
#set_email(email) ⇒ Object
52 53 54 55 |
# File 'lib/silkey/models/jwt_payload.rb', line 52 def set_email(email) self.email = email self end |
#set_migrations(migrating) ⇒ Object
57 58 59 60 |
# File 'lib/silkey/models/jwt_payload.rb', line 57 def set_migrations() self.migration = self end |
#set_scope(scope) ⇒ Object
rubocop:disable Naming/AccessorMethodName
38 39 40 41 42 43 |
# File 'lib/silkey/models/jwt_payload.rb', line 38 def set_scope(scope) return self if Silkey::Utils.empty?(scope) _scope[scope] = true self end |
#set_silkey_signature(sig, timestamp) ⇒ Object
71 72 73 74 75 76 77 78 |
# File 'lib/silkey/models/jwt_payload.rb', line 71 def set_silkey_signature(sig, ) raise "silkey signature invalid: `#{sig}`" unless Silkey::Utils.signature?(sig) raise 'empty silkey signature timestamp' if Silkey::Utils.empty?() self.silkey_signature = sig self. = self end |
#set_user_signature(sig, timestamp) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/silkey/models/jwt_payload.rb', line 62 def set_user_signature(sig, ) raise "user signature invalid: `#{sig}`" unless Silkey::Utils.signature?(sig) raise 'empty user signature timestamp' if Silkey::Utils.empty?() self.user_signature = sig self. = self end |
#validate ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/silkey/models/jwt_payload.rb', line 108 def validate raise "address is invalid: #{address}" unless Silkey::Utils.ethereum_address?(address) raise "user_signature is invalid: #{user_signature}" unless Silkey::Utils.signature?(user_signature) raise 'user_signature_timestamp is invalid' unless Silkey::Utils.() return self if Silkey::Utils.empty?(scope) || scope == 'id' validate_scope_email end |