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
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
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
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
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
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}')
def logout(user): """Logout Page""" r = Redis_db() r.del_user(user.get_token()) return jsonify({'message': 'Пользователь вышел'}), 401