Exemplo n.º 1
0
def activate_account(req, **kwargs):
    """
    :kwargs: phase (there are two phases, first generate, second activate), code
            medium ( phone | email)
    """

    if kwargs['phase'] == 'generate':
        try:
            activation = Activations.create(user=req.user, code=fresh_pin(6))
            message = f"""Here is your activation code from @Africaniz {activation.code}. It will expire in 5 minutes."""
            if kwargs['medium'] == 'email':
                if req.user.email_verified:
                    return {'status': False, 'msg': 'Email Verified.'}
                else:
                    template = {
                        'id': 'd-ddcfb895e0904b98bc78828c27d63df2',
                        'data': {
                            'code': activation.code
                        }
                    }
                    send_email(req.user.email, message, template)
            elif kwargs['medium'] == 'phone':
                if not req.user.phone:
                    return {'status': False, 'msg': 'Null Number.'}
                if req.user.phone_verified:
                    return {'status': False, 'msg': 'Phone Verified.'}
                else:
                    pass
        except Exception as e:
            return {'status': False, 'msg': 'Try Again.'}
        return {'status': True, 'msg': 'Pin Sent.'}
    elif kwargs['phase'] == 'activate':
        try:
            activation = Activations.get_or_none(code=kwargs['code'])
            if activation:
                now = datetime.datetime.now()
                tdelta = now - activation.ctime

                if tdelta.seconds >= 5 * 60:
                    return {'status': False, 'msg': 'Pin Expired.'}
                if activation.user == req.user:
                    if kwargs['medium'] == 'email':
                        Users.update(email_verified=True).where(
                            Users.id == req.user.id).execute()
                        msg = 'Email'
                    elif kwargs['medium'] == 'phone':
                        Users.update(phone_verified=True).where(
                            Users.id == req.user.id).execute()
                        msg = 'Phone'
                else:
                    return {'status': False, 'msg': 'Wrong User.'}
            else:
                return {'status': False, 'msg': 'Ungenerated Pin.'}
        except Exception as e:
            return {'status': False, 'msg': "Server Error."}
        return {'status': True, 'msg': f'{msg} Activated.'}
Exemplo n.º 2
0
def get_user(req, **kwargs):
    """
    :kwargs: id
    """
    try:
        user = Users.get_or_none(id=int(kwargs['id']))
        data = {
            'id':
            user.id,
            'email':
            user.email,
            'phone':
            user.phone,
            'name':
            user.name,
            'level':
            user.level,
            'email_verified':
            user.email_verified,
            'phone_verified':
            user.phone_verified,
            'info':
            user.info,
            'is_active':
            user.is_active,
            'products':
            user.items.select().count(),
            'notes':
            user.notifications.select().where(
                Notifications.is_read == False).count()
        }
    except Exception as e:
        return {'status': False, 'msg': 'User Missing.'}

    return {'status': True, 'data': {'user': data}, 'msg': 'User Fetched.'}
Exemplo n.º 3
0
def create_user(req, **kwargs):
    """
    :kwargs: email, phone, level, country, city, code, phone_code, mode
    """
    try:
        info = {
            'personal': {
                'phone': kwargs['phone'],
                'email': kwargs['email'],
                'country': kwargs['country'],
                'code': kwargs['code'],
                'city': kwargs['city']
            }
        }
        if kwargs['mode'] == 'create':

            user = Users.create(email=kwargs['email'],
                                phone=kwargs['phone_code'],
                                level=kwargs['level'],
                                info=info)
            message = f"""Welcome to <strong> @Africaniz</strong>,.Akwaaba. 
                            Go to <a href='https://www.africaniz.com/auth/reset'>Africaniz Reset Password.</a>"""
            template = {'id': 'd-a57c95d98df745008d1caeedcaec18fd', 'data': {}}
            send_email(kwargs["email"], message, template)
        elif kwargs['mode'] == 'edit':
            user = Users.update(
                email=kwargs['email'],
                phone=kwargs['phone_code'],
                level=kwargs['level'],
            ).where(Users.id == kwargs['id']).execute()
            user = Users.get_by_id(kwargs['id'])
            user.info['personal']['city'] = info['personal']['city']
            user.info['personal']['code'] = info['personal']['code']
            user.info['personal']['country'] = info['personal']['country']
            user.info['personal']['email'] = info['personal']['email']
            user.info['personal']['phone'] = info['personal']['phone']
            user.save()
        else:
            return {'status': False, 'msg': 'Command Unknown.'}

    except Exception as e:
        return {'status': False, 'msg': 'Exception Raised.'}
    return {'status': True, 'msg': 'Task Done.'}
Exemplo n.º 4
0
def reset_password(req, **kwargs):
    """
    :kwargs:
    """
    """
    :kwargs: phase (there are two phases, first generate, second reset), code
            medium ( phone | email)
    """

    if kwargs['phase'] == 'generate':
        try:
            activation = Activations.create(code=fresh_pin(6))
            message = f"""Here is your activation code from @Africaniz {activation.code}. It will expire in 5 minutes."""
            template = {
                'id': 'd-ddcfb895e0904b98bc78828c27d63df2',
                'data': {
                    'code': activation.code
                }
            }
            send_email(kwargs['email'], message, template)
        except Exception as e:
            return {'status': False, 'msg': 'Try Again.'}
        return {'status': True, 'msg': 'Pin Sent.'}
    elif kwargs['phase'] == 'reset':
        try:
            activation = Activations.get_or_none(code=kwargs['code'])
            if activation:
                now = datetime.datetime.now()
                tdelta = now - activation.ctime

                if tdelta.seconds >= 5 * 60:
                    return {'status': False, 'msg': 'Pin Expired.'}
                if 'password' in kwargs and kwargs['password'] != "":
                    Users.update(password=bcrypt.hashpw(
                        kwargs["password"].encode(), bcrypt.gensalt())).where(
                            Users.email == kwargs['email']).execute()
                else:
                    return {'status': False, 'msg': 'Missing Password'}
            else:
                return {'status': False, 'msg': 'Ungenerated Pin.'}
        except Exception as e:
            return {'status': False, 'msg': "Server Error."}
        return {'status': True, 'msg': 'Password Reset.'}
Exemplo n.º 5
0
def get_users(req, **kwargs):
    """
    :kwargs: None
    """

    try:
        if 'filter' in kwargs:
            filt = Users.level == kwargs['filter']
        else:
            filt = Users.level != 'customer'
        users = Users.select(
            Users.id, Users.email, Users.phone, Users.level, Users.name,
            Users.login_count, Users.login_tries, Users.logins_failed,
            Users.last_login.to_timestamp().alias('last_login')).where(
                filt).dicts()[:]
    except Exception as e:
        return {'status': False, 'msg': 'Exception Raised.'}
    return {'status': True, 'data': users, 'msg': 'Users Found.'}
Exemplo n.º 6
0
def resend_email(req, **kwargs):
    """
    :kwargs: email
    """

    try:

        user = Users.get_or_none(email=kwargs["email"])

        if user:
            message = f"""Welcome to <strong> @Africaniz</strong>,.Akwaaba. 
                        Go to <a href='{req.referer}'>Africaniz Login.</a>"""
            send_email(kwargs["email"], message)
            return {"status": True, "msg": 'Email Sent.'}
        else:
            return {"status": False, "msg": "Missing User."}

    except Exception as e:
        return {"status": False, "msg": "Resend Failed."}
Exemplo n.º 7
0
def fetch_item(req, **kwargs):
    """
    Gets a single item
    :kwargs: item
    """
    item = Items.select().where(Items.id == kwargs['item']).join(Users).get()

    if not item:
        return {'status': False, 'msg': 'Item Unavailable.'}
    user = Users.get_by_id(item.user.id)
    likes = Likes.select().where(Likes.what == 'item',
                                 Likes.pk == item.id).count()
    data = {
        'seller_id': user.id,
        'seller_name': user.name,
        'seller_info': user.info,
        'id': item.id,
        'likes': likes,
        'item': item.item
    }
    return {'status': True, 'data': {item.id: data}}
Exemplo n.º 8
0
def register(req, **kwargs):
    """
    :kwargs: email, password
    """

    try:

        user = Users.create(
            email=kwargs["email"],
            password=bcrypt.hashpw(kwargs["password"].encode(),
                                   bcrypt.gensalt()),
        )

        message = f"""Welcome to <strong> @Africaniz</strong>,.Akwaaba. 
                            Go to <a href='https://www.africaniz.com/auth/login'>Africaniz Login.</a>"""
        template = {'id': 'd64d339f-5146-48ea-bdae-35244673c420', 'data': {}}
        send_email(kwargs["email"], message, template)

    except Exception as e:
        return {"status": False, "msg": "Email Exists."}

    return {"status": True, "msg": "Registration Successfull."}
Exemplo n.º 9
0
def upload_item(req, **kwargs):
    """
    Upload new product.
    :kwargs: item_details, seller_id, update ( whether it is an update)
    """
    item = kwargs['item_details']

    item['images'] = upload_images(item['images'], item['tags'])

    try:
        for i in range(len(item['options'])):

            for j in range(len(item['options'][i]['values'])):
                item['options'][i]['values'][j]['images'] = upload_images(
                    item['options'][i]['values'][j]['images'], item['tags'])
    except Exception as e:
        return {'status': False, 'msg': 'Images Upload Failed.'}

    try:
        seller = Users.get_by_id(int(kwargs['seller_id']))
        if 'update' in kwargs:
            item = Items.update(item=item).where(
                Items.id == int(kwargs['id'])).execute()
            item = Items.get_by_id(int(kwargs['id']))
        else:
            item = Items.create(user=seller, item=item)
        add_tags(item, item.item['tags'])
        #upload to sccial media
    except Exception as e:
        return {'status': False, 'msg': 'Upload Failed.'}

    return {
        'status': True,
        'data': {
            'item_id': item.id
        },
        'msg': 'Upload Successfull.'
    }
Exemplo n.º 10
0
def set_info(req, **kwargs):
    """
    Set information of user
    :kwargs: info, data
    """

    try:
        old_info = req.user.info
        if kwargs['info'] in ['personal', 'social']:
            old_info[kwargs['info']] = kwargs['data']
            Users.update(info=old_info).where(
                Users.id == req.user.id).execute()
        elif kwargs['info'] == 'profile':
            data = kwargs['data']
            data['brand'] = upload_images(data['brand'], [data['title']])
            data['logo'] = upload_images(data['logo'], [data['title']])
            old_info[kwargs['info']] = data
            Users.update(info=old_info).where(
                Users.id == req.user.id).execute()
        elif kwargs['info'] == 'account':
            if req.user.name != kwargs['data']['name']:
                if Users.select().where(
                        Users.name == kwargs['data']['name']).exists():
                    return {'status': False, 'msg': 'Username Exists.'}
                Users.update(name=kwargs['data']['name']).where(
                    Users.id == req.user.id).execute()

            if req.user.email != kwargs['data']['email']:
                if Users.select().where(
                        Users.email == kwargs['data']['email']).exists():
                    return {'status': False, 'msg': 'Email Exists.'}
                Users.update(email=kwargs['data']['email'],
                             email_verified=False).where(
                                 Users.id == req.user.id).execute()

            if req.user.phone != kwargs['data']['phone']:
                if Users.select().where(
                        Users.phone == kwargs['data']['phone']).exists():
                    return {'status': False, 'msg': 'Phone Exists.'}
                Users.update(phone=kwargs['data']['phone'],
                             phone_verified=False).where(
                                 Users.id == req.user.id).execute()
        else:
            return {'status': False, 'msg': 'Dunno what to do.'}

    except Exception as e:
        return {'status': False, 'msg': 'SetInfo Failed.'}

    return {'status': True, 'msg': 'Info Updated.'}
Exemplo n.º 11
0
def login(req, **kwargs):
    """
    :kwargs: email, password, device_hash, device_data
    """
    try:

        user = Users.get_or_none(email=kwargs["email"])

        if user:

            if user.login_tries + 1 > 10:

                return {
                    "status":
                    False,
                    "msg":
                    "Your account has been blocked, you need to reset your password."
                }
            Users.update(login_tries=Users.login_tries +
                         1).where(Users.id == user.id).execute()

            if bcrypt.checkpw(kwargs["password"].encode(),
                              user.password.encode()):

                token = gen_token(user.email, fresh_pin())
                Logins.create(
                    user=user,
                    device_hash=kwargs["device_hash"],
                    device_data=kwargs["device_data"],
                    token=token,
                )

                user_data = {
                    'id': user.id,
                    'email': user.email,
                    'phone': user.phone,
                    'name': user.name,
                    'level': user.level,
                    'email_verified': user.email_verified,
                    'phone_verified': user.phone_verified,
                    'info': user.info,
                    'is_active': user.is_active,
                }

                Users.update(
                    login_count=Users.login_count + 1,
                    last_login=datetime.datetime.now(),
                    login_tries=0).where(Users.id == user.id).execute()

                return {
                    "status": True,
                    "data": {
                        "token": token,
                        "user": user_data
                    },
                    "msg": "Login Successfull."
                }
            else:
                return {"status": False, "msg": "Wrong Password."}
        else:
            return {"status": False, "msg": "Missing User."}

    except Exception as e:
        return {"status": False, "msg": "Login Failed."}