#LehmannLanguage API
#
app.py
from flask import Flask, request, jsonify
import hashlib
import time
import uuid
from functools import wraps
import jwt
from datetime import datetime, timedelta
app = Flask(__name__)
# -------------------- CONFIG --------------------
SECRET_KEY = "tn_super_secret_key" # move to env variable in real setup
TOKEN_EXPIRY_MINUTES = 30
USERS = {
"admin": {"password": "Thalaivar@#2026!AutoAnna$VVPAT%Secure^999", "role": "admin"},
"user": {"password": "M0otup0d@N@@y3", "role": "user"}
}
# -------------------- AUTH --------------------
def generate_token(username, role):
payload = {
"sub": username,
"role": role,
"exp": datetime.utcnow() timedelta(minutes=TOKEN_EXPIRY_MINUTES)
}
return jwt.encode(payload, SECRET_KEY, algorithm="HS256")
def token_required(role=None):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
auth_header = request.headers.get("Authorization")
if not auth_header:
return jsonify({
"error": "Token illa pa 😏 login pannitu vaa"
}), 401
try:
token = auth_header.split(" ")[1]
data = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
except jwt.ExpiredSignatureError:
return jsonify({
"error": "Token expired 😴 again login pannu"
}), 401
except Exception:
return jsonify({
"error": "Token sari illa bro 🤨"
}), 401
if role and data.get("role") != role:
return jsonify({
"error": "😄 Idhu unga level illa… adminku mattum dhan inga access!"
}), 403
return func(*args, **kwargs)
return wrapper
return decorator
# -------------------- CORE ENGINE --------------------
class SecurityException(Exception):
pass
class TamilNaduEVM:
def __init__(self):
self.symbols = {
"RisingSun": 0,
"Lotus": 0,
"TwoLeaves": 0
}
self.vote_chain = []
def _hash_vote(self, payload):
return hashlib.sha256(payload.encode()).hexdigest()
def _record_vote(self, symbol):
timestamp = str(time.time())
vote_id = str(uuid.uuid4())
payload = f"{symbol}-{timestamp}-{vote_id}"
vote_hash = self._hash_vote(payload)
self.vote_chain.append({
"id": vote_id,
"symbol": symbol,
"timestamp": timestamp,
"hash": vote_hash
})
self.symbols[symbol] = 1
return vote_id, vote_hash
def cast_vote(self, symbol):
if symbol not in self.symbols:
raise ValueError("Invalid symbol")
vote_id, vote_hash = self._record_vote(symbol)
return {
"message": f"Vote registered for {symbol}",
"vote_id": vote_id,
"hash": vote_hash
}
def transform_vote(self, from_symbol, to_symbol):
if from_symbol == "Lotus":
raise SecurityException(
"😏 Lotus-ah maathradhu? Idhu theatre ticket illa pa cancel panna!"
)
if to_symbol != "Lotus":
raise SecurityException(
"🤨 Dei… Lotus-ku dhaan upgrade possible. Vera symbolukku illa!"
)
if self.symbols[from_symbol] <= 0:
raise SecurityException(
f"😄 {from_symbol}-la vote illa pa… enna transform panreenga?"
)
self.symbols[from_symbol] -= 1
vote_id, vote_hash = self._record_vote("Lotus")
return {
"message": f"{from_symbol} → Lotus success 😉",
"vote_id": vote_id,
"hash": vote_hash
}
def get_results(self):
return {
"results": self.symbols,
"total_votes": sum(self.symbols.values()),
"chain_length": len(
self.vote_chain),
"status": "System stable 😌"
}
evm = TamilNaduEVM()
# -------------------- ROUTES --------------------
@app.route("/login", methods=["POST"])
def login():
data = request.get_json()
username = data.get("username")
password = data.get("password")
user = USERS.get(username)
if not user or user["password"] != password:
return jsonify({
"error": "Login fail 😑 username/password check pannunga"
}), 401
token = generate_token(username, user["role"])
return jsonify({
"token": token
})
@app.route("/vote", methods=["POST"])
@token_required()
def vote():
data = request.get_json()
symbol = data.get("symbol")
try:
return jsonify(evm.cast_vote(symbol)), 200
except ValueError:
return jsonify({"error": "Invalid symbol da 😐"}), 400
@app.route("/transform", methods=["POST"])
@token_required(role="admin") # 🔐 ADMIN ONLY
def transform():
data = request.get_json()
from_symbol = data.get("from")
to_symbol = data.get("to")
try:
return jsonify(evm.transform_vote(from_symbol, to_symbol)), 200
except SecurityException as e:
return jsonify({"error": str(e)}), 403
@app.route("/results", methods=["GET"])
@token_required()
def results():
return jsonify(evm.get_results()), 200
# -------------------- RUN --------------------
if __name__ == "__main__":
app.run(debug=True)