Compare commits
No commits in common. '47fc49ff9f8d1446fe3beefbca4a2bc0b39dc7ee' and '8fee958f683dc323658b1c8e1948fe3e8ac6a3b5' have entirely different histories.
47fc49ff9f
...
8fee958f68
@ -1,100 +1,7 @@ |
|||||||
from email.policy import default |
from flask import Blueprint |
||||||
from flask import Blueprint, request, jsonify, current_app |
|
||||||
from werkzeug.utils import secure_filename |
|
||||||
from datetime import datetime |
|
||||||
from db.model import db |
|
||||||
from db.model import User, UserRole # Adjust based on your model's location |
|
||||||
from werkzeug.security import generate_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 |
|
||||||
|
|
||||||
profile = Blueprint('profile', __name__) |
profile = Blueprint('profile', __name__) |
||||||
|
|
||||||
# Function to check allowed file extensions |
@profile.route('/profile') |
||||||
def allowed_file(filename): |
def get_profile(): |
||||||
"""Check if the uploaded file has an allowed extension.""" |
return "Profile Page" |
||||||
return '.' in filename and filename.rsplit('.', 1)[1].lower() in current_app.config['ALLOWED_EXTENSIONS'] |
|
||||||
|
|
||||||
@profile.route('/register', methods=['POST']) |
|
||||||
def register(): |
|
||||||
"""Handle user registration.""" |
|
||||||
data = request.form |
|
||||||
|
|
||||||
# Extract form data |
|
||||||
email = data.get('email') |
|
||||||
first_name = data.get('firstName') |
|
||||||
last_name = data.get('lastName') |
|
||||||
username = data.get('username') |
|
||||||
password = data.get('password') |
|
||||||
bio = data.get('bio', '') |
|
||||||
dob = data.get('dob') # Optional field for date of birth |
|
||||||
role = int(data.get('role', UserRole.USER.value)) # Default to 'USER' role if not provided |
|
||||||
is_activated = True # New user will be activated initially |
|
||||||
profile_picture = request.files.get('profile_picture') |
|
||||||
|
|
||||||
# Validate email |
|
||||||
if not is_valid_email(email): |
|
||||||
return jsonify({"error": "Invalid email address"}), 400 |
|
||||||
|
|
||||||
# Validate password |
|
||||||
try: |
|
||||||
password_check_sanity(password) |
|
||||||
except InsecurePasswordException as e: |
|
||||||
return jsonify({"error": str(e)}), 400 |
|
||||||
|
|
||||||
# Validate required fields |
|
||||||
if not all([email, first_name, last_name, username, password]): |
|
||||||
return jsonify({"error": "Missing required fields"}), 400 |
|
||||||
|
|
||||||
# Check if the file is allowed and save it |
|
||||||
if profile_picture and allowed_file(profile_picture.filename): |
|
||||||
filename = secure_filename(profile_picture.filename) |
|
||||||
# file_path = os.path.join(USER_UPLOADS_DIR, filename) |
|
||||||
profile_picture.save( |
|
||||||
os.path.join(USER_UPLOADS_DIR, filename) |
|
||||||
) |
|
||||||
else: |
|
||||||
filename = DEFAULT_PROFILE_FILE # Use a default image if no file is uploaded |
|
||||||
# Hash the password |
|
||||||
hashed_password = generate_password_hash(password) |
|
||||||
|
|
||||||
# Generate activation key (a UUID for example) |
|
||||||
activation_key = str(uuid.uuid4()) |
|
||||||
|
|
||||||
# Create a new user |
|
||||||
new_user = User( |
|
||||||
email=email, |
|
||||||
firstName=first_name, |
|
||||||
lastName=last_name, |
|
||||||
username=username, |
|
||||||
hash_password=hashed_password, |
|
||||||
bio=bio, |
|
||||||
dob=datetime.fromisoformat(dob) if dob else datetime(2002, 1, 1), |
|
||||||
pfpFilename=filename, |
|
||||||
role=role, |
|
||||||
isActivated=is_activated, |
|
||||||
activationKey=activation_key, |
|
||||||
sessions=[], |
|
||||||
user_badges=[], |
|
||||||
enrollments=[], |
|
||||||
quizzes=[], |
|
||||||
quiz_attempts=[], |
|
||||||
chats=[], |
|
||||||
notifications=[] |
|
||||||
) |
|
||||||
|
|
||||||
# Save the user to the database |
|
||||||
try: |
|
||||||
db.session.add(new_user) |
|
||||||
db.session.commit() |
|
||||||
|
|
||||||
return jsonify({"message": "User registered successfully."}), 201 |
|
||||||
except IntegrityError as e: |
|
||||||
db.session.rollback() |
|
||||||
return jsonify({"error": "User with this email or username already exists."}), 400 |
|
||||||
except Exception as e: |
|
||||||
db.session.rollback() |
|
||||||
return jsonify({"error": "Registration failed, please try again later."}), 500 |
|
Before Width: | Height: | Size: 27 KiB |
Loading…
Reference in new issue