add new register user in dlt

This commit is contained in:
Cayo Puigdefabregas 2024-01-23 18:08:51 +01:00
parent c9238e8e6a
commit 6a75423532
1 changed files with 48 additions and 14 deletions

View File

@ -2,8 +2,12 @@ import json
import click import click
from flask import current_app as app
from ereuseapi.methods import register_user
from ereuse_devicehub.db import db from ereuse_devicehub.db import db
from ereuse_devicehub.resources.user.models import User from ereuse_devicehub.resources.user.models import User
from ereuse_devicehub.resources.agent.models import Person
from ereuse_devicehub.modules.dpp.utils import encrypt
class RegisterUserDlt: class RegisterUserDlt:
@ -12,23 +16,53 @@ class RegisterUserDlt:
def __init__(self, app) -> None: def __init__(self, app) -> None:
super().__init__() super().__init__()
self.app = app self.app = app
help = "Register user in Dlt with params: email password rols" help = "Insert users than are in Dlt with params: path of data set file"
self.app.cli.command('dlt_register_user', short_help=help)(self.run) self.app.cli.command('dlt_register_user', short_help=help)(self.run)
@click.argument('email') @click.argument('dataset_file')
@click.argument('password') def run(self, dataset_file):
@click.argument('rols') with open(dataset_file) as f:
def run(self, email, password, rols): dataset = json.loads(f.read())
if not rols:
rols = "Operator"
user = User.query.filter_by(email=email).one()
token_dlt = user.set_new_dlt_keys(password) for d in dataset:
result = user.allow_permitions(api_token=token_dlt, rols=rols) self.add_user(d)
rols = user.get_rols(token_dlt=token_dlt)
rols = [k for k, v in rols]
user.rols_dlt = json.dumps(rols)
db.session.commit() db.session.commit()
return result, rols def add_user(self, data):
email = data.get("email")
name = email.split('@')[0]
password = data.get("password")
eth_priv_key = data.get("eth_priv_key")
eth_pub_key = data.get("eth_pub_key")
user = User.query.filter_by(email=email).first()
import pdb; pdb.set_trace()
if not user:
user = User(email=email, password=password)
user.individuals.add(Person(name=name))
api_dlt = app.config.get('API_DLT')
try:
response = register_user(api_dlt, eth_priv_key)
api_token = response.get('data', {}).get('api_token')
except Exception:
api_token = ""
ethereum = {
"eth_pub_key": eth_pub_key,
"eth_priv_key": eth_priv_key,
"api_token": api_token
}
data_eth = json.dumps(ethereum)
user.api_keys_dlt = encrypt(password, data_eth)
try:
attributes = user.get_abac_attributes()
roles = attributes.get("role", ["Operator"])
except Exception:
roles ["Operator"]
user.rols_dlt = json.dumps(roles)
if not user.id:
db.session.add(user)