def check_special_profile(profile_id):
    """ Get Special Profile """

    user_profile = Profiles.get_profile(profile_id=profile_id)
    if not user_profile:
        return custom_response("Profile not found", 400)

    user_profile, user_ = profile_schema.dump(user_profile), None
    if user_profile.get('email'):
        user_ = User.get_user_by_email(user_profile.get('email'))
    else:
        user_ = User.get_user_by_email(user_profile.get('social_id'))

    user_data_needed = {
        **check_user_options_and_services(user_), "user_id": user_.id,
        "role": user_.user_type,
        "beats_shared": user_.medias.filter_by(genre_musical='beats').count(),
        "followings": user_.user.count(),
        "followers": user_.admire.count()
    }
    user_beats = user_.medias.filter_by(genre_musical='beats').all()
    return custom_response(
        {
            "profile_checked": user_profile,
            "user_data": user_data_needed,
            # "user_beats": [media_schema.dump(beat) for beat in user_beats]
        },
        200)
Beispiel #2
0
def get_mail():
    """ Get Email """

    data, error = validate_data(user_email, request)
    if error:
        return custom_response(data, 400)

    user = User.get_user_by_email(data.get('email'))
    if user:
        keys = random_int()
        reset_pass = user.reset_password_key
        user_id = user_schema.dump(User.get_user_by_email(data.get('email')))['id']

        if reset_password('RequestPassword.html', keys, email=data.get('email'), name=user.name):
            if reset_pass:
                data_user = reset_pass_schema.dump(reset_pass[0])
                data_user.update({'keys': keys, 'password_reset': 1})
                reset_pass[0].update(data_user)
            else:
                KeyResetPassword(dict(keys=keys, user_id=user_id, password_reset=1)).save()

            return custom_response('Email send', 200)

        return custom_response("Connexion Failed", 400)

    return custom_response("Email not Found", 400)
Beispiel #3
0
def register():
    """ Create User Function """

    data, error = validate_data(user_schema, request, return_dict=False)
    if error:
        return custom_response(data, 400)

    if User.get_user_by_email(data.get('email')):
        return custom_response("Email already exist", 400)

    data.update({'fileStorage_key': random_string(10), 'profile_id': create_profile(data)})
    new_user = User(data)
    new_user.save()
    keys = random_int()
    KeyResetPassword(dict(keys=keys, user_id=new_user.id)).save()
    generate_basic_stars(user_id=new_user.id)
    if data.get('services'):
        generate_condition_globals(new_user.id)
        if data.get('user_type') == USER_ARTIST_BEATMAKER:
            create_all_default_contract(new_user.id)
        data['services']['user_id'] = new_user.id
        data['services']['galleries'] = check_galleries_files(request, new_user)
        data['services']['materials_id'] = create_new_materials_for_new_services()
        new_service = Services(data['services'])
        new_service.save()
        generate_basic_stars(service_id=new_service.id)
        first_service('FirstService.html', data["email"], data["name"], data['services']["title"])
    login_success('LoginSuccess.html', data["email"], data["name"], keys)
    return token_return(Auth.generate_token(new_user.id), data.get('name'), data.get('email'))
Beispiel #4
0
def login():
    """ function for login in api """

    data, error = validate_data(user_password, request)
    if error:
        return custom_response(data, 400)

    user = User.get_user_by_email(data['email'])

    try:
        if user.reset_password_key:
            return custom_response("Active your account", 400)

    except AttributeError:
        pass

    try:
        response = 'invalid email' if not user else 'invalid password' if not user.check_hash(data['password']) else 0
        if response:
            return custom_response(response, 400)

    except TypeError:
        pass

    ser_user = user_schema.dump(user)
    token = Auth.generate_token(ser_user.get('id'))
    if ser_user['email']:
        user_profile = profile_schema.dump(Profiles.get_profile(ser_user.get('email')))

        if user_profile.get('photo'):
            return token_return(token, ser_user['name'], data['email'], user_profile['photo'])

    return custom_response({'token': token, 'name': ser_user['name'], 'email': data['email']}, 200)
Beispiel #5
0
def callback():
    """ My Callback function for google login and register """

    google = OAuth2Session(Production.CLIENT_ID, token=request.get_json())
    resp = google.get(Production.USER_INFO)
    if resp.status_code == 200:
        user_data, data = resp.json(), {}
        user_in_db = User.get_user_by_social_id(user_data['id'])
        if user_in_db:
            token = Auth.generate_token(user_in_db.id)
            _user_profile = Profiles.get_profile(social_id=user_data['id'])
            return token_return(token, user_in_db.name, user_in_db.email, _user_profile.photo)

        if User.get_user_by_email(user_data['email']):
            return custom_response("Email already exist", 400)

        data.update({
            'social': "google",
            'name': user_data['family_name'],
            'social_id': user_data['id'],
            'fileStorage_key': random_string(10),
            'email': user_data['email'],
            'photo': user_data['picture']
        })
        user = User(data)
        create_profile(data)
        user.save()
        create_all_default_contract(user.id)
        token = Auth.generate_token(user.id)
        generate_basic_stars(user_id=user.id)
        login_success('LoginSuccess.html', email=data['email'], name=data["name"])
        return token_return(token, data.get('name'), data.get('email'), data.get('photo'))

    return custom_response("Unauthorized, Could not fetch your information.", 400)
    def check_beatMaker_token(self):
        """ """

        self.service_test['thematics'] = [AFROBEAT_ALLOWED]
        data = {
            "name": self.name,
            "email": self.email,
            "password": self.password,
            "user_type": USER_ARTIST_BEATMAKER,
            "services": json.dumps(self.service_test),
        }
        data_form_type = MultipartEncoder(fields=data)
        resp = self.app.post('api/users/register',
                             data=data_form_type,
                             content_type=data_form_type.content_type)
        token = json.loads(resp.get_data(as_text=True))['token']
        self.assertEqual(resp.status_code, 200)
        # Check my key in data
        with self._app.app_context():
            user = User.get_user_by_email(self.email)
            self.assertTrue(user)
            keys_obj = KeyResetPassword.get_by_user_id(user.id)
            self.assertTrue(keys_obj)
        new_data = {'email': self.email, 'keys': keys_obj.keys}
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 200)
        return token
    def createTestAccount(self, email=None):
        """ """

        data_form_type = MultipartEncoder(
            fields={
                "name": self.name,
                "email": email or self.email,
                "password": self.password
            })
        response = self.app.post('api/users/register',
                                 data=data_form_type,
                                 content_type=data_form_type.content_type)
        self.assertEqual(response.status_code, 200)

        # Check my key in data
        with self._app.app_context():
            user = User.get_user_by_email(email=email or self.email)
            self.assertTrue(user)
            keys_obj = KeyResetPassword.get_by_user_id(user.id)
            self.assertTrue(keys_obj)

        new_data = {"keys": keys_obj.keys, "email": email or self.email}
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 200)
    def check_keys_validate(self):

        # Check my key in data
        with self._app.app_context():
            user = User.get_user_by_email(self.email)
            self.assertTrue(user)
            keys_obj = KeyResetPassword.get_by_user_id(user.id)
            self.assertTrue(keys_obj)

        # If my key is not valid
        # Check if keys is out of data and return error for keys
        new_data = {"email": self.email}
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 400)
        json_returned = json.loads(response.get_data(as_text=True))
        self.assertEqual(json_returned,
                         'keys: Missing data for required field.')

        # Check if email is out of data and return error for email
        new_data = {"keys": keys_obj.keys}
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 400)
        json_returned = json.loads(response.get_data(as_text=True))
        self.assertEqual(json_returned,
                         'email: Missing data for required field.')

        # Check if key no validate
        new_data = {"keys": 00000, "email": self.email}
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 400)
        json_returned = json.loads(response.get_data(as_text=True))
        self.assertTrue(json_returned, "Keys invalid")

        # Check if key validate
        new_data['keys'] = keys_obj.keys
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 200)
        json_returned = json.loads(response.get_data(as_text=True))
        self.assertTrue(json_returned, "validate")

        # Check if key already used
        response = self.app.post('api/users/get_if_keys_validate',
                                 data=json.dumps(new_data),
                                 content_type='application/json')
        self.assertEqual(response.status_code, 400)
        json_returned = json.loads(response.get_data(as_text=True))
        self.assertTrue(json_returned, "already used")
Beispiel #9
0
def validation_keys():
    """ get if user keys is validate for reset password """

    data, error = validate_data(keys_validator_schema, request)
    if error:
        return custom_response(data, 400)

    reset_pass = User.get_user_by_email(data.get('email')).reset_password_key
    try:
        if reset_pass_schema.dump(reset_pass[0])["keys"] == int(data["keys"]):
            reset_pass[0].delete()
            return custom_response("validate", 200)
        return custom_response("Keys invalid", 400)
    except IndexError:
        return custom_response("already used", 400)
Beispiel #10
0
def reset_password_after_validate_keys():
    """ Reset Password """

    data, error = validate_data(user_password, request)
    if error:
        return custom_response(data, 400)

    if not data.get('password'):
        return custom_response("Password could not be null", 400)

    user_in_db = User.get_user_by_email(data.get('email'))
    if user_in_db:
        user_in_db.update_password(data.get('password'))
        password_updated('PasswordUpdated.html', email=data.get('email'), name=user_in_db.name)
        return custom_response("password changed", 200)

    return custom_response("Unauthorized", 400)
def update_profile(user_connected_model, user_connected_schema):
    """ Update my profile """

    data, error = validate_data(profile_schema, request, False)
    if error:
        return custom_response(data, 400)

    if not data.get("email") or not data.get("name"):
        return custom_response("email and name is required", 400)

    if data['email'] != user_connected_model.email and User.get_user_by_email(
            data['email']):
        return custom_response("email exist", 400)

    user_profile = user_connected_model.profile or Profiles.get_profile(
        social_id=user_connected_model.social_id)
    p_dumped = profile_schema.dump(user_profile)

    data.update(p_dumped)
    _u_model = user_connected_model
    p_photo = request.files.get('photo')
    if p_photo:
        if p_dumped["photo"]:
            destroy_image(p_dumped["photo"], CLOUD_IMAGES_PROFILES_TYPE,
                          _u_model.fileStorage_key, _u_model.id)
        data['photo'] = upload_image(p_photo, CLOUD_IMAGES_PROFILES_TYPE,
                                     _u_model.fileStorage_key, _u_model.id)

    c_photo = request.files.get('cover_photo')
    if c_photo:
        if p_dumped["cover_photo"]:
            destroy_image(p_dumped["cover_photo"], CLOUD_IMAGES_PROFILES_TYPE,
                          _u_model.fileStorage_key, _u_model.id)
        data['cover_photo'] = upload_image(c_photo, CLOUD_IMAGES_PROFILES_TYPE,
                                           _u_model.fileStorage_key,
                                           _u_model.id)

    user_connected_schema["name"], user_connected_schema["email"] = data[
        'name'], data['email']
    user_connected_model.update(user_connected_schema)
    user_profile.update(data)
    new_user_profile = user_connected_model.profile or Profiles.get_profile(
        social_id=user_connected_model.social_id)
    return custom_response(profile_schema.dump(new_user_profile), 200)