15/08/22 - 17h30

master
ChérifBALDE 2022-08-15 17:18:59 +02:00 committed by cherif
parent 7b60ba246c
commit 4304932f10
4 changed files with 268 additions and 110 deletions

View File

@ -386,12 +386,12 @@ def add_user_account(diction):
# Verification que cette adresse email n'existe pas. On doit aussi verifier que cette adresse # Verification que cette adresse email n'existe pas. On doit aussi verifier que cette adresse
# n'est pas utiliser comme compte partner. # n'est pas utiliser comme compte partner.
tmp = coll_name.count_documents({'email': str(myuser['email'])}) tmp = coll_name.count_documents({'email': str(myuser['email']), 'active':'1'})
if( tmp > 0 ): if( tmp > 0 ):
mycommon.myprint("l'adresse email '"+str(myuser['email'])+"' existe deja, impossible de créer le compte ") mycommon.myprint("l'adresse email '"+str(myuser['email'])+"' existe deja, impossible de créer le compte ")
return False, "Cette adresse email est deja utilisée, impossible de créer le compte utilisateur" return False, "Cette adresse email est deja utilisée, impossible de créer le compte utilisateur"
tmp = coll_name_partnair_account.count_documents({'email': str(myuser['email'])}) tmp = coll_name_partnair_account.count_documents({'email': str(myuser['email']), 'active':'1'})
if (tmp > 0): if (tmp > 0):
mycommon.myprint( mycommon.myprint(
"l'adresse email '" + str(myuser['email']) + "' existe deja (compte utiliser comme partner), impossible de créer le compte ") "l'adresse email '" + str(myuser['email']) + "' existe deja (compte utiliser comme partner), impossible de créer le compte ")
@ -804,7 +804,7 @@ avec un token de reinitialisation '''
def Reset_user_pwd_by_token(diction): def Reset_user_pwd_by_token(diction):
try: try:
# Dictionnaire des champs utilisables # Dictionnaire des champs utilisables
field_list = ['token', 'new_pwd', 'conf_new_pwd'] field_list = ['token', 'new_pwd', 'conf_new_pwd', 'accounttype']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
if val not in field_list: if val not in field_list:
@ -815,7 +815,7 @@ def Reset_user_pwd_by_token(diction):
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
On controle que les champs obligatoires sont presents dans la liste On controle que les champs obligatoires sont presents dans la liste
''' '''
field_list_obligatoire = ['token', 'new_pwd', 'conf_new_pwd'] field_list_obligatoire = ['token', 'new_pwd', 'conf_new_pwd', 'accounttype']
for val in field_list_obligatoire: for val in field_list_obligatoire:
if val not in diction: if val not in diction:
mycommon.myprint(" La valeur '" + val + "' n'est pas presente dans liste ") mycommon.myprint(" La valeur '" + val + "' n'est pas presente dans liste ")
@ -828,6 +828,7 @@ def Reset_user_pwd_by_token(diction):
pwd = "" pwd = ""
new_pwd = "" new_pwd = ""
conf_new_pwd = "" conf_new_pwd = ""
accounttype = ""
mydata ={} mydata ={}
@ -844,7 +845,13 @@ def Reset_user_pwd_by_token(diction):
new_pwd = diction['new_pwd'] new_pwd = diction['new_pwd']
mydata['pwd'] = diction['new_pwd'] mydata['pwd'] = diction['new_pwd']
if ("accounttype" in diction.keys()):
if diction['accounttype']:
accounttype = diction['accounttype']
if( accounttype == "1"):
#Traitement d'un user classique
# Verification de la validité du token/mail dans le cas des user en mode connecté # Verification de la validité du token/mail dans le cas des user en mode connecté
if ( len(str(token_value)) <= 0): if ( len(str(token_value)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " Le token est vide") mycommon.myprint(str(inspect.stack()[0][3]) + " Le token est vide")
@ -881,6 +888,7 @@ def Reset_user_pwd_by_token(diction):
print(" le recid = "+user_recid+" mydata = "+str(mydata)) print(" le recid = "+user_recid+" mydata = "+str(mydata))
ret_val = coll_name.find_one_and_update({'recid': user_recid, 'locked': '0', 'active':'1'}, ret_val = coll_name.find_one_and_update({'recid': user_recid, 'locked': '0', 'active':'1'},
{"$set": mydata}, {"$set": mydata},
upsert=False,
return_document=ReturnDocument.AFTER return_document=ReturnDocument.AFTER
) )
@ -902,6 +910,58 @@ def Reset_user_pwd_by_token(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " Impossible de mettre à jour le password du user : recid = "+str(user_recid)) mycommon.myprint(str(inspect.stack()[0][3]) + " Impossible de mettre à jour le password du user : recid = "+str(user_recid))
return False, "Impossible de mettre à jour le password" return False, "Impossible de mettre à jour le password"
elif( accounttype == "2"):
# Traitement d'un compte pro
# Verification de la validité du token/mail dans le cas des user en mode connecté
if (len(str(token_value)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " Le token est vide")
return False, "Le token est vide"
if (len(str(new_pwd)) <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " Le mot de passe est vide")
return False, "Le mot de passe est vide"
if (str(new_pwd) != str(conf_new_pwd)):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Les mots de passe ne sont pas identiques. nouveau pass :'" + str(
new_pwd) + "', la oonfirmation envoyées est "'' + str(conf_new_pwd) + "' ")
return False, " Les mots de passe ne sont pas identiques "
"""
/!\ ATTENTION : Pour les pro, on verifie le champ : "tmp_token_pwd" qui est token temporaire generé
pour le lien de reinitialisation.
"""
tmp_retval = MYSY_GV.dbname['partnair_account'].find({'tmp_token_pwd':token_value, 'active':'1'})
if tmp_retval is False or tmp_retval[0] is False:
mycommon.myprint(str(inspect.stack()[0][3]) + " Le token est invalide")
return False, "Le token est invalide"
# Recuperation du recid du user
user_recid = tmp_retval[0]['recid']
mydata = {}
mydata['date_update'] = str(datetime.now())
mydata['pwd'] = new_pwd
mydata['tmp_token_pwd'] = ""
client = MongoClient(CONNECTION_STRING)
coll_name = MYSY_GV.dbname['partnair_account']
print(" le recid PARTENAIRE = " + user_recid + " mydata = " + str(mydata))
ret_val = coll_name.find_one_and_update({'recid': user_recid, 'locked': '0', 'active': '1'},
{"$set": mydata},
upsert=False,
return_document=ReturnDocument.AFTER
)
if (ret_val and ret_val['_id']):
mycommon.myprint(str(inspect.stack()[0][3]) + " Le mot de passe a bien été mise à jour")
return True, "Le mot de passe a bien été mise à jour "
else:
mycommon.myprint(str(
inspect.stack()[0][3]) + " Impossible de mettre à jour le password du user : recid = " + str(
user_recid))
return False, "Impossible de mettre à jour le mot de passe"
except Exception as e: except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info() exc_type, exc_obj, exc_tb = sys.exc_info()
@ -1188,11 +1248,16 @@ def delete_user_account(diction):
coll_name = MYSY_GV.dbname['user_account'] coll_name = MYSY_GV.dbname['user_account']
ret_val = coll_name.find_one_and_update({'recid': str(user_recid), 'locked': '0'}, ret_val = coll_name.find_one_and_update({'recid': str(user_recid)},
{"$set": mydata}, {"$set": mydata},
upsert=False,
return_document=ReturnDocument.AFTER return_document=ReturnDocument.AFTER
) )
print("mydata ="+str(mydata))
print( "user_recid = "+user_recid)
print(str(ret_val))
if (ret_val and ret_val['_id']): if (ret_val and ret_val['_id']):
mycommon.myprint( mycommon.myprint(
str(inspect.stack()[0][3]) + " - Le compte utilisateur =" + str(ret_val['_id'])+" a été supprimé de la table : user_account ") str(inspect.stack()[0][3]) + " - Le compte utilisateur =" + str(ret_val['_id'])+" a été supprimé de la table : user_account ")
@ -1485,7 +1550,7 @@ def InitUserPasswd(diction):
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
# field_list. # field_list.
''' '''
field_list = ['email'] field_list = ['email', 'secrete']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
if val not in field_list: if val not in field_list:
@ -1508,17 +1573,26 @@ def InitUserPasswd(diction):
Verification de la valider de l'email Verification de la valider de l'email
''' '''
myemail = "" myemail = ""
mysecrete = ""
myquery = {} myquery = {}
if ("email" in diction.keys()): if ("email" in diction.keys()):
if diction['email']: if diction['email']:
myemail = diction['email'] myemail = diction['email']
myquery['email'] = diction['email'] myquery['email'] = diction['email']
if ("secrete" in diction.keys()):
if diction['secrete']:
mysecrete = diction['secrete']
myquery['token'] = diction['secrete']
myquery['active'] = '1' myquery['active'] = '1'
myquery['locked'] = '0' myquery['locked'] = '0'
'''
Si le champs "secrete" est vide, alors il s'agit d'un compte utilisateur classique
'''
if( mysecrete == ""):
coll_name = MYSY_GV.dbname['user_account'] coll_name = MYSY_GV.dbname['user_account']
#print(" myquery ="+str(myquery)) #print(" myquery ="+str(myquery))
@ -1569,11 +1643,73 @@ def InitUserPasswd(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer le nouveau toek") mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer le nouveau toek")
return True, "La demande de reinitiation à été prise en compte" return True, "La demande de reinitiation à été prise en compte"
# Account type 1 is for normal customers
account_type = 1
# envoi de l'email # envoi de l'email
email_mgt.send_user_init_pwd_mail(mynewtoken, retVal[0]['email']) email_mgt.send_user_init_pwd_mail(mynewtoken, retVal[0]['email'], account_type)
return True, "La demande de reinitiation à été prise en compte" return True, "La demande de reinitiation à été prise en compte"
elif( len(mysecrete) > 0):
'''
Le champs "secrete" est rempli, alors on reinitialise le pwd d'un partenaire
'''
coll_name = MYSY_GV.dbname['partnair_account']
# print(" myquery ="+str(myquery))
tmp = coll_name.count_documents(myquery)
if (tmp <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " Aucun resultat trouvé pour le compte pro " + str(myquery))
return True, "La demande de reinitiation à été prise en compte"
retVal = coll_name.find(myquery, {"_id": 0, "valide": 0, "user_recid": 0})
"""
Dans le cas exclusif du compte pro,
nous allons créer une token temporaire de reinitialisation, ceci sans perdre de vue que le
token de base ne change pas.
"""
new_token = {}
new_token['date_update'] = str(datetime.now())
# Creation du token
mynewtoken = mycommon.create_token_urlsafe()
new_token['tmp_token_pwd'] = mynewtoken
ret_val = coll_name.find_one_and_update(
{'recid': str(retVal[0]['recid']), },
{"$set": new_token},
upsert=False,
return_document=ReturnDocument.AFTER
)
if (ret_val['_id'] is False):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " : Impossible de reinitialiser le mot de passe")
return False, "Impossible de reinitialiser le mot de passe"
ret_val_tmp = coll_name.insert_one(new_token)
if (ret_val_tmp is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer le nouveau toek")
return True, "La demande de reinitiation à été prise en compte"
# Account type 2 is for PRO customers
account_type = 2
email_mgt.send_user_init_pwd_mail(mynewtoken, retVal[0]['email'],account_type )
return True, "La demande de reinitiation à été prise en compte"
except Exception as e: except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info() exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno)) mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
@ -1591,7 +1727,7 @@ def IsUserTokenValide(diction):
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste # Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
# field_list. # field_list.
''' '''
field_list = ['token'] field_list = ['token', 'accounttype']
incom_keys = diction.keys() incom_keys = diction.keys()
for val in incom_keys: for val in incom_keys:
if val not in field_list: if val not in field_list:
@ -1603,7 +1739,7 @@ def IsUserTokenValide(diction):
Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente, Une fois qu'on a controlé que toutes les clés mise dans l'API sont correcte. etape precedente,
On controle que les champs obligatoires sont presents dans la liste On controle que les champs obligatoires sont presents dans la liste
''' '''
field_list_obligatoire = ['token'] field_list_obligatoire = ['token', 'accounttype']
for val in field_list_obligatoire: for val in field_list_obligatoire:
if val not in diction: if val not in diction:
mycommon.myprint(str(inspect.stack()[0][3]) + " La valeur '" + val + "' n'est pas presente dans liste ") mycommon.myprint(str(inspect.stack()[0][3]) + " La valeur '" + val + "' n'est pas presente dans liste ")
@ -1614,7 +1750,16 @@ def IsUserTokenValide(diction):
if diction['token']: if diction['token']:
myquery['token'] = diction['token'] myquery['token'] = diction['token']
myaccounttype = ""
if ("accounttype" in diction.keys()):
if diction['accounttype']:
myaccounttype = diction['accounttype']
if( myaccounttype == "1"):
myquery['valide'] = '1' myquery['valide'] = '1'
# il s'agit d'un compte utilisateur
coll_name_token = MYSY_GV.dbname['user_token'] coll_name_token = MYSY_GV.dbname['user_token']
@ -1623,6 +1768,19 @@ def IsUserTokenValide(diction):
mycommon.myprint(str(inspect.stack()[0][3]) + " Aucun resultat trouvé pour " + str(myquery)) mycommon.myprint(str(inspect.stack()[0][3]) + " Aucun resultat trouvé pour " + str(myquery))
return False, "Le token n'est pas valide" return False, "Le token n'est pas valide"
elif( myaccounttype == "2"):
# Il s'agit d'un compte pro (partenaire)
myquery = {}
myquery['tmp_token_pwd'] = diction['token']
myquery['active'] = '1'
coll_name_token = MYSY_GV.dbname['partnair_account']
tmp = coll_name_token.count_documents(myquery)
if (tmp <= 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " Aucun resultat trouvé pour " + str(myquery))
return False, "Le token n'est pas valide"
return True, "Le token est valdie" return True, "Le token est valdie"
except Exception as e: except Exception as e:

View File

@ -170,7 +170,7 @@ def send_partner_account_mail(message, account_mail):
''' '''
Envoie de l'email de reinitialisation du mot de passe du user Envoie de l'email de reinitialisation du mot de passe du user
''' '''
def send_user_init_pwd_mail(token, account_mail): def send_user_init_pwd_mail(token, account_mail, type_account):
try: try:
tomorrow = datetime.date.today() + datetime.timedelta(days=1) tomorrow = datetime.date.today() + datetime.timedelta(days=1)
tomorrow_day = tomorrow.strftime("%A") tomorrow_day = tomorrow.strftime("%A")
@ -186,9 +186,9 @@ def send_user_init_pwd_mail(token, account_mail):
my_url = "" my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"): if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://www.mysy-training.com/ResetUserPwd/" + str(token) my_url = "https://www.mysy-training.com/ResetUserPwd/" + str(token)+"/"+str(type_account)
elif (MYSY_GV.MYSY_ENV == "DEV"): elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:3009/ResetUserPwd/" + str(token) my_url = "http://localhost:3009/ResetUserPwd/" + str(token)+"/"+str(type_account)

View File

@ -165,14 +165,14 @@ def add_partner_account(diction):
# Verification que cette adresse email n'existe pas. Ceci que soit entant que user ou entant que partner # Verification que cette adresse email n'existe pas. Ceci que soit entant que user ou entant que partner
#tmp = coll_name.find({'email': str(mydata['email']) }).count() #tmp = coll_name.find({'email': str(mydata['email']) }).count()
tmp = coll_name.count_documents({'email': str(mydata['email']) }) tmp = coll_name.count_documents({'email': str(mydata['email']), 'active':'1' })
logging.info(" TMP = "+str(tmp)) logging.info(" TMP = "+str(tmp))
if( tmp > 0 ): if( tmp > 0 ):
mycommon.myprint(str(inspect.stack()[0][3]) + " - l'adresse email '"+str(mydata['email'])+"' existe deja, impossible de créer le compte partenaire ") mycommon.myprint(str(inspect.stack()[0][3]) + " - l'adresse email '"+str(mydata['email'])+"' existe deja, impossible de créer le compte partenaire ")
return False, "l'adresse email '"+str(mydata['email'])+"' est deja utilisée, impossible de créer le compte partenaire " return False, "l'adresse email '"+str(mydata['email'])+"' est deja utilisée, impossible de créer le compte partenaire "
tmp = coll_name_user_account.count_documents({'email': str(mydata['email'])}) tmp = coll_name_user_account.count_documents({'email': str(mydata['email']), 'active':'1'})
logging.info(" TMP = " + str(tmp)) logging.info(" TMP = " + str(tmp))
if (tmp > 0): if (tmp > 0):
mycommon.myprint(str(inspect.stack()[0][3]) + " - l'adresse email '" + str( mycommon.myprint(str(inspect.stack()[0][3]) + " - l'adresse email '" + str(

View File

@ -260,7 +260,7 @@ def get_user_email_from_recid(recid = ""):
return False return False
coll_token = MYSY_GV.dbname['user_account'] coll_token = MYSY_GV.dbname['user_account']
tmp_val = coll_token.find({'recid': str(recid), 'active': '1'}) tmp_val = coll_token.find({'recid': str(recid), 'active': '0'})
if( tmp_val and tmp_val[0] and tmp_val[0]['email']): if( tmp_val and tmp_val[0] and tmp_val[0]['email']):
user_email = tmp_val[0]['email'] user_email = tmp_val[0]['email']