async def make_agent_POST_request( self, op, rec_id=None, data=None, text=False, params=None ) -> (int, str): if op["topic"] == "connection": operation = op["operation"] if operation == "create-invitation": connection_id = create_uuid() connection = await Connection.create(connection_id) await connection.connect('{"use_public_did": true}') invitation = await connection.invite_details(False) store_resource(connection_id, "connection", connection) connection_dict = await connection.serialize() resp_status = 200 resp_text = json.dumps({"connection_id": connection_id, "invitation": invitation, "connection": connection_dict}) return (resp_status, resp_text) elif operation == "receive-invitation": connection_id = create_uuid() connection = await Connection.create_with_details(connection_id, json.dumps(data)) await connection.connect('{"use_public_did": true}') connection_state = await connection.update_state() store_resource(connection_id, "connection", connection) connection_dict = await connection.serialize() resp_status = 200 resp_text = json.dumps({"connection_id": connection_id, "invitation": data, "connection": connection_dict}) return (resp_status, resp_text) elif (operation == "accept-invitation" or operation == "accept-request" or operation == "remove" or operation == "start-introduction" or operation == "send-ping" ): connection_id = rec_id connection = get_resource(rec_id, "connection") if connection: # wait for a small period just in case ... await asyncio.sleep(0.1) # make sure we have latest & greatest connection state await connection.update_state() store_resource(connection_id, "connection", connection) connection_dict = await connection.serialize() connection_state = await connection.get_state() resp_status = 200 resp_text = json.dumps({"connection_id": rec_id, "state": state_text(connection_state), "connection": connection_dict}) return (resp_status, resp_text) return (404, '404: Not Found\n\n'.encode('utf8'))
async def post(self, request): # noinspection PyBroadException try: req = request.json try: user = await Users.get_first_by_many_field_value( email=req.get('email')) except DoesNotExist: return json({'msg': 'wrong email or user does not exist'}) password = create_uuid() await user.set_password(password) await user.update() resp = await send_email(recipients=[user.email], text="Your new PyLove password:\n" + password, subject="Your new PyLove password") if resp: return json({ 'success': True, 'msg': 'Check Your e-mail for new password' }) return json({'success': False, 'msg': 'Error sending e-mail'}) except: logging.exception('err user.post') return json({'msg': 'Wrong email or user does not exist'}, status=404)
async def get(self, magic_string=''): if not magic_string or len(magic_string) < 32: return json({'success': False, 'msg': 'Invalid Magic Link'}, ) try: user = await Users.get_first('magic_string', magic_string) except DoesNotExist: return json({'success': False, 'msg': 'Wrong Magic Link'}, ) if (datetime.utcnow() - user.magic_string_date).total_seconds() > 300: return json( { 'success': False, 'msg': 'Link is only active for 5 minutes.' }, ) user.magic_string = " " user.session_uuid = create_uuid() user.last_login = datetime.utcnow() await user.update() return json({ 'success': True, 'admin': user.admin, 'mentor': user.mentor, 'name': user.name, 'email': user.email, 'surname': user.surname, 'lang': user.lang, 'organiser': user.organiser, 'id': user.id, 'session_uuid': user.session_uuid, 'confirmation': user.confirmation })
async def post(self, request): global _users try: req = request.json user = await Users.get_first('email', req.get('email', '')) if not user: return json({'msg': 'User not found'}, status=404) if not user.active: return json({'msg': 'User not active'}, status=404) if hash_string(req.get('password', 'x')) == user.password: user.session_uuid = create_uuid() user.last_login = datetime.utcnow() await user.update() _users[user.session_uuid] = user return json({ 'success': True, 'admin': user.admin, 'mentor': user.mentor, 'name': user.name, 'email': user.email, 'surname': user.surname, 'lang': user.lang, 'organiser': user.organiser, 'id': user.id, 'session_uuid': user.session_uuid, 'confirmation': user.confirmation }) else: return self.user_error except DoesNotExist: return self.user_error except: logging.exception('err authentication.post') return json({'msg': 'internal error'}, status=500)
def __init__(self, template, sla, clouds): self.id = utils.create_uuid(template['name']) self._template = Template(self.id, template) self._sla = sla self._clouds = clouds self._services = [] self._deploy_services()
def __init__(self, template, cloud, run_config): self.id = utils.create_uuid(template['role']) self._role = template['role'] self._cloud = cloud self._template = template self._run_config = run_config self._instance = cloud.deploy_template(self.id, template, run_config)
async def get(self, email): try: user = await Users.get_first_by_many_field_value(email=email) except DoesNotExist: logging.error(email) user = False if not user: return json({'msg': 'wrong email or user does not exist'}) password = create_uuid() await user.set_password(password) await user.update() return json({"success": True, "msg": password})
async def post(self, request): """ Registration handling. :param request: :return: """ if not await Config.get_registration(): return json( {'msg': 'Registration is already closed'}, status=401 ) try: req = request.json if 'admin' in req: del req['admin'] user = Users(**req) user.session_uuid = create_uuid() uid = await user.create() if not isinstance(uid, int): usr = Users.get_first('session_uuid', user.session_uuid) uid = usr.id if uid: text = REGEMAIL.TEXT_PL if user.lang == 'pl' else REGEMAIL.TEXT_EN text = text.format( acode=user.session_uuid, uid=uid, name=user.name, server=request.host ) resp = await send_email( recipients=[user.email], text=text, subject=REGEMAIL.SUBJECT_PL if user.lang == 'pl' else REGEMAIL.SUBJECT_EN, ) if resp: return json({ 'success': True }) return json({'success': False, 'msg': 'error sending e-mail'}) except DeprecationWarning: return json( {'msg': 'You probably used one of banned chars like ;'}, status=500 ) except UniqueViolationError: return json( {'msg': 'You already registered, try loging in !'}, status=400 ) except: logging.exception('err user.post') return json({}, status=500)
def test_create_uuid(): uid = create_uuid() assert len(uid) == 32 assert uid.isalnum()
async def make_agent_POST_request( self, op, rec_id=None, data=None, text=False, params=None ) -> (int, str): if op["topic"] == "status": status = 200 if self.ACTIVE else 418 status_msg = "Active" if self.ACTIVE else "Inactive" return (status, json.dumps({"status": status_msg})) elif op["topic"] == "connection": operation = op["operation"] if operation == "create-invitation": connection_id = create_uuid() (invitation_url, invitation) = await self.pico_create_invitation() print(invitation_url, invitation) connection = {"id": connection_id, "invitation": invitation, "invitation_url": invitation_url} store_resource(connection_id, "connection", connection) resp_status = 200 resp_text = json.dumps({"connection_id": connection_id, "invitation": invitation, "invitation_url": invitation_url, "connection": connection}) return (resp_status, resp_text) elif operation == "receive-invitation": connection_id = create_uuid() if "invitation_url" in data and 0 < len(data["invitation_url"]): invitation_url = data["invitation_url"] invitation = self.extract_invite_info(invitation_url) elif "invitation" in data and 0 < len(data["invitation"]): return (500, '500: No Invitation URL Provided\n\n'.encode('utf8')) else: return (500, '500: No Invitation Provided\n\n'.encode('utf8')) print(invitation_url) print(invitation) await self.pico_receive_invitation(invitation_url) connection = {"id": connection_id, "invitation": invitation, "invitation_url": invitation_url} store_resource(connection_id, "connection", connection) resp_status = 200 resp_text = json.dumps({"connection_id": connection_id, "invitation": invitation, "invitation_url": invitation_url, "connection": connection}) return (resp_status, resp_text) elif (operation == "accept-invitation" or operation == "accept-request" or operation == "remove" or operation == "start-introduction" or operation == "send-ping" ): connection_id = rec_id connection = get_resource(rec_id, "connection") if connection: # TODO no op for now resp_status = 200 resp_text = json.dumps({"connection_id": rec_id, "state": "active", "connection": connection_dict}) return (resp_status, resp_text) return (404, '404: Not Found\n\n'.encode('utf8'))
async def set_magic_string(self): self.magic_string = create_uuid() self.magic_string_date = datetime.utcnow()
async def get_session_uuid(self): session_uuid = create_uuid() await self.set_session_uuid(session_uuid) await self.update_only_one_value('last_login', datetime.utcnow()) return session_uuid