parent
b21c4a6c49
commit
a7b728951d
@ -0,0 +1,69 @@ |
||||
from email.policy import default |
||||
from flask import Blueprint, request, jsonify, current_app, g |
||||
from werkzeug.utils import secure_filename |
||||
from datetime import datetime |
||||
from utils.auth import auth_required, requires_role |
||||
from db.model import db |
||||
from db.model import User, Session, UserRole # Adjust based on your model's location |
||||
# from constants import UserRole |
||||
from werkzeug.security import generate_password_hash,check_password_hash |
||||
import uuid |
||||
import os |
||||
from config import * |
||||
from utils.utils import password_check_sanity,is_valid_email,InsecurePasswordException |
||||
from sqlalchemy.exc import IntegrityError |
||||
|
||||
session = Blueprint('session', __name__) |
||||
|
||||
@session.route('/create', methods=['POST']) |
||||
def login(): |
||||
""" |
||||
Handle user login. |
||||
""" |
||||
data = request.form # Expecting JSON body |
||||
|
||||
# Extract credentials from request |
||||
# username = data.get('username') |
||||
email = data.get('email') |
||||
password = data.get('password') |
||||
user_agent = request.headers.get('User-Agent', 'Unknown') |
||||
|
||||
# Validate required fields |
||||
if not email or not password: |
||||
return jsonify({"error": "email and password are required"}), 400 |
||||
|
||||
# Find the user by username |
||||
# user = User.query.filter_by(username=username).first() |
||||
user = User.query.filter_by(email=email).first() |
||||
|
||||
if not user: |
||||
return jsonify({"error": "Invalid email or password"}), 401 |
||||
|
||||
# Verify the password |
||||
if not check_password_hash(user.hash_password, password): |
||||
return jsonify({"error": "Invalid email or password"}), 401 |
||||
|
||||
# Create a new session |
||||
session_key = str(uuid.uuid4()) # Generate a unique session key |
||||
new_session = Session( |
||||
userID=user.id, |
||||
user=user, # Pass the user object here |
||||
key=session_key, |
||||
ua=user_agent, |
||||
creationDate=datetime.utcnow(), |
||||
lastUsed=datetime.utcnow(), |
||||
isValid=True |
||||
) |
||||
|
||||
|
||||
try: |
||||
db.session.add(new_session) |
||||
db.session.commit() |
||||
return jsonify({ |
||||
"message": "Login successful", |
||||
"session_key": session_key, |
||||
"user_id": str(user.id) |
||||
}), 200 |
||||
except Exception as e: |
||||
db.session.rollback() |
||||
return jsonify({"error": "Login failed, please try again later."}), 500 |
Loading…
Reference in new issue