69 lines
3.2 KiB
Python
69 lines
3.2 KiB
Python
import json
|
|
import logging
|
|
import pydapper
|
|
import bcrypt
|
|
|
|
from ..schemas import model
|
|
from .. import local_db
|
|
from ..services import jwt_handler
|
|
from BreCal.database.sql_queries import SQLQuery
|
|
|
|
|
|
def GetUser(options):
|
|
|
|
try:
|
|
if "password" in options and "username" in options:
|
|
hash = bcrypt.hashpw(options["password"].encode('utf-8'), bcrypt.gensalt( 12 )).decode('utf8')
|
|
pooledConnection = local_db.getPoolConnection()
|
|
commands = pydapper.using(pooledConnection)
|
|
# query = SQLQuery.get_user()
|
|
# data = commands.query(query, model=model.User, param={"username" : options["username"]})
|
|
data = commands.query("SELECT id, participant_id, first_name, last_name, user_name, user_email, user_phone, password_hash, " +
|
|
"api_key, notify_email, notify_whatsapp, notify_signal, notify_popup, notify_event, created, modified FROM user " +
|
|
"WHERE user_name = ?username? OR user_email = ?username?",
|
|
model=model.User, param={"username" : options["username"]})
|
|
|
|
if len(data) == 1:
|
|
if bcrypt.checkpw(options["password"].encode("utf-8"), bytes(data[0].password_hash, "utf-8")):
|
|
result = {
|
|
"id": data[0].id,
|
|
"participant_id": data[0].participant_id,
|
|
"first_name": data[0].first_name,
|
|
"last_name": data[0].last_name,
|
|
"user_name": data[0].user_name,
|
|
"user_phone": data[0].user_phone,
|
|
"user_email": data[0].user_email,
|
|
"notify_email": data[0].notify_email,
|
|
"notify_whatsapp": data[0].notify_whatsapp,
|
|
"notify_signal": data[0].notify_signal,
|
|
"notify_popup": data[0].notify_popup,
|
|
"notify_on": model.bitflag_to_list(data[0].notify_event)
|
|
}
|
|
token = jwt_handler.generate_jwt(payload=result, lifetime=120) # generate token valid 60 mins
|
|
result["token"] = token # add token to user data
|
|
return json.dumps(result), 200, {'Content-Type': 'application/json; charset=utf-8'}
|
|
|
|
if len(data) > 1:
|
|
result = {}
|
|
result["error_field"] = "credential lookup mismatch"
|
|
return json.dumps(result), 500, {'Content-Type': 'application/json; charset=utf-8'}
|
|
|
|
result = {}
|
|
result["error_field"] = "invalid credentials"
|
|
return json.dumps(result), 403, {'Content-Type': 'application/json; charset=utf-8'}
|
|
|
|
except Exception as ex:
|
|
logging.error(ex)
|
|
print(ex)
|
|
result = {}
|
|
result["error_field"] = "call failed"
|
|
result["error_description"] = str(ex)
|
|
return json.dumps(result), 500, {'Content-Type': 'application/json; charset=utf-8'}
|
|
|
|
finally:
|
|
if pooledConnection is not None:
|
|
pooledConnection.close()
|
|
|
|
# $2b$12$uWLE0r32IrtCV30WkMbVwOdltgeibymZyYAf4ZnQb2Bip8hrkGGwG
|
|
# $2b$12$.vEapj9xU8z0RK0IpIGeYuRIl0ktdMt4XdJQBhVn.3K2hmvm7qD3y
|
|
# $2b$12$yL3PiseU70ciwEuMVM4OtuMwR6tNuIT9vvBiBG/uyMrPxa16E2Zqu |