init python
This commit is contained in:
140
bin/lib/paheko.py
Normal file
140
bin/lib/paheko.py
Normal file
@@ -0,0 +1,140 @@
|
||||
import requests
|
||||
|
||||
from .config import getDockersConfig, getSecretConfig
|
||||
|
||||
paheko_ident = getDockersConfig("paheko_API_USER")
|
||||
paheko_pass = getDockersConfig("paheko_API_PASSWORD")
|
||||
paheko_url = f"https://kaz-paheko.{getDockersConfig('domain')}"
|
||||
|
||||
class Paheko:
|
||||
def get_categories(self):
|
||||
"""
|
||||
Récupérer les catégories Paheko avec le compteur associé
|
||||
"""
|
||||
global paheko_ident, paheko_pass, paheko_url
|
||||
|
||||
auth = (paheko_ident, paheko_pass)
|
||||
api_url = paheko_url + '/api/user/categories'
|
||||
|
||||
response = requests.get(api_url, auth=auth)
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
return data
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def get_users_in_categorie(self,categorie):
|
||||
"""
|
||||
Afficher les membres d'une catégorie Paheko
|
||||
"""
|
||||
|
||||
global paheko_ident, paheko_pass, paheko_url
|
||||
|
||||
auth = (paheko_ident, paheko_pass)
|
||||
if not categorie.isdigit():
|
||||
return 'Id de category non valide', 400
|
||||
|
||||
api_url = paheko_url + '/api/user/category/'+categorie+'.json'
|
||||
|
||||
response = requests.get(api_url, auth=auth)
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
return data
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def get_user(self,ident):
|
||||
"""
|
||||
Afficher un membre de Paheko par son email kaz ou son numéro ou le non court de l'orga
|
||||
"""
|
||||
|
||||
emailmatchregexp = re.compile(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")
|
||||
|
||||
if emailmatchregexp.match(ident):
|
||||
data = { "sql": f"select * from users where email='{ident}' or alias = '{ident}'" }
|
||||
api_url = self.paheko_url + '/api/sql/'
|
||||
response = requests.post(api_url, auth=self.auth, data=data)
|
||||
#TODO: if faut Rechercher count et vérifier que = 1 et supprimer le count=1 dans la réponse
|
||||
elif ident.isdigit():
|
||||
api_url = self.paheko_url + '/api/user/'+ident
|
||||
response = requests.get(api_url, auth=self.auth)
|
||||
else:
|
||||
nomorga = re.sub(r'\W+', '', ident) # on vire les caractères non alphanumérique
|
||||
data = { "sql": f"select * from users where admin_orga=1 and nom_orga='{nomorga}'" }
|
||||
api_url = self.paheko_url + '/api/sql/'
|
||||
response = requests.post(api_url, auth=self.auth, data=data)
|
||||
#TODO:if faut Rechercher count et vérifier que = 1 et supprimer le count=1 dans la réponse
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
if data["count"] == 1:
|
||||
return data["results"][0]
|
||||
elif data["count"] == 0:
|
||||
return None
|
||||
else:
|
||||
return data["results"]
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def set_user(self,ident,field,new_value):
|
||||
"""
|
||||
Modifie la valeur d'un champ d'un membre paheko (ident= numéro paheko ou email kaz)
|
||||
"""
|
||||
|
||||
#récupérer le numero paheko si on fournit un email kaz
|
||||
emailmatchregexp = re.compile(r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")
|
||||
if emailmatchregexp.match(ident):
|
||||
data = { "sql": f"select id from users where email='{ident}'" }
|
||||
api_url = self.paheko_url + '/api/sql/'
|
||||
response = requests.post(api_url, auth=self.auth, data=data)
|
||||
if response.status_code == 200:
|
||||
#on extrait l'id de la réponse
|
||||
data = response.json()
|
||||
if data['count'] == 0:
|
||||
print("email non trouvé")
|
||||
return None
|
||||
elif data['count'] > 1:
|
||||
print("trop de résultat")
|
||||
return None
|
||||
else:
|
||||
#OK
|
||||
ident = data['results'][0]['id']
|
||||
else:
|
||||
print("pas de résultat")
|
||||
return None
|
||||
elif not ident.isdigit():
|
||||
print("Identifiant utilisateur invalide")
|
||||
return None
|
||||
|
||||
regexp = re.compile("[^a-zA-Z0-9 \\r\\n\\t" + re.escape(string.punctuation) + "]")
|
||||
valeur = regexp.sub('',new_value) # mouais, il faudrait être beaucoup plus précis ici en fonction des champs qu'on accepte...
|
||||
|
||||
champ = re.sub(r'\W+','',field) # pas de caractères non alphanumériques ici, dans l'idéal, c'est à choisir dans une liste plutot
|
||||
|
||||
api_url = self.paheko_url + '/api/user/'+str(ident)
|
||||
payload = {champ: valeur}
|
||||
response = requests.post(api_url, auth=self.auth, data=payload)
|
||||
return response.json()
|
||||
|
||||
|
||||
def get_users_with_action(self, action):
|
||||
"""
|
||||
retourne tous les membres de paheko avec une action à mener (création du compte kaz / modification...)
|
||||
"""
|
||||
auth = (paheko_ident, paheko_pass)
|
||||
|
||||
api_url = paheko_url + '/api/sql/'
|
||||
payload = { "sql": f"select * from users where action_auto='{action}'" }
|
||||
response = requests.post(api_url, auth=auth, data=payload)
|
||||
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
return None
|
||||
|
||||
|
Reference in New Issue
Block a user