Example #1
0
    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'))
Example #2
0
 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)
Example #3
0
 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
     })
Example #4
0
File: auth.py Project: ad-b/aioquiz
 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)
Example #5
0
 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()
Example #6
0
 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)
Example #7
0
 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})
Example #8
0
 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)
Example #9
0
def test_create_uuid():
    uid = create_uuid()
    assert len(uid) == 32
    assert uid.isalnum()
Example #10
0
    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'))
Example #11
0
 async def set_magic_string(self):
     self.magic_string = create_uuid()
     self.magic_string_date = datetime.utcnow()
Example #12
0
 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