from dotenv import load_dotenv
from flask import Flask, render_template, redirect, url_for, request, send_from_directory, session
from pathlib import Path
import os
from datetime import timedelta
# Load environment variables
load_dotenv()
cwd = Path.cwd()
current = ''
# Configuration from environment
SECRET_KEY = os.getenv('FLASK_SECRET_KEY', '_5#y2f231321sadwzx')
USERNAME = os.getenv("USER", 'admin')
PASSWORD = os.getenv("PASS", 'password')
TEMPLATE_FOLDER = 'templates'
INPUT_XML = os.path.join(TEMPLATE_FOLDER, 'input.xml')
# Ensure templates directory exists
os.makedirs(TEMPLATE_FOLDER, exist_ok=True)
app = Flask(__name__, static_url_path='/')
app.secret_key = SECRET_KEY
@app.before_first_request
def make_session_permanent():
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=1)
@app.route('/login', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
if request.form['uname'] != USERNAME or request.form['pwd'] != PASSWORD:
error = 'Invalid Credentials. Please try again.'
else:
session['logged_in'] = True
return redirect("/")
return render_template('login.html', error=error)
@app.route("/")
def loger():
ll = len(textdisplay)
if current == True:
return render_template("form.html", textdisplay=textdisplay1, ll=ll)
elif 'logged_in' not in session:
return redirect("/login", code=302)
else:
session.clear()
return render_template("form.html", textdisplay=textdisplay1, ll=ll)
@app.route("/xml/rss/input.xml")
def XML():
return send_from_directory(TEMPLATE_FOLDER, "input.xml", as_attachment=False)
global textdisplay
global textdisplay1
textdisplay = []
textdisplay1 = []
@app.route('/', methods=['POST'])
def my_form_post():
text = request.form['text']
global textspl
global edittitle
textspl = text.splitlines()
edittitle = text.splitlines()
global textdisplay
global textdisplay1
textdisplay = []
textdisplay1 = []
ErCheck = 0
textspl = list(filter(None, textspl))
edittitle = list(filter(None, edittitle))
for i in range(len(textspl)):
if not textspl[i]:
ErCheck += 1
elif textspl[i] is None:
ErCheck += 1
elif textspl[i] == '':
ErCheck += 1
elif textspl[i] == "":
ErCheck += 1
else:
textspl[i-ErCheck] = textspl[i]
textdisplay2 = textspl
textspl = []
for i in textdisplay2:
if i.strip() == '':
pass
elif i.strip() == "":
pass
else:
textspl.append(i)
for i in range(len(textspl)):
testspldisplay = str(i+1) + ") " + textspl[i]
testspldisplay1 = textspl[i]
textdisplay.append(testspldisplay)
textdisplay1.append(testspldisplay1)
if text not in [None, "", 0]:
try:
if os.path.exists(INPUT_XML):
os.remove(INPUT_XML)
with open(INPUT_XML, "a", encoding='utf-8') as o:
o.write(" \n")
o.write(" \n")
o.write("RSS Feed")
except Exception as e:
print(f"No file to delete or error creating file: {e}")
incEr = 0
for i in range(len(textspl)):
if textspl[i] in [None, ""]:
incEr += 1
else:
pass
edittitle[i] = edittitle[i-incEr] + '\n'
textspl[i] = " " + '' + textspl[i-incEr] + ' \n'
print(textspl[i])
try:
with open(INPUT_XML, "a", encoding='utf-8') as o:
o.write("\t\t- \n")
o.write(textspl[i])
o.write("\t\t\t\t
")
except Exception as e:
print(f"Error writing item: {e}")
else:
print("fail")
ErCheck = 0
with open(INPUT_XML, "a", encoding='utf-8') as o:
session['logged_in'] = True
o.write(" \n")
o.write("")
session['logged_in'] = True
return redirect("/success")
@app.route("/success")
def success():
return render_template("success.html", textdisplay=textdisplay)
@app.route("/current")
def current():
return render_template("current.html", textdisplay=textdisplay1)
@app.route('/css/')
def send_report(path):
return send_from_directory('css', path)
@app.route('/fonts/')
def send_report1(path):
return send_from_directory('fonts', path)
@app.route('/images/')
def send_report2(path):
return send_from_directory('images', path)
@app.route('/js/')
def send_report3(path):
return send_from_directory('js', path)
@app.route('/vendor/')
def send_report4(path):
return send_from_directory('vendor', path)
@app.route('/logo/')
def send_logo(filename):
return send_from_directory(os.path.join(app.root_path, 'templates/logo'), filename)
@app.route('/favicon.ico')
def favicon():
return send_from_directory(os.path.join(app.root_path, 'templates/logo'), 'favicon.ico')
if __name__ == '__main__':
app.run(debug=True, use_reloader=False, host="0.0.0.0", port=80)