示例#1
0
def delete_user():
    """Controller for handling deletion of user profile by
    profile owner.
    :return: json object with success message or message with error
    """
    data = request.get_json()
    valid = validator.hash_check(data['hash_sum'])
    if valid['status']:
        user_id = db.get_user_id_by_hash(data['hash_sum'])
        logger.warning(user_id)
        tuple_of_problems = db.get_problem_id_for_del(user_id)
        problem_list = []
        for tuple_with_problem_id in tuple_of_problems:
            problem_list.append(tuple_with_problem_id[0])
        if db.get_user_comments_count(user_id)[0]:
            db.change_comments_to_anon(user_id)
        if problem_list:
            for problem_id in problem_list:
                db.change_problem_to_anon(problem_id)
                db.change_activity_to_anon(problem_id)
            db.delete_user(user_id[0])
            logger.info('User with id %s has been deleted' % user_id[0])
            response = jsonify(msg='success', deleted_user=user_id[0])
        else:
            db.delete_user(user_id[0])
            logger.info('User with id %s has been deleted' % user_id[0])
            response = jsonify(msg='success', deleted_user=user_id[0])
    else:
        response = Response(json.dumps(valid),
                            mimetype='application/json'), 400
    return response
示例#2
0
def post_problem():
    """Function which adds data from problem form to DB.
    :return: If request data is invalid:
    {'status': False, 'error': [list of errors]}, 400
    If all ok:
    {'added_problem': 'problem_title'
    'problem_id': 'problem_id'}
    """
    if request.method == 'POST' and request.form:
        data = request.form
        logger.warning(json.dumps(request.form))
        logger.info(data)
        valid = validator.problem_post(data)
        if valid['status']:
            logger.debug('Checks problem post validation. %s', valid)
            user_id = current_user.uid
            posted_date = int(time.time())
            last_id = db.problem_post(data['title'], data['content'],
                                      data['proposal'], data['latitude'],
                                      data['longitude'], data['type'],
                                      posted_date, user_id)
            if last_id:
                db.problem_activity_post(last_id, posted_date, user_id)
            logger.debug('New problem post was created with id %s', last_id)
            response = jsonify(added_problem=data['title'], problem_id=last_id)
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
        return response
示例#3
0
def post_problem():
    """Function which adds data from problem form to DB.
    :return: If request data is invalid:
    {'status': False, 'error': [list of errors]}, 400
    If all ok:
    {'added_problem': 'problem_title'
    'problem_id': 'problem_id'}
    """
    if request.method == 'POST' and request.form:
        data = request.form
        logger.warning(json.dumps(request.form))
        logger.info(data)
        valid = validator.problem_post(data)
        if valid['status']:
            logger.debug('Checks problem post validation. %s', valid)
            user_id = current_user.uid
            posted_date = int(time.time())
            last_id = db.problem_post(data['title'],
                                      data['content'],
                                      data['proposal'],
                                      data['latitude'],
                                      data['longitude'],
                                      data['type'],
                                      posted_date,
                                      user_id)
            if last_id:
                db.problem_activity_post(last_id, posted_date,
                                         user_id)
            logger.debug('New problem post was created with id %s', last_id)
            response = jsonify(added_problem=data['title'],
                               problem_id=last_id)
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
        return response
示例#4
0
def delete_user():
    """Controller for handling deletion of user profile by
    profile owner.
    :return: json object with success message or message with error
    """
    data = request.get_json()
    valid = validator.hash_check(data['hash_sum'])
    if valid['status']:
        user_id = db.get_user_id_by_hash(data['hash_sum'])
        logger.warning(user_id)
        tuple_of_problems = db.get_problem_id_for_del(user_id)
        problem_list = []
        for tuple_with_problem_id in tuple_of_problems:
            problem_list.append(tuple_with_problem_id[0])
        if db.get_user_comments_count(user_id)[0]:
            db.change_comments_to_anon(user_id)
        if problem_list:
            for problem_id in problem_list:
                db.change_problem_to_anon(problem_id)
                db.change_activity_to_anon(problem_id)
            db.delete_user(user_id[0])
            logger.info('User with id %s has been deleted' % user_id[0])
            response = jsonify(msg='success', deleted_user=user_id[0])
        else:
            db.delete_user(user_id[0])
            logger.info('User with id %s has been deleted' % user_id[0])
            response = jsonify(msg='success', deleted_user=user_id[0])
    else:
        response = Response(json.dumps(valid),
                            mimetype='application/json'), 400
    return response
示例#5
0
def login():
    """Login processes handler.
    Log user in or shows error messages.

    :rtype: JSON
    :request args: `{'email': '*****@*****.**',
                     'password': '******'}`
    :return:
        - if credentials are ok and log in successful:
            ``{"email": "*****@*****.**",
            "iat": "???",
            "id": 6,
            "name": "oleg",
            "role": "admin",
            "surname": "lyashko",
            "token": "hashed_auth_token"}``
        - if user with entered email isn't exists or password was invalid:
            ``{'error':'message'}``

    :statuscode 401: user doesn't exist or password is invalid
    :statuscode 400: login data has invalid format:
    :statuscode 200: credentials are ok

    """
    response = jsonify(), 401
    if request.method == 'POST' and request.get_json():
        data = request.get_json()
        valid = validator.user_login(data)

        if valid['status']:
            user = ecomap_user.get_user_by_email(data['email'])
            if user and user.verify_password(data['password']):
                login_user(user, remember=True)
                response = jsonify(id=user.uid,
                                   name=user.first_name,
                                   surname=user.last_name,
                                   role=user.role, iat="???",
                                   token=user.get_auth_token(),
                                   email=user.email)
                
                response.set_cookie('id',
                                    bytes(user.uid),
                                    max_age=COOKIE_MAX_AGE)
                response.set_cookie('role',
                                    bytes(user.role),
                                    max_age=COOKIE_MAX_AGE)
            if not user:
                logger.warning('if not user')
                response = jsonify(error='There is no user with given email.',
                                   logined=0, ), 401
            elif not user.verify_password(data['password']):
                logger.warning('if not user verify')
                response = jsonify(error='Invalid password, try again.',
                                   logined=0), 401
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
    return response
示例#6
0
def login():
    """Login processes handler.
    Log user in or shows error messages.

    :return:
        - if log in succeed:
            json with user data from db.
            Status 200 - OK
        - if user with entered email isn't exists
            or password was invalid:
            json with error message
            {'error':'message'}
            Status 401 - Unauthorized
        - if login data has invalid format:
            Status 400 - Bad Request
    """
    response = jsonify(), 401
    if request.method == 'POST' and request.get_json():
        data = request.get_json()
        valid = validator.user_login(data)

        if valid['status']:
            user = ecomap_user.get_user_by_email(data['email'])
            if user and user.verify_password(data['password']):
                login_user(user, remember=True)
                response = jsonify(id=user.uid,
                                   name=user.first_name,
                                   surname=user.last_name,
                                   role=user.role,
                                   iat="???",
                                   token=user.get_auth_token(),
                                   email=user.email)
            if not user:
                logger.warning('if not user')
                response = jsonify(
                    error='There is no user with given email.',
                    logined=0,
                ), 401
            elif not user.verify_password(data['password']):
                logger.warning('if not user verify')
                response = jsonify(error='Invalid password, try again.',
                                   logined=0), 401
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
    return response
示例#7
0
def post_problem():
    """Function which adds data about created problem into DB.

    :content-type: multipart/form-data

    :fparam title: Title of problem ('problem with rivers')
    :fparam type: id of problem type (2)
    :fparam lat: lat coordinates (49.8256101)
    :fparam longitude: lon coordinates (24.0600542)
    :fparam content: description of problem ('some text')
    :fparam proposal: proposition for solving problem ('text')

    :rtype: JSON
    :return:
            - If request data is invalid:
                    ``{'status': False, 'error': [list of errors]}``
            - If all ok:
                    ``{"added_problem": "problem title", "problem_id": 83}``

    :statuscode 400: request is invalid
    :statuscode 200: problem was successfully posted

    """
    if request.method == 'POST' and request.form:
        data = request.form
        logger.warning(json.dumps(request.form))
        logger.info(data)
        valid = validator.problem_post(data)
        if valid['status']:
            logger.debug('Checks problem post validation. %s', valid)
            user_id = current_user.uid
            posted_date = int(time.time())
            last_id = db.problem_post(data['title'], data['content'],
                                      data['proposal'], data['latitude'],
                                      data['longitude'], data['type'],
                                      posted_date, user_id)
            if last_id:
                db.problem_activity_post(last_id, posted_date, user_id,
                                         'Added')
            logger.debug('New problem post was created with id %s', last_id)
            response = jsonify(added_problem=data['title'], problem_id=last_id)
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
        return response
示例#8
0
def subscription_post():
    """Function adds data about subscription into DB.
    :param problem_id: id of problem (int)
    :param user_id: id of user (int)
    :param subscr date: date when user subscribed to a problem
    :return: response
    :type: JSON
    """
    if request.method == 'POST':
        data = request.get_json()
        logger.warning(request.get_json())
        logger.info(data)
        user_id = current_user.uid
        subscr_date = int(time.time())
        last_id = db.subscription_post(data['problem_id'], user_id,
                                       subscr_date)
        logger.debug('New subscription post was created with id %s', last_id)
        response = jsonify(subscription_id=last_id)
        return response
def login():
    """Login processes handler.
    Log user in or shows error messages.

    :return:
        - if log in succeed:
            json with user data from db.
            Status 200 - OK
        - if user with entered email isn't exists
            or password was invalid:
            json with error message
            {'error':'message'}
            Status 401 - Unauthorized
        - if login data has invalid format:
            Status 400 - Bad Request
    """
    response = jsonify(), 401
    if request.method == 'POST' and request.get_json():
        data = request.get_json()
        valid = validator.user_login(data)

        if valid['status']:
            user = ecomap_user.get_user_by_email(data['email'])
            if user and user.verify_password(data['password']):
                login_user(user, remember=True)
                response = jsonify(id=user.uid,
                                   name=user.first_name,
                                   surname=user.last_name,
                                   role=user.role, iat="???",
                                   token=user.get_auth_token(),
                                   email=user.email)
            if not user:
                logger.warning('if not user')
                response = jsonify(error='There is no user with given email.',
                                   logined=0, ), 401
            elif not user.verify_password(data['password']):
                logger.warning('if not user verify')
                response = jsonify(error='Invalid password, try again.',
                                   logined=0), 401
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
    return response
示例#10
0
def login():
    """Login processes handler.
    Log user in or shows error messages.

    :rtype: JSON
    :request args: `{'email': '*****@*****.**',
                     'password': '******'}`
    :return:
        - if credentials are ok and log in successful:
            ``{"email": "*****@*****.**",
            "iat": "???",
            "id": 6,
            "name": "oleg",
            "role": "admin",
            "surname": "lyashko",
            "token": "hashed_auth_token"}``
        - if user with entered email isn't exists or password was invalid:
            ``{'error':'message'}``

    :statuscode 401: user doesn't exist or password is invalid
    :statuscode 400: login data has invalid format:
    :statuscode 200: credentials are ok

    """
    response = jsonify(), 401
    if request.method == 'POST' and request.get_json():
        data = request.get_json()
        valid = validator.user_login(data)

        if valid['status']:
            user = ecomap_user.get_user_by_email(data['email'])
            if user and user.verify_password(data['password']):
                login_user(user, remember=True)
                response = jsonify(id=user.uid,
                                   name=user.first_name,
                                   surname=user.last_name,
                                   role=user.role,
                                   iat="???",
                                   token=user.get_auth_token(),
                                   email=user.email)

                response.set_cookie('id',
                                    bytes(user.uid),
                                    max_age=COOKIE_MAX_AGE)
                response.set_cookie('role',
                                    bytes(user.role),
                                    max_age=COOKIE_MAX_AGE)
            if not user:
                logger.warning('if not user')
                response = jsonify(
                    error='There is no user with given email.',
                    logined=0,
                ), 401
            elif not user.verify_password(data['password']):
                logger.warning('if not user verify')
                response = jsonify(error='Invalid password, try again.',
                                   logined=0), 401
        else:
            response = Response(json.dumps(valid),
                                mimetype='application/json'), 400
    return response