Compare commits

...

4 Commits

Author SHA1 Message Date
victor
b87145654a .env and test on server.py 2025-01-19 23:26:17 +01:00
victor
331f33286d Login done 2024-12-06 00:52:33 +01:00
victor
0a2d1c94fe Register user done 2024-12-06 00:46:48 +01:00
victor
13fe482956 First login done 2024-12-06 00:27:27 +01:00
6 changed files with 112 additions and 0 deletions

5
.env Normal file
View File

@@ -0,0 +1,5 @@
DB_USERNAME=new_user
DB_PASSWORD=password
DB_HOST=localhost
DB_PORT=3306
DB_NAME=UseCaseDB

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
.venvManjaro/
app/__pycache__/
app/models/__pycache__/
app/codes/__pycache__/
migrations/*

27
app/__init__.py Normal file
View File

@@ -0,0 +1,27 @@
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__)
load_dotenv()
app.config['SECRET_KEY'] = 'mi_secreto'
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

42
app/codes/user.py Normal file
View File

@@ -0,0 +1,42 @@
from flask import Blueprint, request, jsonify, current_app
import datetime
import jwt
from app.models.user import User
from app import db
user = Blueprint('user', __name__)
@user.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username and password:
user = User.query.filter_by(username=username).first()
if user and user.check_password(password):
token = jwt.encode({
'username': username,
'exp': datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=1)
}, current_app.config['SECRET_KEY'], algorithm='HS256')
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

18
app/models/user.py Normal file
View File

@@ -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)

15
server.py Normal file
View File

@@ -0,0 +1,15 @@
from app import create_app
from flask import render_template, session, redirect
app = create_app()
@app.route('/', methods = ['GET'])
def index():
userId = session.get('userId')
if userId:
return "test"
else:
return "test"
if __name__ == "__main__":
app.run(debug=True, port="8080")