async def create_new_user(request): required_fields = ['name', 'password'] utils.validate_fields(required_fields, request.json) # Generate keys private_key = signing.generate_privkey(privkey_format='bytes') public_key = signing.generate_pubkey(private_key, privkey_format='bytes') txn_key = Key(public_key, private_key) encrypted_private_key = utils.encrypt_private_key( request.app.config.AES_KEY, public_key, private_key) # Build create user transaction batch_list = create_user(txn_key, request.app.config.BATCHER_KEY_PAIR, request.json.get('name'), public_key, request.json.get('metadata'), request.json.get('manager')) # Submit transaction and wait for complete await utils.send(request.app.config.VAL_CONN, batch_list[0], request.app.config.TIMEOUT) # Save new user in auth table hashed_password = hashlib.sha256( request.json.get('password').encode('utf-8')).hexdigest() auth_entry = { 'user_id': public_key, 'hashed_password': hashed_password, 'encrypted_private_key': encrypted_private_key, 'email': request.json.get('email') } await auth_query.create_auth_entry(request.app.config.DB_CONN, auth_entry) # Send back success response return create_user_response(request, public_key)
async def create_new_role(request): required_fields = ['name', 'administrators', 'owners'] utils.validate_fields(required_fields, request.json) txn_key = await utils.get_transactor_key(request) role_id = str(uuid4()) batch_list = role_transaction_creation.create_role( txn_key, request.app.config.BATCHER_KEY_PAIR, request.json.get('name'), role_id, request.json.get('metadata'), request.json.get('administrators'), request.json.get('owners')) await utils.send(request.app.config.VAL_CONN, batch_list[0], request.app.config.TIMEOUT) return create_role_response(request, role_id)
async def update_manager(request, user_id): required_fields = ['id'] utils.validate_fields(required_fields, request.json) txn_key = await utils.get_transactor_key(request) proposal_id = str(uuid4()) batch_list, _ = propose_manager( txn_key=txn_key, batch_key=request.app.config.BATCHER_KEY_PAIR, proposal_id=proposal_id, user_id=user_id, new_manager_id=request.json.get('id'), reason=request.json.get('reason'), metadata=request.json.get('metadata')) await utils.send(request.app.config.VAL_CONN, batch_list, request.app.config.TIMEOUT) return json({'proposal_id': proposal_id})
async def delete_role_task(request, role_id): required_fields = ['id'] utils.validate_fields(required_fields, request.json) txn_key = await utils.get_transactor_key(request) proposal_id = str(uuid4()) batch_list, _ = role_transaction_creation.propose_remove_role_tasks( txn_key=txn_key, batch_key=request.app.config.BATCHER_KEY_PAIR, proposal_id=proposal_id, role_id=role_id, task_id=request.json.get('id'), reason=request.json.get('reason'), metadata=request.json.get('metadata')) await utils.send(request.app.config.VAL_CONN, batch_list, request.app.config.TIMEOUT) return json({'proposal_id': proposal_id})
async def authorize(request): required_fields = ['id', 'password'] utils.validate_fields(required_fields, request.json) password = request.json.get('password') hashed_pwd = hashlib.sha256(password.encode('utf-8')).hexdigest() auth_info = await auth_query.fetch_info_by_user_name( request.app.config.DB_CONN, request.json.get('id')) if auth_info is None or auth_info.get('hashed_password') != hashed_pwd: raise ApiUnauthorized("Unauthorized: Incorrect user id or password") token = utils.generate_apikey(request.app.config.SECRET_KEY, auth_info.get('user_id')) return json({ 'data': { 'authorization': token, 'user_id': auth_info.get('user_id') } })
async def update_proposal(request, proposal_id): required_fields = ['reason', 'status'] utils.validate_fields(required_fields, request.json) if request.json['status'] not in [Status.REJECTED, Status.APPROVED]: raise ApiBadRequest( "Bad Request: status must be either 'REJECTED' or 'APPROVED'") txn_key = await utils.get_transactor_key(request=request) block = await utils.get_request_block(request) proposal_resource = await proposals_query.fetch_proposal_resource( request.app.config.DB_CONN, proposal_id=proposal_id, head_block_num=block.get('num')) batch_list, _ = PROPOSAL_TRANSACTION[proposal_resource.get('type')][ request.json['status']](txn_key, request.app.config.BATCHER_KEY_PAIR, proposal_id, proposal_resource.get('object'), proposal_resource.get('target'), request.json.get('reason')) await utils.send(request.app.config.VAL_CONN, batch_list, request.app.config.TIMEOUT) return json({'proposal_id': proposal_id})