Files

99 lines
3.4 KiB
Python
Raw Permalink Normal View History

from flask import Blueprint, render_template, redirect, url_for, request, current_app
from flask_login import login_required, current_user, login_user
2026-01-18 08:22:41 +01:00
from models import db
from models import User, Item
import json
from sqlalchemy import desc, text
api_bp = Blueprint("api", __name__, url_prefix="/api")
@api_bp.route("/validate_key", methods=["POST"])
def validate_key():
result={}
result['status']=0
result['data'] = ''
if "key" in request.form:
key = request.form["key"]
if key == current_app.config["APPLICATION_KEY"]:
2026-01-18 08:22:41 +01:00
result['status'] = 1
else:
result['message'] = 'Unknown Application-Key'
return json.dumps(result), 200
@api_bp.route("/login", methods=["POST"])
def login():
result={}
result['status']=0
result['data'] = ''
if "user" in request.form and "password" in request.form:
user = request.form["user"]
password = request.form["password"]
user = User.query.filter_by(name=user).first()
if user and user.check_password(password):
if not user.is_approved:
result['message'] = 'User is pending approval.'
elif user.group_id == 0:
result['message'] = 'User is not connected to a group.'
2026-01-18 08:22:41 +01:00
else:
login_user(user)
2026-01-18 08:22:41 +01:00
result['status'] = 1
result['data'] = user.as_dict()
else:
result['message'] = 'User or password unknown'
return json.dumps(result), 200
@api_bp.route("/register", methods=["POST"])
def register():
result={}
result['status']=0
result['data'] = ''
if "user" in request.form and "password" in request.form:
username = request.form["user"].strip()
2026-01-18 08:22:41 +01:00
password = request.form["password"]
user = User.query.filter_by(name=username).first()
if user:
result['message'] = 'Username is not unique. Pick something else please.'
else:
user = User(name=username)
group_id = user.set_group_id(password)
if group_id == 0:
result['message'] = 'Unknown registration key.'
return json.dumps(result), 200
2026-01-18 08:22:41 +01:00
result['status'] = 2
result['message'] = 'Registration Ok. Awaiting approval.'
user.set_password(password)
user.group_id = group_id
2026-01-18 08:22:41 +01:00
db.session.add(user)
db.session.commit()
return json.dumps(result), 200
@api_bp.route("/load_lists", methods=["POST"])
@login_required
2026-01-18 08:22:41 +01:00
def load_lists():
result={}
result['status']=1 # from this call the result is always 1, empty or not
result['data'] = current_user.all_my_lists_as_dict()
2026-01-18 08:22:41 +01:00
return json.dumps(result), 200
@api_bp.route("/load_items", methods=["POST"])
@login_required
2026-01-18 08:22:41 +01:00
def load_items():
result={}
result['status']=1 # from this call the result is always 1, empty or not
result['data'] = ''
if "listid" in request.form:
listid = int(request.form["listid"])
if current_user.can_access_list(listid):
items=Item.query.filter_by(listofitems_id=listid, is_suggestion=False).order_by(text("is_checked, category, label")).all()
if items:
result['data'] = [ i.as_dict() for i in items]
else:
result['status'] = 0
result['message'] = 'Forbidden'
return json.dumps(result), 403
2026-01-18 08:22:41 +01:00
return json.dumps(result), 200