84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
#!/usr/bin/env python
|
|
# encoding: utf-8
|
|
|
|
'''
|
|
user.py is a source for all user endpoints.
|
|
'''
|
|
|
|
from flask import request, jsonify
|
|
import os
|
|
|
|
def registerUserEndpoints(app, database):
|
|
@app.route('/users/isSet', methods=['GET'])
|
|
def user_is_set():
|
|
user_name = request.args.get('userName')
|
|
try:
|
|
query = "SELECT * FROM users WHERE Name=%s"
|
|
result = database.query(query, params=(user_name,))
|
|
return jsonify(bool(result and result[0][2])), 200
|
|
except mysql.connector.Error as err:
|
|
# Log the error or handle it as necessary
|
|
app.logger.error(f"Error: {err}")
|
|
return jsonify({"error": "Database error occurred"}), 500
|
|
except Exception as e:
|
|
# Handle unexpected errors
|
|
app.logger.error(f"Unexpected error: {e}")
|
|
return jsonify({"error": "Internal server error"}), 500 # Check if password exists
|
|
|
|
@app.route('/users/createPassword', methods=['POST'])
|
|
def create_password():
|
|
data = request.json
|
|
user_name = data.get('userName')
|
|
password = data.get('password')
|
|
|
|
# Check if the user already exists
|
|
query = "SELECT * FROM users WHERE Name=%s"
|
|
result = database.query(query, params=(user_name,))
|
|
|
|
if result:
|
|
return jsonify(success=False, message='Пользователь уже создан'), 400
|
|
|
|
query = "INSERT INTO users (Name, Password) VALUES (%s, %s)"
|
|
|
|
try:
|
|
database.query(query, params=(user_name, password))
|
|
|
|
# Generate a session token
|
|
token = os.urandom(16).hex()
|
|
session_query = "INSERT INTO sessions (Token, Name) VALUES (%s, %s)"
|
|
database.query(session_query, params=(token,user_name))
|
|
|
|
return jsonify(success=True, token=token), 201 # Return success with token
|
|
except Exception as e:
|
|
return jsonify(success=False, message='Ошибка при создании пароля: ' + str(e)), 500
|
|
|
|
|
|
@app.route('/login', methods=['POST'])
|
|
def login():
|
|
data = request.json
|
|
user_name = data.get('userName')
|
|
password = data.get('password')
|
|
|
|
query = "SELECT * FROM users WHERE Name=%s AND Password=%s"
|
|
result = database.query(query, params=(user_name, password))
|
|
|
|
if result:
|
|
token = os.urandom(16).hex() # Example token generation
|
|
session_query = "INSERT INTO sessions (Token, Name) VALUES (%s, %s)"
|
|
database.query(session_query, params=(token, user_name))
|
|
return jsonify(success=True, token=token), 200
|
|
|
|
return jsonify(success=False), 401
|
|
|
|
@app.route('/login/validateToken', methods=['POST'])
|
|
def validate_token():
|
|
data = request.json
|
|
token = data.get('token')
|
|
user_name = data.get('userName')
|
|
query = "SELECT * FROM sessions WHERE Token=%s AND Name=%s"
|
|
try:
|
|
result = database.query(query, params=(token, user_name))
|
|
return jsonify(tokenValid=bool(result)), 200
|
|
except Exception as e:
|
|
return jsonify(success=False, message=str(e)), 500
|