from resources.common_imports import * #les variables globales minimum from resources.config import paheko_ident, paheko_pass, paheko_url class Paheko_categories(Resource): @jwt_required() def get(self): """ Récupérer les catégories Paheko avec le compteur associé --- tags: - Paheko security: - Bearer: [] parameters: [] responses: 200: description: Liste des catégories Paheko 404: description: oops """ 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 jsonify(data) else: return jsonify({'error': 'La requête a échoué'}), response.status_code #************************************************* class Paheko_users(Resource): @jwt_required() def get(self,categorie): """ Afficher les membres d'une catégorie Paheko --- tags: - Paheko security: - Bearer: [] parameters: - in: path name: categorie type: string required: true responses: 200: description: Liste des membres une catégorie Paheko 404: description: oops """ 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 jsonify(data) else: return jsonify({'error': 'La requête a échoué'}), response.status_code #************************************************* class Paheko_user(Resource): def __init__(self): global paheko_ident, paheko_pass, paheko_url self.paheko_ident = paheko_ident self.paheko_pass = paheko_pass self.paheko_url = paheko_url self.auth = (self.paheko_ident, self.paheko_pass) @jwt_required() def get(self,ident): """ Afficher un membre de Paheko par son email kaz ou son numéro ou le non court de l'orga --- tags: - Paheko security: - Bearer: [] parameters: - in: path name: ident type: string required: true description: possible d'entrer un numéro, un email, le nom court de l'orga responses: 200: description: Existe et affiche 404: description: N'existe pas """ 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 jsonify(data["results"][0]) elif data["count"] == 0: return "pas de résultat", 400 else: return "Plusieurs utilisateurs correspondent ?!", 400 else: #return jsonify({'error': 'La requête a échoué'}), response.status_code return "pas de résultat", response.status_code #************************************************* @jwt_required() def put(self,ident,field,new_value): """ Modifie la valeur d'un champ d'un membre paheko (ident= numéro paheko ou email kaz) --- tags: - Paheko security: - Bearer: [] parameters: - in: path name: ident type: string required: true description: possible d'entrer le numéro paheko, un email kaz - in: path name: field type: string required: true description: un champ de la table users de la base paheko - in: path name: new_value type: string required: true description: la nouvelle valeur à remplacer responses: 200: description: Modification effectuée avec succès 400: description: Oops, ident non trouvé ou incohérent 404: description: Oops, modification du champ KO """ #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: return "email non trouvé", 400 elif data['count'] > 1: return "trop de résultat", 400 else: #OK ident = data['results'][0]['id'] else: return "pas de résultat", response.status_code elif not ident.isdigit(): return "Identifiant utilisateur invalide", response.status_code 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(),response.status_code #************************************************* #************************************************* class Paheko_users_action(Resource): def __init__(self): global paheko_ident, paheko_pass, paheko_url self.paheko_ident = paheko_ident self.paheko_pass = paheko_pass self.paheko_url = paheko_url @jwt_required() def get(self, action): """ retourne tous les membres de paheko avec une action à mener (création du compte kaz / modification...) --- tags: - Paheko security: - Bearer: [] parameters: - in: path name: action type: string required: true enum: ['A créer','A modifier','En attente','Aucune'] responses: 200: description: liste des nouveaux kaznautes à créer 404: description: aucun nouveau kaznaute à créer """ auth = (self.paheko_ident, self.paheko_pass) api_url = self.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(),200 else: return "pas de résultat", response.status_code