#!/usr/bin/python3 # Gestion des redirections mails de gandi # ####################################################### # imports ####################################################### import requests import json import sys from configGandiAPI import * # Initialisation de la variable api_key ####################################################### # Initi variables ####################################################### debug = False # api_key = 'XXX' -> Variable renseignee dans le fichier configGandiAPI.py api_url_base_redir = "https://api.gandi.net/v5/email/forwards/" api_url_base_mailboxes = "https://api.gandi.net/v5/email/mailboxes/" ####################################################### # Fonctions ####################################################### def affiche_usage(): print("Usage:") print(" ", sys.argv[0], "-count domain\n\t-> Compte les redirections du domaine.") print(" ", sys.argv[0], "-list domain\n\t-> Liste les redirections du domaine.") print(" ", sys.argv[0], "-search_src domain string\n\t-> Recherche une chaine dans les adresses sources.") print(" ", sys.argv[0], "-search_dest domain string\n\t-> Recherche une chaine dans les adresses de destinations.") print(" ", sys.argv[0], "-create domain new_redir destination\n\t-> Cree une nouvelle redirection mail.") # # Lecture API dans un json # def lister_adresses_redir(api_url, api_key): headers = {'authorization': 'Apikey ' + api_key} print("Downloading", api_url, "...") #response = requests.request("GET", api_url, headers=headers) response = requests.get(api_url, headers=headers) data = response.json() head = response.headers #print (type(response)) if str(response) != "": print ("\nProbleme d'acces a l'API. \nCode retour = " + str(response)) quit() if debug: print("Type data:", type(data)) #print(data) print("Type head:", type(head)) print(head) # print("Type head.link", type(head['link'])) # print(head['link']) # print(response.text) # quit() return (head, data) # # Compte le nb de redirections # def compter_redir (head, domain): print(" " + head['total-count'] + " adresses trouvees.") # # Afficher nb occurences # def affiche_nb_occurences(nb_src, liste_dest): # Supprimer les doublons de la liste des adresses de destination liste_dest = list(set(liste_dest)) print ("\n", nb_src, "adresses sources et", len(liste_dest), "adresses de destinations trouvees.") # # Recherche si redirection existe # def rechercher_redir(data, domain, email_string, src_or_dest): nb_src = 0 liste_dest = [] # email_string = email_string.ascii_lowercase() for mail_list in data: #if src_or_dest == 'source' and (email_string == "ALL" or email_string.lower() in mail_list[src_or_dest].lower() ): if src_or_dest == 'source' and (email_string.lower() in mail_list[src_or_dest].lower() ): nb_src += 1 #print (" - " + mail_list['source'] + "@" + domain + "\t-> ", end='') src = mail_list['source'] + "@" + domain print (" - {:<40} -> ".format(src), end='' ) for dest in mail_list['destinations']: # Comptage des adresses de destination liste_dest.append(dest.lower()) print (dest + ' ', end='') print() elif src_or_dest == 'destinations': for dest in mail_list['destinations']: if email_string.lower() in dest.lower(): nb_src += 1 #print (" - " + mail_list['source'] + "@" + domain + "\t -> ", dest) src = mail_list['source'] + "@" + domain print (" - {:<40} -> ".format(src) + dest) # Comptage des adresses de destination liste_dest.append(dest.lower()) #print (dest + ' ', end='') affiche_nb_occurences(nb_src, liste_dest) # # Creer une redirection # def creer_redir(api_url, new_redir, dest): payload = "{\"source\":\"" + new_redir + "\",\"destinations\":[\"" + dest + "\"]}" headers = { 'authorization': "Apikey " + api_key, 'content-type': "application/json" } response = requests.request("POST", api_url, data=payload, headers=headers) print("Retour API:", response.text) # # Chercher les Alias # def rechercher_alias(api_url, alias_string, api_key): headers = {'authorization': 'Apikey ' + api_key} response = requests.request("GET", api_url, headers=headers) if debug: print(response.text) data = response.json() # Parcours des boites mails for mail_list in data: if debug: print(type(data)) print(mail_list['href']) url = mail_list['href'] headers = {'authorization': 'Apikey ' + api_key} response = requests.request("GET", url, headers=headers) data_detail = response.json() print ("\n - Recherche des alias de la boite mail '" + data_detail['address'] + "' ...") if debug: print(type(data_detail)) print(response.text) # Parcours des aliases de la boite mail # print(data_detail['aliases']) nb_alias = 0 for alias in data_detail['aliases']: #if (alias_string == "ALL" or alias_string.lower() in alias ): if (alias_string.lower() in alias ): nb_alias += 1 print (" ", alias, end='') print ("\n " + str(nb_alias) + " alias trouvés pour la boite mail " + data_detail['address']) ####################################################### # Main ####################################################### # # Test des arguments # if len(sys.argv) < 3: affiche_usage() quit() domain = sys.argv[2] # 1000 par page pour éviter pb pagination api_url_redir = api_url_base_redir + domain + "?per_page=1000" api_url_mailboxes = api_url_base_mailboxes + domain if sys.argv[1] == "-create" and len(sys.argv) == 5: new_redir = sys.argv[3] dest = sys.argv[4] creer_redir(api_url_redir, new_redir, dest) elif sys.argv[1] == "-count" and len(sys.argv) == 3: print("\nComptage des redirections mail dans le domaine '" + domain + "'...") tuple_head_redir = lister_adresses_redir (api_url_redir, api_key) compter_redir(tuple_head_redir[0], domain) elif sys.argv[1] == "-list" and len(sys.argv) == 3: print("\nAffichage des redirections mails du domaine '" + domain + "'...") tuple_head_redir = lister_adresses_redir (api_url_redir, api_key) rechercher_redir(tuple_head_redir[1], domain, "", "source") print("\nAffichage des alias des boites mails du domaine '" + domain + "'...") rechercher_alias(api_url_mailboxes, "", api_key) elif sys.argv[1] == "-search_src" and len(sys.argv) == 4: email_string = sys.argv[3] print("\nRecherche de '" + email_string + "' dans les redirections mails du domaine '" + domain + "'...") tuple_head_redir = lister_adresses_redir (api_url_redir, api_key) rechercher_redir(tuple_head_redir[1], domain, email_string, "source") print("\nRecherche de '" + email_string + "' dans les alias des boites mails du domaine '" + domain + "'...") rechercher_alias(api_url_mailboxes, email_string, api_key) elif sys.argv[1] == "-search_dest" and len(sys.argv) == 4: email_string = sys.argv[3] print("\nRecherche de '" + email_string + "' dans les adresses de destination du domaine '" + domain + "'...") tuple_head_redir = lister_adresses_redir (api_url_redir, api_key) rechercher_redir(tuple_head_redir[1], domain, email_string, "destinations") else: affiche_usage() print()