82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import sys, re, os.path, json, ast
|
||
|
from termcolor import colored
|
||
|
from lib.natools import fmt, sign, get_privkey
|
||
|
from gql import gql, Client
|
||
|
from gql.transport.aiohttp import AIOHTTPTransport
|
||
|
|
||
|
PUBKEY_REGEX = "(?![OIl])[1-9A-Za-z]{42,45}"
|
||
|
|
||
|
class Id:
|
||
|
|
||
|
def __init__(self, dunikey, node, pubkey='', username=''):
|
||
|
|
||
|
self.dunikey = dunikey
|
||
|
self.pubkey = pubkey if pubkey else get_privkey(dunikey, "pubsec").pubkey
|
||
|
self.username = username
|
||
|
# if not re.match(PUBKEY_REGEX, self.pubkey) or len(self.pubkey) > 45:
|
||
|
# sys.stderr.write("La clé publique n'est pas au bon format.\n")
|
||
|
# sys.exit(1)
|
||
|
|
||
|
# Define Duniter GVA node
|
||
|
transport = AIOHTTPTransport(url=node)
|
||
|
self.client = Client(transport=transport, fetch_schema_from_transport=True)
|
||
|
|
||
|
def sendDoc(self, getBalance=False):
|
||
|
# Build balance generation document
|
||
|
if (getBalance):
|
||
|
queryBuild = gql(
|
||
|
"""
|
||
|
query ($pubkey: PubKeyGva!, $script: PkOrScriptGva!){
|
||
|
idty (pubkey: $pubkey) {
|
||
|
isMember
|
||
|
username
|
||
|
}
|
||
|
balance(script: $script) {
|
||
|
amount
|
||
|
}
|
||
|
}
|
||
|
"""
|
||
|
)
|
||
|
else:
|
||
|
queryBuild = gql(
|
||
|
"""
|
||
|
query ($pubkey: PubKeyGva!){
|
||
|
idty (pubkey: $pubkey) {
|
||
|
isMember
|
||
|
username
|
||
|
}
|
||
|
}
|
||
|
"""
|
||
|
)
|
||
|
|
||
|
paramsBuild = {
|
||
|
"pubkey": self.pubkey,
|
||
|
"script": f"SIG({self.pubkey})"
|
||
|
}
|
||
|
|
||
|
# Send balance document
|
||
|
try:
|
||
|
queryResult = self.client.execute(queryBuild, variable_values=paramsBuild)
|
||
|
except Exception as e:
|
||
|
sys.stderr.write("Echec de récupération du solde:\n" + str(e) + "\n")
|
||
|
sys.exit(1)
|
||
|
|
||
|
jsonBrut = queryResult
|
||
|
|
||
|
if (getBalance):
|
||
|
if (queryResult['balance'] == None):
|
||
|
jsonBrut['balance'] = {"amount": 0.0}
|
||
|
else:
|
||
|
jsonBrut['balance'] = queryResult['balance']['amount']/100
|
||
|
|
||
|
if (queryResult['idty'] == None):
|
||
|
username = 'Matiou'
|
||
|
isMember = False
|
||
|
else:
|
||
|
username = queryResult['idty']['username']
|
||
|
isMember = queryResult['idty']['isMember']
|
||
|
|
||
|
return json.dumps(jsonBrut, indent=2)
|