Facial Recognition program

#2 (Facial Recognition Program) Login.py

tommy12 2022. 8. 26. 03:39
#Last modified: 2022-08-07
import hmac
from flask import Flask, render_template, request, session
import mysql.connector as mariadb
import os
import logging
import logging.handlers
from face_recog import recognize
import hashlib
from werkzeug.security import generate_password_hash
from werkzeug.security import check_password_hash

app = Flask(__name__)
mariadb_connect = mariadb.connect(host='127.0.0.1',port=3306,user='root', password='password', database='database')
logging.basicConfig(filename="log.txt", filemode="w", level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
#key = b'LM\xe5\xb3\xb2\x95T~r?\xef@7\x99\x01\x04/xq\x1c\xbb6\x9d\x01N\xe0\xe3\xbb\xd9\xe9\xb1k'
import ctypes

def msgbox(title, text):
  return ctypes.windll.user32.MessageBoxW(0, text, title, 0x00001000 | 0x00000010)

def login_err():
  msgbox('Login failed', "Enter valid username and password.")
  return home()

def register_err():
  msgbox('Register failed', "Enter valid username and password")
  return home()

def register_id_err():
  msgbox('Register failed', "Username already exists")
  return home()

@app.route('/')
def home():
  if not session.get('logged_in'):
    return render_template('login.html')
  else:
    return render_template('index.html')

@app.route('/login', methods=['POST'])
def do_login():
  login = request.form
  input_id = login['username']
  input_pw = login['password']
  if input_id=="" or input_pw=="":
    return login_err()
  else:
    logger = logging.getLogger(input_id)
    logger.info("The user %s logged in", input_id)
  cur = mariadb_connect.cursor()
  qry = 'SELECT * FROM test WHERE id="{0}"'.format(input_id)
  cur.execute(qry)
  db_row = cur.fetchone()
  #print("db_row: ", db_row)
  if db_row==None: return login_err() #exception handling
  db_pw = db_row[1]
  if check_password_hash(db_pw, input_pw):
    session['logged_in'] = True
  elif db_pw!=input_pw:
    return login_err()

  return home()
  #input_pw_hash = hashlib.pbkdf2_hmac('sha256',input_pw.encode('utf-8'),key,100000)
  #input_pw_hash_hex = input_pw_hash.hex()
  #if hmac.compare_digest(db_pw, input_pw_hash_hex):
    #session['logged_in'] = True
  #elif db_pw != input_pw_hash_hex:
    #return login_err()
  #return home()

@app.route('/register', methods=['GET', 'POST'])
def register():
  if request.method == 'GET':
    return render_template("signup.html")
  else:
    id = request.form['username']
    pw = request.form['password']
    email = request.form['email']
    name = request.form['name']
    if id == "" or pw == "" or email == "" or name == "": return register_err()
    hash_pw = generate_password_hash(pw, "sha256")
    #encoding = pw.encode('utf-8')
    #digest = hashlib.pbkdf2_hmac('sha256', encoding, key, 100000)
    #hex_hash = digest.hex()
    cur = mariadb_connect.cursor()
    qry = "INSERT INTO test (ID, Password, Email, Name) VALUES ('%s','%s','%s', '%s')" % (id,hash_pw,email,name)
    #qry = "INSERT INTO test (ID, Password, Email, Name) VALUES ('%s','%s','%s', '%s')" % (id,hex_hash,email,name)
    cur.execute(qry)
    mariadb_connect.commit()
    logger = logging.getLogger(id)
    logger.info("The user %s registered", id)
  return home()

@app.route('/logout')
def logout():
  session['logged_in'] = False
  logging.info('Current user logged out')
  return home()

@app.route('/task')
def task():
  recognize()
  return home()

if __name__ == "__main__":
  app.secret_key = os.urandom(12)
  app.run(debug=False,host='0.0.0.0', port=5000)