import os
import subprocess
from flask import Flask, request, session, redirect, url_for, send_from_directory, render_template_string
app = Flask(__name__)
app.secret_key = os.urandom(24)
DASHBOARD_PATH = os.path.join(os.path.dirname(__file__), 'SamCloud_Notes.html')
LOGIN_FORM = '''
Login - SamCloud Dashboard
'''
def check_system_login(username, password):
# Use macOS 'dscl' to check credentials (no password is stored)
try:
result = subprocess.run([
'dscl', '/Local/Default', '-authonly', username
], input=password.encode(), capture_output=True)
return result.returncode == 0
except Exception:
return False
@app.route('/', methods=['GET', 'POST'])
def login():
if 'user' in session:
return redirect(url_for('dashboard'))
error = None
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
if check_system_login(username, password):
session['user'] = username
return redirect(url_for('dashboard'))
else:
error = 'Invalid system credentials.'
return render_template_string(LOGIN_FORM, error=error)
@app.route('/dashboard')
def dashboard():
if 'user' not in session:
return redirect(url_for('login'))
return send_from_directory(os.path.dirname(DASHBOARD_PATH), os.path.basename(DASHBOARD_PATH))
@app.route('/logout')
def logout():
session.pop('user', None)
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8383, debug=True)