Compare commits
3 Commits
8fee958f68
...
47fc49ff9f
Author | SHA1 | Date |
---|---|---|
|
47fc49ff9f | 6 months ago |
|
fd2fe03561 | 6 months ago |
|
93a5cc6eed | 6 months ago |
@ -1,7 +1,100 @@ |
||||
from flask import Blueprint |
||||
from email.policy import default |
||||
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.route('/profile') |
||||
def get_profile(): |
||||
return "Profile Page" |
||||
# Function to check allowed file extensions |
||||
def allowed_file(filename): |
||||
"""Check if the uploaded file has an allowed extension.""" |
||||
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 |
||||
|
After Width: | Height: | Size: 27 KiB |
Loading…
Reference in new issue