From 103479668d5dd98958d0be20159cb48ff33244da Mon Sep 17 00:00:00 2001 From: Ada Date: Sun, 1 Oct 2023 20:01:21 +0000 Subject: [PATCH] add(backend): cache-control header Co-authored-by: Ada Co-committed-by: Ada --- paste/db.py | 5 +++-- paste/home.py | 16 ++++++++++++---- paste/utils.py | 11 +++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/paste/db.py b/paste/db.py index ed26bc3..1aba44c 100755 --- a/paste/db.py +++ b/paste/db.py @@ -31,7 +31,7 @@ def insert_content_db(url_id: str, expiration: int, content: str, secret: str) - :param secret: Secret key for delete url :param url_id: key for access to content. - :param expiration: Content expiration in second. + :param expiration: Content expiration in second. Set 0 if no expiration. :param content: Paste content :return: None """ @@ -40,6 +40,7 @@ def insert_content_db(url_id: str, expiration: int, content: str, secret: str) - data = {"content": content, "secret": secret} for key, key_content in data.items(): db.hset(url_id, key, key_content) - db.expire(url_id, expiration) + if expiration != 0: + db.expire(url_id, expiration) else: logging.error(f"Key : {url_id} already exist") # noqa: G004 diff --git a/paste/home.py b/paste/home.py index 939b64b..fd40a8e 100755 --- a/paste/home.py +++ b/paste/home.py @@ -12,7 +12,7 @@ from flask import ( from werkzeug import Response from paste.db import check_content_exist, connect_redis, insert_content_db -from paste.utils import generate_id, generate_secret +from paste.utils import generate_id, generate_secret, get_expiration_time home = Blueprint("home", __name__, url_prefix="/") @@ -49,11 +49,12 @@ def create() -> Response: """ content = request.form.get("content") time = request.form.get("time") - time = 86400 if time == "" else int(time) + time = 0 if time == "" else int(time) flash_data = create_paste(content, time) flash(flash_data["url_id"], category="create") flash(flash_data["secret"], category="create") + return redirect(url_for("home.homepage")) @@ -74,7 +75,7 @@ def delete_paste(path: str) -> Response: @home.route("/") -def get_content(path: str) -> str: +def get_content(path: str) -> Response | str: """ Return paste for asked url. :param path: Requested path. @@ -84,6 +85,13 @@ def get_content(path: str) -> str: data = db.hgetall(path) if check_content_exist(path): flash(data["content"]) - return render_template("content.html.j2") + cache_time = get_expiration_time(path) + current_response = Response(render_template("content.html.j2")) + if cache_time == -1: + current_response.headers["Cache-Control"] = "public" + + else: + current_response.headers["Cache-Control"] = f"public, {cache_time}" + return current_response return abort(404) diff --git a/paste/utils.py b/paste/utils.py index 8183b60..18c681f 100755 --- a/paste/utils.py +++ b/paste/utils.py @@ -5,6 +5,7 @@ import secrets import string from paste import config +from paste.db import connect_redis def generate_id() -> str: @@ -24,3 +25,13 @@ def generate_secret() -> str: :return: The secret. """ return secrets.token_hex() + + +def get_expiration_time(key: str) -> int: + """ + Get key expiration time + :param key: Key to check + :return: Expiration time in second. + """ + db = connect_redis() + return db.ttl(key)