76 lines
1.9 KiB
Python
76 lines
1.9 KiB
Python
from flask import Flask, render_template, request, redirect, url_for, \
|
|
make_response, Markup
|
|
from enum import Enum
|
|
from bs4 import BeautifulSoup
|
|
|
|
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 !"
|
|
BON = "Lien ajouté !"
|
|
|
|
|
|
def ecritureFichierHtml(nouvLien, cheminFichier):
|
|
with open(cheminFichier, 'r+') as file:
|
|
soup = BeautifulSoup(file, 'html.parser')
|
|
soup.find("div", {'id': 'liens'}).append(nouvLien)
|
|
file.seek(0)
|
|
file.write(soup.prettify())
|
|
|
|
|
|
@app.route('/')
|
|
def slash():
|
|
response = make_response(render_template("index.html"))
|
|
response.headers["Content-Security-Policy"] = "default-src 'self'"
|
|
return response
|
|
|
|
|
|
@app.route("/ajout")
|
|
def ajout():
|
|
return render_template("ajout.html")
|
|
|
|
|
|
@app.route("/apropos")
|
|
def apropos():
|
|
return render_template("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'].lower()
|
|
if not (lien.startswith("http") or lien.startswith("https")):
|
|
return render_template(
|
|
"ajout.html",
|
|
erreur=Status.ERREUR_LIEN.value
|
|
)
|
|
|
|
titre = Markup.escape(request.values['titre'])
|
|
desc = Markup.escape(request.values['desc'])
|
|
|
|
nouvLien = f"""
|
|
<div class="elem">
|
|
<h2>{titre}</h2>
|
|
<p><a href="{lien}">Lien</a></p>
|
|
<hr>
|
|
<p>{desc}</p>
|
|
</div>"""
|
|
nouvLienHtml = BeautifulSoup(nouvLien, "html.parser") \
|
|
.find("div", {"class": "elem"})
|
|
ecritureFichierHtml(nouvLienHtml, "templates/index.html")
|
|
|
|
else:
|
|
print("error")
|
|
return render_template("ajout.html", reussi=Status.BON.value)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app.run(debug=True)
|