-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMain.py
180 lines (146 loc) · 5.3 KB
/
Main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
from flask import Flask, request, jsonify
from flask_cors import CORS
import cgi
import MySQLdb
import os
import bcrypt
import mysql.connector
import pyotp
import qrcode
from PIL import Image
app = Flask(__name__)
CORS(app)
# Configuración de la conexión a la base de datos
config = {
'user': 'root',
'password': '',
'host': '127.0.0.1',
'database': 'users',
'raise_on_warnings': True
}
conexion = None
def get_connection():
global conexion
if conexion is None or not conexion.is_connected():
try:
# Establecer la conexión si no existe o está cerrada
conexion = mysql.connector.connect(**config)
except mysql.connector.Error as e:
print(f'Error al conectar a la base de datos: {e}')
raise
return conexion
def guardar_registro(usuario, correo, contrasena):
try:
# Obtener conexión a la base de datos
conexion = get_connection()
print('log1')
if conexion.is_connected():
cursor = conexion.cursor()
#hashed_password = bcrypt.hashpw(contrasena.encode('utf-8'), bcrypt.gensalt())
# Insertar datos en la base de datos
sql = "INSERT INTO usuarios (usuario, correo, contraseña) VALUES (%s, %s, %s)"
valores = (usuario, correo, contrasena)
cursor.execute(sql, valores)
print(sql)
# Confirmar la operación y cerrar cursor
conexion.commit()
cursor.close()
print("Registro guardado exitosamente.")
except mysql.connector.Error as e:
print(f'Error al guardar el registro en la base de datos: {e}')
finally:
# Cerrar la conexión
if 'conexion' in locals() and conexion.is_connected():
conexion.close()
def guardar_login():
try:
# Connect to MySQL database
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="users")
cursor = db.cursor()
# Check if the request method is POST
if os.environ['REQUEST_METHOD'] == 'POST':
# Get form data
form = cgi.FieldStorage()
usuario = form.getvalue('usuario')
contraseña = form.getvalue('contraseña')
# Retrieve hashed password from database based on username
cursor.execute("SELECT contraseña FROM usuarios WHERE usuario = %s", (usuario,))
row = cursor.fetchone()
if row:
hashed_password = row[0]
# Check if the entered password matches the hashed password
if bcrypt.checkpw(contraseña.encode('utf-8'), hashed_password.encode('utf-8')):
# Password is correct
print("<h1>Inicio de sesión exitoso</h1>")
print("<p>Bienvenido, {}!</p>".format(usuario))
else:
# Password is incorrect
print("<h1>Error:</h1>")
print("<p>Contraseña incorrecta.</p>")
else:
# User not found
print("<h1>Error:</h1>")
print("<p>Usuario no encontrado.</p>")
else:
# Handle other HTTP methods (e.g., GET)
print("<h1>Error:</h1>")
print("<p>Método HTTP no permitido.</p>")
except Exception as e:
print("<h1>Error:</h1>")
print("<p>", e, "</p>")
finally:
# Close database connection
if 'db' in locals() and db is not None:
db.close()
def authenticator():
# Genera un secreto de 16 caracteres base32
secret = pyotp.random_base32()
# Crea una instancia TOTP usando el secreto
totp = pyotp.TOTP(secret)
# Genera el código OTP
otp_code = totp.now()
# Imprime el secreto y el código QR
print("Secreto:", secret)
print("Escanee este código QR con Google Authenticator:")
# Crea la URL para el código QR
url = totp.provisioning_uri('usuario', issuer_name="Atrato")
# Crea y guarda el código QR en un archivo
qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
img.save("qr_code.png")
# Imprime el código QR en pantalla
img.show()
@app.route('/validate', methods=['POST'])
def validate():
otp_code = request.form['otp']
# Validate the OTP code
if pyotp.TOTP.verify(otp_code):
return "OTP is valid"
else:
return "OTP is invalid"
@app.route('/post_example', methods=['POST'])
def post_example():
if request.method == 'POST':
data = request.json
usuario = data.get('usuario')
correo = data.get('correo')
contrasena = data.get('contrasena')
print(data)
print (usuario)
print (correo)
print(contrasena)
try:
guardar_registro(usuario, correo, contrasena)
except Exception as e:
print (e)
return 'Hello, World!'
else:
return 'Método no permitido', 405
@app.route('/get_example', methods=['GET'])
def get_example():
return 'Hello, World! (GET method)'
# Esto permitirá ejecutar el archivo como script de manera independiente para probar la conexión
if __name__ == "__main__":
app.run(debug=True)