KTVManager_UI/app.py

79 lines
3.4 KiB
Python
Raw Normal View History

2024-11-02 20:04:56 +00:00
# app.py
from flask import Flask, render_template, request, redirect, url_for, session, flash
2024-11-03 15:34:10 +00:00
from flask_caching import Cache
2024-11-02 20:04:56 +00:00
import requests.auth
from lib.datetime import filter_accounts_current_month
from lib.reqs import (get_urls, get_user_accounts)
import requests
import base64
from flask import Flask
from config import DevelopmentConfig # or ProductionConfig
app = Flask(__name__)
app.config.from_object(DevelopmentConfig) # Use DevelopmentConfig or ProductionConfig as needed
2024-11-03 15:34:10 +00:00
cache = Cache(app, config={'CACHE_TYPE': 'SimpleCache'})
2024-11-02 20:04:56 +00:00
@app.route('/')
2024-11-03 15:34:10 +00:00
@cache.cached(timeout=60) # cache for 120 seconds
2024-11-02 20:04:56 +00:00
def home():
# If the user is logged in, redirect to a protected page like /accounts
if session.get('logged_in'):
base_url = app.config['BASE_URL'] # Access base_url from the config
all_accounts = get_user_accounts(base_url, session['auth_credentials'])
current_month_accounts = filter_accounts_current_month(all_accounts)
return render_template('home.html', username=session['username'], accounts=get_user_accounts(base_url, session['auth_credentials']), current_month_accounts=current_month_accounts)
return render_template('index.html')
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
# Encode the username and password in Base64
credentials = f"{username}:{password}"
encoded_credentials = base64.b64encode(credentials.encode()).decode()
base_url = app.config['BASE_URL'] # Access base_url from the config
login_url = f"{base_url}/Login" # Construct the full URL
# Send GET request to the external login API with Basic Auth
response = requests.get(
login_url,
auth=requests.auth.HTTPBasicAuth(username, password)
)
# Check if login was successful
if response.status_code == 200 and response.json().get("auth") == "Success":
# Set session variable to indicate the user is logged in
session['logged_in'] = True
session['username'] = username
session['auth_credentials'] = encoded_credentials
return redirect(url_for('home')) # Redirect to the Accounts page
else:
# Show error on the login page
error = "Invalid username or password. Please try again."
return render_template('index.html', error=error)
@app.route('/urls', methods=['GET'])
2024-11-03 15:34:10 +00:00
@cache.cached(timeout=300) # cache for 5 minutes
2024-11-02 20:04:56 +00:00
def urls():
# Check if the user is logged in
if not session.get('logged_in'):
return redirect(url_for('home'))
# Placeholder content for Accounts page
base_url = app.config['BASE_URL'] # Access base_url from the config
return render_template('urls.html', urls=get_urls(base_url, session['auth_credentials']))
@app.route('/accounts', methods=['GET'])
2024-11-03 15:34:10 +00:00
@cache.cached(timeout=120) # cache for 120 seconds
2024-11-02 20:04:56 +00:00
def user_accounts():
# Check if the user is logged in
if not session.get('logged_in'):
return redirect(url_for('home'))
# Placeholder content for Accounts page
base_url = app.config['BASE_URL'] # Access base_url from the config
2024-11-03 15:34:10 +00:00
return render_template('user_accounts.html', username=session['username'], user_accounts=get_user_accounts(base_url, session['auth_credentials']), auth=session['auth_credentials'])
2024-11-02 20:04:56 +00:00
if __name__ == '__main__':
app.run(debug=app.config['DEBUG'], host=app.config['HOST'], port=app.config['PORT'])