From 4153596e075360546f440bc02a12e7594f4087e4 Mon Sep 17 00:00:00 2001 From: Rick Date: Tue, 29 Sep 2020 00:25:17 +0200 Subject: [PATCH] Ajout regex pour lien MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merci à Romain pour ces modifications. --- app.py | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/app.py b/app.py index 6d2fda8..3d87eda 100644 --- a/app.py +++ b/app.py @@ -1,21 +1,39 @@ -from flask import Flask, render_template, request, redirect, url_for, make_response, Markup +from flask import Flask, render_template, request, redirect, make_response, \ + Markup from enum import Enum from bs4 import BeautifulSoup +import re + +__author__ = "rick@gnous.eu | Romain" +__licence__ = "GPL3 or later" app = Flask('ui', static_url_path="/static") app.config['TEMPLATES_AUTO_RELOAD'] = True class Status(Enum): - ERREUR_LIEN = "Le lien doit être en http ou https !", + ERREUR_LIEN = "Le lien doit être en http ou https et valide !" BON = "Lien ajouté !" def ecritureFichierHtml(nouvLien, cheminFichier): - with open(cheminFichier, 'r') as file: + with open(cheminFichier, 'r+') as file: soup = BeautifulSoup(file, 'html.parser') soup.find("hr").insert_after("", nouvLien) - with open(cheminFichier, 'w') as file: + file.seek(0) file.write(soup.prettify()) +def valideUrl(url: str) -> bool: + # thx django + regex = re.compile( + r'^(?:http|ftp)s?://' # http:// or https:// + r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' # domain... + r'localhost|' # localhost... + r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|' # ...or ipv4 + r'\[?[A-F0-9]*:[A-F0-9:]+\]?)' # ...or ipv6 + r'(?::\d+)?' # optional port + r'(?:/?|[/?]\S+)$', re.IGNORECASE) + + return bool(re.search(regex, url)) + @app.route('/') def slash(): response = make_response(app.send_static_file("index.html")) @@ -30,16 +48,28 @@ def ajout(): def apropos(): return app.send_static_file("apropos.html") +@app.route("/bizutage", methods=["GET"]) +def bizutage_redirect(): + return redirect('/') + @app.route("/bizutage", methods=["POST"]) def bizutage(): if request.method == "POST": lien = request.values['lien'] - if not (lien.startswith("http") or lien.startswith("https")): - return render_template("ajout.html", erreur=Status.ERREUR_LIEN.value) + if not valideUrl(lien): + return render_template( + "ajout.html", + erreur=Status.ERREUR_LIEN.value + ) titre = Markup.escape(request.values['titre']) desc = Markup.escape(request.values['desc']) - nouvLien = "

{}

Lien


{}

".format(titre, lien, desc) + nouvLien = f"""
+

{titre}

+

Lien

+
+

{desc}

+
""" nouvLienHtml = BeautifulSoup(nouvLien, "html.parser") ecritureFichierHtml(nouvLienHtml, "static/index.html")