diff --git a/app/__init__.py b/app/__init__.py index 3e65cb7..4d3fa7d 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,9 +1,13 @@ from flask import Flask from dotenv import load_dotenv +from flask_migrate import Migrate +from flask_sqlalchemy import SQLAlchemy +import os # Cargar las variables de entorno desde .env - +db = SQLAlchemy() +migrate = Migrate() # Inicializar Migrate def create_app(): app = Flask(__name__) @@ -12,8 +16,12 @@ def create_app(): app.config['SECRET_KEY'] = 'mi_secreto' - # Registro de blueprints - from app.codes.user import login - app.register_blueprint(login, url_prefix='/') + app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+pymysql://{os.getenv('DB_USERNAME')}:{os.getenv('DB_PASSWORD')}@{os.getenv('DB_HOST')}:{os.getenv('DB_PORT')}/{os.getenv('DB_NAME')}" + app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + db.init_app(app) + migrate.init_app(app, db) # Asocia migrate con la app y la base de datos + + from app.codes.user import user + app.register_blueprint(user, url_prefix='/user') return app diff --git a/app/codes/user.py b/app/codes/user.py index f9017d9..4ef0774 100644 --- a/app/codes/user.py +++ b/app/codes/user.py @@ -2,10 +2,13 @@ from flask import Blueprint, request, jsonify, current_app import datetime import jwt -login = Blueprint('login', __name__) +from app.models.user import User +from app import db -@login.route('/login', methods=['POST']) -def login_view(): +user = Blueprint('user', __name__) + +@user.route('/login', methods=['POST']) +def login(): data = request.get_json() username = data.get('username') password = data.get('password') @@ -20,3 +23,20 @@ def login_view(): return jsonify({'token': token}) return jsonify({'message': 'Credenciales inválidas'}), 401 + +@user.route('/register', methods=['POST']) +def register(): + data = request.get_json() + username = data.get('username') + password = data.get('password') + password_confirm = data.get('password_confirm') + + user = User.query.filter_by(username=username).first() + if not user and password == password_confirm: + new_user = User(username=username) + new_user.set_password(password) # Establecer el hash de la contraseña + db.session.add(new_user) + db.session.commit() # Guardar cambios en la base de datos + return jsonify({"success": True}), 200 + else: + return jsonify({'error': False}), 400 \ No newline at end of file diff --git a/app/models/user.py b/app/models/user.py new file mode 100644 index 0000000..765e847 --- /dev/null +++ b/app/models/user.py @@ -0,0 +1,18 @@ +from app import db +from werkzeug.security import generate_password_hash, check_password_hash + +class User(db.Model): + __tablename__ = 'users' + + # Asegúrate de que esto coincida con Image.creator + username = db.Column(db.String(80), primary_key=True) + # Longitud de la contraseña + password_hash = db.Column(db.String(256), nullable=False) + + def set_password(self, password): + """Genera el hash de la contraseña.""" + self.password_hash = generate_password_hash(password, method="pbkdf2") + + def check_password(self, password): + """Verifica si el hash coincide con la contraseña proporcionada.""" + return check_password_hash(self.password_hash, password)