Add phone number resolution to address for cli arg identifier
This commit is contained in:
parent
14e0c1fdb4
commit
e8b6173ec5
@ -6,6 +6,7 @@ import logging
|
|||||||
from cic_eth_registry import CICRegistry
|
from cic_eth_registry import CICRegistry
|
||||||
from cic_eth_registry.lookup.tokenindex import TokenIndexLookup
|
from cic_eth_registry.lookup.tokenindex import TokenIndexLookup
|
||||||
from cic_types.ext.metadata import MetadataRequestsHandler
|
from cic_types.ext.metadata import MetadataRequestsHandler
|
||||||
|
from chainlib.eth.address import to_checksum_address
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from clicada.tx import TxGetter
|
from clicada.tx import TxGetter
|
||||||
@ -21,24 +22,34 @@ ctrl = CmdCtrl(argv=sys.argv[1:], logger=logg)
|
|||||||
|
|
||||||
tx_getter = TxGetter(ctrl.get('TX_CACHE_URL'))
|
tx_getter = TxGetter(ctrl.get('TX_CACHE_URL'))
|
||||||
|
|
||||||
|
MetadataRequestsHandler.base_url = ctrl.get('META_URL')
|
||||||
|
|
||||||
store_path = '.clicada'
|
store_path = '.clicada'
|
||||||
user_phone_file_label = 'phone'
|
user_phone_file_label = 'phone'
|
||||||
user_phone_store = FileUserStore(ctrl.chain(), user_phone_file_label, store_path)
|
user_phone_store = FileUserStore(ctrl.chain(), user_phone_file_label, store_path)
|
||||||
try:
|
#try:
|
||||||
user_phone_store.put('25413241324', '5c4f9EeE1a6375d30f50ab547cD4EE21B37ac8Ab')
|
# user_phone_store.put('25413241324', '5c4f9EeE1a6375d30f50ab547cD4EE21B37ac8Ab')
|
||||||
except FileExistsError:
|
#except FileExistsError:
|
||||||
logg.debug('already have record')
|
# logg.debug('already have record')
|
||||||
|
|
||||||
k = '25413241324'
|
#k = '25413241324'
|
||||||
user_address = user_phone_store.get(k)
|
user_address = user_phone_store.by_phone(ctrl.get('_ARG_USER_IDENTIFIER'))
|
||||||
logg.debug('loaded user address {} for {}'.format(user_address, k))
|
if user_address == None:
|
||||||
|
sys.stderr.write('unknown identifier: {}\n'.format(ctrl.get('_ARG_USER_IDENTIFIER')))
|
||||||
|
sys.exit(1)
|
||||||
|
try:
|
||||||
|
user_address = to_checksum_address(user_address)
|
||||||
|
except ValueError:
|
||||||
|
sys.stderr.write('invalid response "{}" for {}\n'.format(user_address, ctrl.get('_ARG_USER_IDENTIFIER')))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
logg.debug('loaded user address {} for {}'.format(user_address, ctrl.get('_ARG_USER_IDENTIFIER')))
|
||||||
|
|
||||||
txs = tx_getter.get(user_address)
|
txs = tx_getter.get(user_address)
|
||||||
|
|
||||||
token_store = FileTokenStore(ctrl.chain(), ctrl.conn(), 'token', store_path)
|
token_store = FileTokenStore(ctrl.chain(), ctrl.conn(), 'token', store_path)
|
||||||
|
|
||||||
MetadataRequestsHandler.base_url = ctrl.get('META_URL')
|
|
||||||
|
|
||||||
user_address_file_label = 'address'
|
user_address_file_label = 'address'
|
||||||
user_address_store = FileUserStore(ctrl.chain(), user_address_file_label, store_path)
|
user_address_store = FileUserStore(ctrl.chain(), user_address_file_label, store_path)
|
||||||
|
|
||||||
|
@ -64,14 +64,14 @@ class ResolvedTokenTx(TokenTx):
|
|||||||
return v
|
return v
|
||||||
if self.tx_type == TokenTxType.faucet_giveto.value:
|
if self.tx_type == TokenTxType.faucet_giveto.value:
|
||||||
return 'FAUCET'
|
return 'FAUCET'
|
||||||
return user_store.get_metadata(self.sender)
|
return user_store.get_label(self.sender)
|
||||||
|
|
||||||
|
|
||||||
def resolve_recipient_entity(self, user_store):
|
def resolve_recipient_entity(self, user_store):
|
||||||
v = self.resolve_stored_entity(user_store, self.recipient)
|
v = self.resolve_stored_entity(user_store, self.recipient)
|
||||||
if v != None:
|
if v != None:
|
||||||
return v
|
return v
|
||||||
return user_store.get_metadata(self.recipient)
|
return user_store.get_label(self.recipient)
|
||||||
|
|
||||||
|
|
||||||
def resolve_entities(self, user_store):
|
def resolve_entities(self, user_store):
|
||||||
|
@ -2,13 +2,18 @@
|
|||||||
import stat
|
import stat
|
||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
|
import json
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
# external imports
|
# external imports
|
||||||
from hexathon import strip_0x
|
from hexathon import strip_0x
|
||||||
from cic_types.condiments import MetadataPointer
|
from cic_types.condiments import MetadataPointer
|
||||||
from cic_types.ext.metadata import MetadataRequestsHandler
|
from cic_types.ext.metadata import MetadataRequestsHandler
|
||||||
from cic_types.models.person import Person
|
from cic_types.models.person import Person
|
||||||
|
from cic_types.ext.requests import make_request
|
||||||
|
from cic_types.processor import generate_metadata_pointer
|
||||||
import requests.exceptions
|
import requests.exceptions
|
||||||
|
import phonenumbers
|
||||||
|
|
||||||
# local imports
|
# local imports
|
||||||
from clicada.encode import tx_normalize
|
from clicada.encode import tx_normalize
|
||||||
@ -57,7 +62,7 @@ class FileUserStore:
|
|||||||
|
|
||||||
logg.info('added user store {} record {} -> {}'.format(self.label, k, v))
|
logg.info('added user store {} record {} -> {}'.format(self.label, k, v))
|
||||||
|
|
||||||
|
|
||||||
def get(self, k):
|
def get(self, k):
|
||||||
p = os.path.join(self.store_path, k)
|
p = os.path.join(self.store_path, k)
|
||||||
f = open(p, 'r')
|
f = open(p, 'r')
|
||||||
@ -66,7 +71,40 @@ class FileUserStore:
|
|||||||
return r.strip()
|
return r.strip()
|
||||||
|
|
||||||
|
|
||||||
def get_metadata(self, address):
|
def by_phone(self, phone):
|
||||||
|
phone = phonenumbers.parse(phone, None)
|
||||||
|
phone = phonenumbers.format_number(phone, phonenumbers.PhoneNumberFormat.E164)
|
||||||
|
phone_file = phone.replace('+', '')
|
||||||
|
try:
|
||||||
|
v = self.get(phone_file)
|
||||||
|
return v
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
#getter = MetadataRequestsHandler(MetadataPointer.PHONE, phone.encode('utf-8'))
|
||||||
|
r = None
|
||||||
|
try:
|
||||||
|
ptr = generate_metadata_pointer(phone.encode('utf-8'), MetadataPointer.PHONE)
|
||||||
|
url = urllib.parse.urljoin(MetadataRequestsHandler.base_url, ptr)
|
||||||
|
r = make_request('GET', url)
|
||||||
|
return r.json()
|
||||||
|
except requests.exceptions.HTTPError as e:
|
||||||
|
logg.debug('no address found for phone {}: {}'.format(phone, e))
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_label(self, address):
|
||||||
|
add = tx_normalize.wallet_address(address)
|
||||||
|
|
||||||
|
try:
|
||||||
|
v = self.get(address)
|
||||||
|
v = json.loads(v)
|
||||||
|
person = Person()
|
||||||
|
person_data = person.deserialize(person_data=v)
|
||||||
|
return str(person_data)
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|
||||||
address = strip_0x(address)
|
address = strip_0x(address)
|
||||||
getter = MetadataRequestsHandler(MetadataPointer.PERSON, bytes.fromhex(address))
|
getter = MetadataRequestsHandler(MetadataPointer.PERSON, bytes.fromhex(address))
|
||||||
r = None
|
r = None
|
||||||
@ -75,7 +113,9 @@ class FileUserStore:
|
|||||||
except requests.exceptions.HTTPError as e:
|
except requests.exceptions.HTTPError as e:
|
||||||
logg.debug('no metadata found for {}: {}'.format(address, e))
|
logg.debug('no metadata found for {}: {}'.format(address, e))
|
||||||
return address
|
return address
|
||||||
|
|
||||||
data = r.json()
|
data = r.json()
|
||||||
person = Person()
|
person = Person()
|
||||||
person_data = person.deserialize(person_data=data)
|
person_data = person.deserialize(person_data=data)
|
||||||
|
self.put(address, json.dumps(person_data.serialize()))
|
||||||
return str(person_data)
|
return str(person_data)
|
||||||
|
@ -2,3 +2,4 @@ usumbufu~=0.3.2
|
|||||||
confini~=0.5.1
|
confini~=0.5.1
|
||||||
cic-eth-registry~=0.6.1
|
cic-eth-registry~=0.6.1
|
||||||
cic-types~=0.2.1a3
|
cic-types~=0.2.1a3
|
||||||
|
phonenumbers==8.12.12
|
||||||
|
Loading…
Reference in New Issue
Block a user