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