Module: MixinBot::API::User
- Included in:
- MixinBot::API
- Defined in:
- lib/mixin_bot/api/user.rb
Instance Method Summary collapse
- #create_safe_user(name, private_key: nil, spend_key: nil) ⇒ Object
- #create_user(full_name, key: nil) ⇒ Object
- #fetch_users(user_ids) ⇒ Object
- #migrate_to_safe(spend_key:, old_pin: nil) ⇒ Object
- #safe_register(pin, spend_key: nil) ⇒ Object
- #search_user(query, access_token: nil) ⇒ Object
- #user(user_id, access_token: nil) ⇒ Object
Instance Method Details
#create_safe_user(name, private_key: nil, spend_key: nil) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/mixin_bot/api/user.rb', line 40 def create_safe_user(name, private_key: nil, spend_key: nil) private_keypair = JOSE::JWA::Ed25519.keypair private_key private_key = private_keypair[1].unpack1('H*') spend_keypair = JOSE::JWA::Ed25519.keypair spend_key spend_key = spend_keypair[1].unpack1('H*') user = create_user name, key: private_keypair[1][...32] keystore = { app_id: user['data']['user_id'], session_id: user['data']['session_id'], private_key:, pin_token: user['data']['pin_token_base64'], spend_key: spend_keypair[1].unpack1('H*') } user_api = MixinBot::API.new(**keystore) user_api.update_pin pin: MixinBot.utils.tip_public_key(spend_keypair[0], counter: user['data']['tip_counter']) # wait for tip pin update in server sleep 1 user_api.safe_register spend_key keystore end |
#create_user(full_name, key: nil) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/mixin_bot/api/user.rb', line 11 def create_user(full_name, key: nil) keypair = JOSE::JWA::Ed25519.keypair key session_secret = Base64.urlsafe_encode64 keypair[0], padding: false private_key = keypair[1].unpack1('H*') path = '/users' payload = { full_name:, session_secret: } res = client.post path, **payload res.merge(private_key:).with_indifferent_access end |
#fetch_users(user_ids) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/mixin_bot/api/user.rb', line 32 def fetch_users(user_ids) path = '/users/fetch' user_ids = [user_ids] if user_ids.is_a? String payload = user_ids client.post path, *payload end |
#migrate_to_safe(spend_key:, old_pin: nil) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/mixin_bot/api/user.rb', line 89 def migrate_to_safe(spend_key:, old_pin: nil) profile = me['data'] return true if profile['has_safe'] spend_keypair = JOSE::JWA::Ed25519.keypair spend_key spend_key = spend_keypair[1].unpack1('H*') update_pin pin: MixinBot.utils.tip_public_key(spend_keypair[0], counter: profile['tip_counter']) if profile['tip_key_base64'].blank? # wait for tip pin update in server sleep 1 safe_register spend_key { spend_key: }.with_indifferent_access end |
#safe_register(pin, spend_key: nil) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/mixin_bot/api/user.rb', line 68 def safe_register(pin, spend_key: nil) path = '/safe/users' spend_key ||= MixinBot.utils.decode_key pin key = JOSE::JWA::Ed25519.keypair spend_key[...32] public_key = key[0].unpack1('H*') hex = SHA3::Digest::SHA256.hexdigest config.app_id signature = Base64.urlsafe_encode64 JOSE::JWA::Ed25519.sign([hex].pack('H*'), key[1]), padding: false pin_base64 = encrypt_tip_pin pin, 'SEQUENCER:REGISTER:', config.app_id, public_key payload = { public_key:, signature:, pin_base64: } client.post path, **payload end |
#search_user(query, access_token: nil) ⇒ Object
26 27 28 29 30 |
# File 'lib/mixin_bot/api/user.rb', line 26 def search_user(query, access_token: nil) path = format('/search/%<query>s', query:) client.get path, access_token: end |
#user(user_id, access_token: nil) ⇒ Object
6 7 8 9 |
# File 'lib/mixin_bot/api/user.rb', line 6 def user(user_id, access_token: nil) path = format('/users/%<user_id>s', user_id:) client.get path, access_token: end |