add(backend): cache-control header #10

Merged
ada merged 1 commit from ada/cache-control into main 2023-10-01 22:01:22 +02:00
3 changed files with 26 additions and 6 deletions

View file

@ -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 secret: Secret key for delete url
:param url_id: key for access to content. :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 :param content: Paste content
:return: None :return: None
""" """
@ -40,6 +40,7 @@ def insert_content_db(url_id: str, expiration: int, content: str, secret: str) -
data = {"content": content, "secret": secret} data = {"content": content, "secret": secret}
for key, key_content in data.items(): for key, key_content in data.items():
db.hset(url_id, key, key_content) db.hset(url_id, key, key_content)
db.expire(url_id, expiration) if expiration != 0:
db.expire(url_id, expiration)
else: else:
logging.error(f"Key : {url_id} already exist") # noqa: G004 logging.error(f"Key : {url_id} already exist") # noqa: G004

View file

@ -12,7 +12,7 @@ from flask import (
from werkzeug import Response from werkzeug import Response
from paste.db import check_content_exist, connect_redis, insert_content_db 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="/") home = Blueprint("home", __name__, url_prefix="/")
@ -49,11 +49,12 @@ def create() -> Response:
""" """
content = request.form.get("content") content = request.form.get("content")
time = request.form.get("time") 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_data = create_paste(content, time)
flash(flash_data["url_id"], category="create") flash(flash_data["url_id"], category="create")
flash(flash_data["secret"], category="create") flash(flash_data["secret"], category="create")
return redirect(url_for("home.homepage")) return redirect(url_for("home.homepage"))
@ -74,7 +75,7 @@ def delete_paste(path: str) -> Response:
@home.route("/<path:path>") @home.route("/<path:path>")
def get_content(path: str) -> str: def get_content(path: str) -> Response | str:
""" """
Return paste for asked url. Return paste for asked url.
:param path: Requested path. :param path: Requested path.
@ -84,6 +85,13 @@ def get_content(path: str) -> str:
data = db.hgetall(path) data = db.hgetall(path)
if check_content_exist(path): if check_content_exist(path):
flash(data["content"]) 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) return abort(404)

View file

@ -5,6 +5,7 @@ import secrets
import string import string
from paste import config from paste import config
from paste.db import connect_redis
def generate_id() -> str: def generate_id() -> str:
@ -24,3 +25,13 @@ def generate_secret() -> str:
:return: The secret. :return: The secret.
""" """
return secrets.token_hex() 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)