14/04/23 - 23h

master
cherif 2023-04-14 22:51:38 +02:00
parent 4d5118ecbd
commit c2b289d2ac
7 changed files with 2376 additions and 28 deletions

View File

@ -1,11 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="07/04/23 - 11h">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="10/04/23 - 17h">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Inscription_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/Inscription_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/prj_common.py" beforeDir="false" afterPath="$PROJECT_DIR$/prj_common.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/email_mgt.py" beforeDir="false" afterPath="$PROJECT_DIR$/email_mgt.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" beforeDir="false" afterPath="$PROJECT_DIR$/lms_chamilo/mysy_lms.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" beforeDir="false" afterPath="$PROJECT_DIR$/tools_cherif/tools_cherif.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -83,7 +86,14 @@
<option name="project" value="LOCAL" />
<updated>1680858757338</updated>
</task>
<option name="localTasksCounter" value="4" />
<task id="LOCAL-00004" summary="10/04/23 - 17h">
<created>1681138622687</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1681138622687</updated>
</task>
<option name="localTasksCounter" value="5" />
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
@ -100,6 +110,7 @@
<component name="VcsManagerConfiguration">
<MESSAGE value="07/04/23 - 9h" />
<MESSAGE value="07/04/23 - 11h" />
<option name="LAST_COMMIT_MESSAGE" value="07/04/23 - 11h" />
<MESSAGE value="10/04/23 - 17h" />
<option name="LAST_COMMIT_MESSAGE" value="10/04/23 - 17h" />
</component>
</project>

View File

@ -318,7 +318,7 @@ elif (MYSY_ENV == "DEV"):
MYSY_MARIADB_USER_PASS = "fB5z%M)GG&g!n2c"
MYSY_MARIADB_HOST = "192.168.1.21"
MYSY_MARIADB_PORT = 3306
MYSY_LMS_BDD = "mysy_db_chamilo_dev"
MYSY_LMS_BDD = "chamilo_dev2"
MYSY_LMS_URL = "https://lms.mysy-training.com/"
@ -335,4 +335,11 @@ elif (MYSY_ENV == "REC"):
"""
Variable pour definir les unité de durée acceptées pour une formation
"""
CLASS_DURATION_UNIT = ['heure', 'jour', 'mois', 'annee']
CLASS_DURATION_UNIT = ['heure', 'jour', 'mois', 'annee']
"""
Cette variable est le l'url de base pour le lms.
cette valeur est utilisée pour la creation des url du lms
"""
LMS_BAS_URL = "mysy-training.fr"

File diff suppressed because one or more lines are too long

View File

@ -63,11 +63,11 @@ def send_user_account_mail_old(message, account_mail):
my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://apimysy.iexercice.com/myclass/api/valide_user_account/"+str(message)
my_url = "https://apimysy.mysy-training.com/myclass/api/valide_user_account/"+str(message)
elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:"+str(MYSY_GV.MYSY_PORT_DEV)+"/myclass/api/valide_user_account/"+str(message)
elif (MYSY_GV.MYSY_ENV == "REC"):
my_url = "https://devapimysy.iexercice.com/myclass/api/valide_user_account/" + str(message)
my_url = "https://devapimysy.mysy-training.com/myclass/api/valide_user_account/" + str(message)
send_smtp_email = sib_api_v3_sdk.SendSmtpEmail(template_id=15, params={"mysyurl": my_url,
@ -111,11 +111,11 @@ def send_user_thks_mail_old(message, account_mail):
my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://apimysy.iexercice.com/myclass/api/valide_user_account/" + str(message)
my_url = "https://apimysy.mysy-training.com/myclass/api/valide_user_account/" + str(message)
elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:"+str(MYSY_GV.MYSY_PORT_DEV)+"/myclass/api/valide_user_account/" + str(message)
elif (MYSY_GV.MYSY_ENV == "REC"):
my_url = "https://devapimysy.iexercice.com/myclass/api/valide_user_account/" + str(message)
my_url = "https://devapimysy.mysy-training.com/myclass/api/valide_user_account/" + str(message)
@ -144,11 +144,11 @@ def send_partner_account_mail_old(message, account_mail):
my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://apimysy.iexercice.com/myclass/api/valide_partnair_account/" + str(message)
my_url = "https://apimysy.mysy-training.com/myclass/api/valide_partnair_account/" + str(message)
elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:"+str(MYSY_GV.MYSY_PORT_DEV)+"/myclass/api/valide_partnair_account/"+str(message)
elif (MYSY_GV.MYSY_ENV == "REC"):
my_url = "https://devapimysy.iexercice.com/myclass/api/valide_partnair_account/"+str(message)
my_url = "https://devapimysy.mysy-training.com/myclass/api/valide_partnair_account/"+str(message)
print(" mail enoye à toaddrs : "+toaddrs)
@ -1121,11 +1121,11 @@ def send_user_account_mail(message, account_mail):
my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://apimysy.iexercice.com/myclass/api/valide_user_account/"+str(message)
my_url = "https://apimysy.mysy-training.com/myclass/api/valide_user_account/"+str(message)
elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:"+str(MYSY_GV.MYSY_PORT_DEV)+"/myclass/api/valide_user_account/"+str(message)
elif (MYSY_GV.MYSY_ENV == "REC"):
my_url = "https://devapimysy.iexercice.com/myclass/api/valide_user_account/" + str(message)
my_url = "https://devapimysy.mysy-training.com/myclass/api/valide_user_account/" + str(message)
@ -1190,11 +1190,11 @@ def send_partner_account_mail(message, account_mail):
my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://apimysy.iexercice.com/myclass/api/valide_partnair_account/" + str(message)
my_url = "https://apimysy.mysy-training.com/myclass/api/valide_partnair_account/" + str(message)
elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:"+str(MYSY_GV.MYSY_PORT_DEV)+"/myclass/api/valide_partnair_account/"+str(message)
elif (MYSY_GV.MYSY_ENV == "REC"):
my_url = "https://devapimysy.iexercice.com/myclass/api/valide_partnair_account/" + str(message)
my_url = "https://devapimysy.mysy-training.com/myclass/api/valide_partnair_account/" + str(message)
@ -1327,11 +1327,11 @@ def send_user_thks_mail(message, account_mail):
my_url = ""
if (MYSY_GV.MYSY_ENV == "PROD"):
my_url = "https://apimysy.iexercice.com/myclass/api/valide_user_account/" + str(message)
my_url = "https://apimysy.mysy-training.com/myclass/api/valide_user_account/" + str(message)
elif (MYSY_GV.MYSY_ENV == "DEV"):
my_url = "http://localhost:"+str(MYSY_GV.MYSY_PORT_DEV)+"/myclass/api/valide_user_account/" + str(message)
elif (MYSY_GV.MYSY_ENV == "REC"):
my_url = "https://devapimysy.iexercice.com/myclass/api/valide_user_account/" + str(message)
my_url = "https://devapimysy.mysy-training.com/myclass/api/valide_user_account/" + str(message)
"""
@ -1733,11 +1733,11 @@ def SendEmargementMail( diction):
#myurl = "http://127.0.0.1:5001/myclass/api/UserEmargementValidation/"+str(val_emarge['_id'])+"/1"
if (MYSY_GV.MYSY_ENV == "PROD"):
myurl = "https://apimysy.iexercice.com/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/1"
myurl = "https://apimysy.mysy-training.com/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/1"
elif (MYSY_GV.MYSY_ENV == "DEV"):
myurl = "http://127.0.0.1:5001/myclass/api/UserEmargementValidation/"+str(val_emarge['_id'])+"/1"
elif (MYSY_GV.MYSY_ENV == "REC"):
myurl = "https://devapimysy.iexercice.com/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/1"
myurl = "https://devapimysy.mysy-training.com/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/1"
body = {
@ -1771,12 +1771,12 @@ def SendEmargementMail( diction):
myurl = "http://127.0.0.1:5001/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/2"
if (MYSY_GV.MYSY_ENV == "PROD"):
myurl = "https://apimysy.iexercice.com/myclass/api/UserEmargementValidation/" + str(
myurl = "https://apimysy.mysy-training.com/myclass/api/UserEmargementValidation/" + str(
val_emarge['_id']) + "/2"
elif (MYSY_GV.MYSY_ENV == "DEV"):
myurl = "http://127.0.0.1:5001/myclass/api/UserEmargementValidation/" + str(val_emarge['_id']) + "/2"
elif (MYSY_GV.MYSY_ENV == "REC"):
myurl = "https://devapimysy.iexercice.com/myclass/api/UserEmargementValidation/" + str(
myurl = "https://devapimysy.mysy-training.com/myclass/api/UserEmargementValidation/" + str(
val_emarge['_id']) + "/2"

View File

@ -246,6 +246,8 @@ def Create_MySy_LMS_User(diction):
## Si l'insertion dans la table user s'est bien passé, alors on ajoute le user_id à la table 'access_url_rel_user'
Cette table permet faire la recherche et d'envoyer des email dans le LMS.
Ainsi un utilisateur saisira juste les 3 première lettre du 'send to'
/!\ On l'ajout d'abord par defaut pour le l'url racine.
/!\ On va l'ajouter une 2ieme fois si le compte partenaire necessite la creation d'un nouvel url.
"""
my_query_access_url_rel_user = "INSERT INTO access_url_rel_user SET access_url_id='1' , user_id='" + str(
new_lms_user_id) + "' "
@ -280,10 +282,41 @@ def Create_MySy_LMS_User(diction):
local_status, local_message, local_value = Update_Pack_MySy_LMS_User(new_dicton)
if( local_status is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - WARNING : impossible de créer les varibblers")
mycommon.myprint(str(inspect.stack()[0][3]) + " - WARNING : impossible de créer les varible MySy dans le LMS")
lastrowid = cur.lastrowid
"""
A present que le compte est créé, on va créer l'url / virtualhost et affecter l'utilisateur à ce virtualHost
"""
virutal_host_id = ""
virutal_host_url = ""
local_data = {}
local_data['token'] = my_token
local_status, local_message, local_virtualhost_id, local_virtualhost_full_url = LMS_Create_VirtualHost(local_data)
if (local_status is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - WARNING : impossible de créer le virtualHost dans le LMS ")
else:
"""
/!\ On va l'ajouter une 2ieme fois si le compte partenaire necessite la creation d'un nouvel url.
"""
virutal_host_id = local_virtualhost_id
virutal_host_url = local_virtualhost_full_url
my_query_access_url_rel_user = "INSERT INTO access_url_rel_user SET access_url_id='"+ str(virutal_host_id)+"' , user_id='" + str(new_lms_user_id) + "' "
print(" ### my_query_access_url_rel_user = ", my_query_access_url_rel_user)
try:
# cur.execute("INSERT INTO employees (first_name,last_name) VALUES (?, ?)", ("Maria", "DB"))
cur.execute(my_query_access_url_rel_user)
except mariadb.Error as e:
# print(f"Error: {e}")
mycommon.myprint(str(inspect.stack()[0][3]) + " WARNING - impossible d'ajouter le user '" + str(
new_lms_user_id) + "' à la table access_url_rel_user pour la recheche et l'envoi des email")
conn.commit()
conn.close()
# Crementation de la sequence de l'objet "lms_user_id" dans la collection : "mysy_sequence"
@ -1012,8 +1045,8 @@ def Check_MySy_LMS_Account(diction):
local_status, local_retval, new_lms_use_id = Create_MySy_LMS_User(new_diction)
if (local_status is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer le compte LSM ")
return False, str(inspect.stack()[0][3]) + " - Impossible de créer le compte LSM "
mycommon.myprint(str(inspect.stack()[0][3]) + " - Impossible de créer le compte LMS ")
return False, str(inspect.stack()[0][3]) + " - Impossible de créer le compte LMS "
# Apres la creation du compte LSM, on met à jour le compte mysy avec la valeur du champs : mysy_lms_user_id
mysy_coll_query = {}
@ -1853,4 +1886,170 @@ def LMS_Get_Partner_Data(diction):
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de recuperer les données LMS du partner"
return False, " Impossible de recuperer les données LMS du partner"
"""
Une fois un compte LMS créé, cette fonction donne la possibilité de créer
une virtualhost associé à cet utilisateur
Le virtualhost revient à créer dans base de donnée de chamilo, la table "access_url" un enregistrement
- url,
- description
- active,
- date heure creation
"""
def LMS_Create_VirtualHost(diction):
try:
virtualHost_Id = ""
virtualHost_url = ""
'''
# Verification que les champs reçus dans l'API sont bien dans la liste des champs autorisés
# Cela evite le cas ou une entité tierce ajouter les valeurs inconnu dans l'API
# Ici on doit mettre tous les champs possible (obligatoire ou non) de la BDD dans la liste
# field_list.
'''
field_list = ['token']
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list:
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le champ '" + val + "' n'existe pas, Creation virtualhost annulée")
return False, " Les informations fournies sont incorrecte", virtualHost_Id, virtualHost_url
'''
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
'''
field_list_obligatoire = ['token']
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Les informations fournies sont incorrecte", virtualHost_Id, virtualHost_url
my_token = ""
if ("token" in diction.keys()):
if diction['token']:
my_token = diction['token']
partner_recid = mycommon.get_parnter_recid_from_token(my_token)
if (partner_recid is False):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - partner_recid KO : Impossible d'importer la liste des participants ")
return False, " Les information de connexion sont incorrectes.", virtualHost_Id, virtualHost_url
# Recuperation des données du partenaire
local_status, my_partner = mycommon.get_partner_data_from_recid(partner_recid)
if (local_status is False):
mycommon.myprint(str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire")
return False, str(inspect.stack()[0][3]) + " - impossible de recuperer les données du partenaire", virtualHost_Id, virtualHost_url
if ("nom" not in my_partner.keys()):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - Le nom du partenaire est incorrect ")
return False, " Le nom du partenaire est incorrect ", virtualHost_Id, virtualHost_url
part_nom = my_partner['nom']
"""
/!\ : la regle pour definir l'url (url.iexercice.com) est :
1 - on prend le nom, on enleve tous les caratères non acceptés dans une url
2 - on met tout en minuscule
3 - Du mot restant, on prends les 10 premiers caractère.
4 - l'url global = prefixe_url.GV.LMS_BAS_URL
ex : pour un qui est : "MySy Demo 2303"
prefixe url = mysydemo23
l'url final est : mysydemo23.iexerice.com
"""
lms_prefixe_url = ''.join(filter(str.isalnum, part_nom))
lms_prefixe_url = str(lms_prefixe_url)[0:10]
if(len(lms_prefixe_url) < 3 ):
mycommon.myprint(
str(inspect.stack()[0][3]) + " - le lms_prefixe_url est trop court. Le nom du client comporte moins de 3 caractères alphanumerique")
return False, " Impossible de créer l'url dans le LMS. Le lms_prefixe_url est trop court. Le nom du client comporte moins de 3 caractères alphanumerique ", virtualHost_Id, virtualHost_url
print(" #### lms_prefixe_url = ", lms_prefixe_url)
conn = mariadb.connect(
user=MYSY_GV.MYSY_MARIADB_USER,
password=MYSY_GV.MYSY_MARIADB_USER_PASS,
host=MYSY_GV.MYSY_MARIADB_HOST,
port=MYSY_GV.MYSY_MARIADB_PORT,
database=MYSY_GV.MYSY_LMS_BDD
)
cur = conn.cursor()
# Verification d'abord si l'url existe.
query_compte_exist = " Select count(*), url From access_url WHERE url LIKE '%" + lms_prefixe_url + ".%' "
print(" ### query_compte_exist = ", query_compte_exist)
query_compte_exist_exec = cur.execute(query_compte_exist)
query_compte_exist_exec = ""
query_compte_exist_exec_val = "0"
existing_url = ""
for query_compte_exist_exec in cur:
query_compte_exist_exec_val = query_compte_exist_exec[0]
if (int(mycommon.tryInt(query_compte_exist_exec_val)) > 0):
existing_url = query_compte_exist_exec[1]
conn.commit()
if(len(existing_url) > 0 ):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " - L'url '"+str(existing_url)+"' existe deja. Impossible de créer une nouvelle url")
return False, " L'url '"+str(existing_url)+"' existe deja. Impossible de créer une nouvelle url ", virtualHost_Id, virtualHost_url
print(" #### le prefixe d'url : '"+str(lms_prefixe_url)+"' N'EXISTE PAS. On va créer l'url")
registration_date = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
full_url = str("http://"+str(lms_prefixe_url)+"."+str(MYSY_GV.LMS_BAS_URL)).lower()
virtualHost_url = full_url
my_query = " INSERT INTO access_url (url, description, active, created_by, tms, url_type) "\
" VALUES('"+str(full_url)+"', 'Url pour "+str(part_nom)+"', '1', '1', '"+str(registration_date)+"', NULL);"
try:
print(" ### my_query iiii = ", my_query)
cur.execute(my_query)
except mariadb.Error as e:
# print(f"Error: {e}")
mycommon.myprint(" Impossible de créer l'url LMS " + str({e}))
return False, "Impossible de créer l'url LMS " + str({e}), virtualHost_Id, virtualHost_url
conn.commit()
if( cur.lastrowid ):
virtualHost_Id = cur.lastrowid
print(f"Last Inserted ID: {cur.lastrowid}")
conn.close()
""" Une fois que l'url/virtualhost a été crée, on met à jour le compte partnair dans MySy
"""
# Apres la creation du compte LSM, on met à jour le compte mysy avec la valeur du champs : mysy_lms_user_id
mysy_coll_query = {}
mysy_coll_query['lms_virtualhost_id'] = str(virtualHost_Id)
mysy_coll_query['lms_virtualhost_url'] = str(virtualHost_url)
mysy_coll_query['date_update'] = str(datetime.now())
ret_val = MYSY_GV.dbname['partnair_account'].find_one_and_update(
{'token': diction['token'], 'active': '1', 'locked': '0'},
{"$set": mysy_coll_query},
upsert=False,
return_document=ReturnDocument.AFTER
)
if (ret_val['_id'] is False):
mycommon.myprint(
str(inspect.stack()[0][
3]) + " : WARNING : Impossible de mettre à jour le compte MySy avec le lms_virtualhost_url = ",
str(virtualHost_url))
return True, " L'url LMS a été correctement crée", virtualHost_Id, virtualHost_url
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de créer une url (virtualhost) ", False, False

15
main.py
View File

@ -2823,6 +2823,21 @@ def LMS_Get_Partner_Data():
localStatus, message = mysy_lms.LMS_Get_Partner_Data(payload)
return jsonify(status=localStatus, message=message )
"""
API de créer de l'url du lms
"""
@app.route('/myclass/api/LMS_Create_VirtualHost/', methods=['POST','GET'])
@crossdomain(origin='*')
def LMS_Create_VirtualHost():
# On recupere le corps (payload) de la requete
payload = request.form.to_dict()
print(" ### LMS_Create_VirtualHost : payload = ",payload)
localStatus, message, virtualHost_Id, full_url = mysy_lms.LMS_Create_VirtualHost(payload)
return jsonify(status=localStatus, message=message, virtualHost_Id= virtualHost_Id, full_url=full_url)
if __name__ == '__main__':
print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD)

View File

@ -809,13 +809,14 @@ def test_web_service(diction):
def test_web_service2(diction):
try:
print(" #### ENVIRONNEMENT = "+str(MYSY_GV.MYSY_ENV)+" ")
if( diction ):
print(" ### diction dans la fonction = ", diction)
else:
print(" ### diction dans la fonction est vide")
return True, "Test WebService OK Diction = "+str(diction)
return True, "ENV = "+str(MYSY_GV.MYSY_ENV)+" Test WebService OK Diction = "+str(diction)
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()