66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
import dataclasses
|
|
|
|
import flask
|
|
import flask_login
|
|
|
|
import mgU
|
|
import database
|
|
|
|
|
|
user = flask.Blueprint(
|
|
name='user_api',
|
|
import_name=__name__,
|
|
url_prefix='/user/'
|
|
)
|
|
|
|
|
|
@user.route('/get_forums')
|
|
@flask_login.login_required
|
|
def get_user_forums() -> tuple[flask.Response, int]:
|
|
user_id: str = flask_login.current_user.get_id()
|
|
|
|
forums: list[mgU.Forum] = database.get_user_forums(int(user_id))
|
|
forums_dict = {"forums" : [dataclasses.asdict(forum) for forum in forums]}
|
|
|
|
return flask.jsonify(forums_dict), 200
|
|
|
|
|
|
@user.route('/create', methods=['POST'])
|
|
def create_user() -> tuple[flask.Response, int]:
|
|
"""
|
|
Create a new user account.
|
|
Expects JSON with 'username' and 'password' fields.
|
|
"""
|
|
data = flask.request.get_json()
|
|
|
|
if not data:
|
|
return flask.jsonify({"error": "No JSON data provided"}), 400
|
|
|
|
username = data.get('username')
|
|
password = data.get('password')
|
|
|
|
if not username or not password:
|
|
return flask.jsonify({"error": "Username and password are required"}), 400
|
|
|
|
# Validate username length and characters
|
|
if len(username.strip()) == 0:
|
|
return flask.jsonify({"error": "Username cannot be empty"}), 400
|
|
|
|
if len(password) < 6:
|
|
return flask.jsonify({"error": "Password must be at least 6 characters long"}), 400
|
|
|
|
# Attempt to create the user
|
|
new_user = database.create_user(username.strip(), password)
|
|
|
|
if new_user is None:
|
|
return flask.jsonify({"error": "Username already exists or creation failed"}), 409
|
|
|
|
# Return the created user (without sensitive data)
|
|
user_dict = {
|
|
"id": new_user.id,
|
|
"name": new_user.name,
|
|
"message": "User created successfully"
|
|
}
|
|
|
|
return flask.jsonify(user_dict), 201
|