Beispiel #1
0
def check_auth(headers, name, disable_Token=False):
    r = Redis()

    if not disable_Token:
        if headers.get('Token') != str(
                config['FLASK_APP']['FLASK_APP_SECRET_KEY']):
            return jsonify({'message': 'Не верный Token'}), 401

    if not headers.get('UserToken'):
        return jsonify({'message': 'Не верный UserToken'}), 401

    byte_user = r.select_user(headers.get('UserToken'))
    r.close_connection()

    if byte_user == None:
        return jsonify({'message': 'Не верный UserToken'}), 401
    user = pickle.loads(byte_user)
    if user == None:
        return jsonify({'message': 'Не верный UserToken'}), 401

    allowed = user.allow(name.rsplit('.')[-1])
    if allowed != True:
        return allowed

    return True, user
Beispiel #2
0
def url_handler(short_url):

    redis = Redis_db()
    lng_url = redis.hm_select_data(short_url, "long_url")

    redis.close_connection()
    if lng_url:
        return redirect(lng_url[0])

    return jsonify("Not Found"), 404
Beispiel #3
0
def get_full_url(short_url):

    redis = Redis_db()
    lng_url = redis.hm_select_data(short_url, "long_url")

    redis.close_connection()

    if lng_url:
        return jsonify(lng_url[0])

    return jsonify("Not Found"), 404
Beispiel #4
0
    def allow(self, name_func):
        if self.__time_auth < time.time():
            r = Redis()
            r.del_data(self.__user_token)
            r.close_connection()
            return jsonify({'message':
                            'UserToken больше не действителен'}), 401
        permission_name = PERMISSION_AUTHORIZATION.get(name_func)
        if permission_name == None:
            return jsonify({'message': 'Нет доступа'}), 403
        if not self.__role in permission_name:
            return jsonify({'message': 'Нет доступа'}), 403

        return True
Beispiel #5
0
def authorization():
    if request.headers.get('Token') != str(
            config['FLASK_APP']['FLASK_APP_SECRET_KEY']):
        return jsonify({'message': 'Не верный токен'}), 401, {
            'ContentType': 'application/json'
        }
    try:
        database = Postgres_db()
    except TypeError:
        return jsonify({"message": "Нет подключения к БД"})
    redis_db = Redis_db()
    if redis_db.error:
        return jsonify(redis_db.error), 500

    username = request.get_json(silent=True).get("username")
    password = request.get_json(silent=True).get("password")

    if not (valid_username(username, password)
            or valid_password(password, password)):
        return jsonify("Неправильный логин или пароль"), 401

    user_data = database.login(username=username)
    if type(user_data) == str:
        return jsonify(user_data), 500

    if user_data:
        if user_data["status_active"] == True:
            if check_password(user_data, password):
                user = User(id=user_data["id"],
                            username=username,
                            role=user_data["role"])

                redis_db.insert_user(user.get_token(), user)

                return jsonify({
                    "UserToken": user.get_token(),
                    "role": user.get_role()
                })
        else:
            return jsonify({'message': 'Пользователь заблокирован'}), 401, {
                'ContentType': 'application/json'
            }

    return jsonify({'message': 'Неправильный логин или пароль'}), 401
Beispiel #6
0
def create_short_url():
    json = request.get_json(silent=True)
    if not json:
        return jsonify({"message": "JSON не найден"}), 204

    long_url = json.get('long_url')
    if not long_url:
        return jsonify({"message": "Поле long_url не найдено"}), 204

    domain = config['APP']['URL_SERVICE']

    salt = uuid.uuid4().hex
    hash_url = hashlib.pbkdf2_hmac('sha256',
                                   long_url.encode('utf-8'),
                                   salt.encode('utf-8'),
                                   2,
                                   dklen=6)
    link_id = hash_url.hex()

    redis = Redis_db()

    redis.hm_insert_data(link_id, {
        "long_url": str(long_url),
        "salt": str(salt)
    })

    redis.close_connection()
    return jsonify(f'http://{domain}/{link_id}')
Beispiel #7
0
def logout(user):
    """Logout Page"""
    r = Redis_db()

    r.del_user(user.get_token())
    return jsonify({'message': 'Пользователь вышел'}), 401