|
@@ -158,6 +158,7 @@ def send_mail(email, wgconfig_path):
|
|
|
server.login(email.username, email.passwd)
|
|
|
server.sendmail(email.from_addr, email.to_addr, msg.as_string())
|
|
|
server.quit()
|
|
|
+ print("[+] E-Mail envoyé à %s." % email.to_addr)
|
|
|
|
|
|
# Main Function
|
|
|
# =============
|
|
@@ -173,36 +174,57 @@ if __name__ == '__main__':
|
|
|
config = Config(cp)
|
|
|
(member_email, member_id) = check_env()
|
|
|
with tempfile.TemporaryDirectory() as temp_dir:
|
|
|
- print("[+] Génération des clés wireguard")
|
|
|
- (privkey_path, pubkey_path, psk_path) = gen_wg_keys(temp_dir)
|
|
|
- print("[+] Modification de la configuration wireguard")
|
|
|
- if not is_duplicate_entry_wg_conf(member_id, config_file):
|
|
|
- update_wg_config(member_id, config_file, pubkey_path, psk_path)
|
|
|
- else:
|
|
|
- print("Le membre {} semble déja avoir un compte VPN.".format(member_id))
|
|
|
- print("Veuillez contacter la liste de diffusion technique\
|
|
|
- si son compte necessite une ré-activation.")
|
|
|
- sys.exit(1)
|
|
|
- print("[+] Chargement de la nouvelle interface réseau")
|
|
|
- _run_cmd("systemctl restart %s" % (config.wg_service))
|
|
|
- print("[+] Envoi de la clé privée au nouveau membre")
|
|
|
- if use_email:
|
|
|
- with open(privkey_path, "r") as pkh:
|
|
|
- peer_privkey = pkh.read()
|
|
|
- with open(psk_path, "r") as pskh:
|
|
|
- peer_psk = pskh.read()
|
|
|
- email = Email(config.smtp_user, config.smtp_pass, config.smtp_from,\
|
|
|
- member_email, config.smtp_server)
|
|
|
- send_email(email, generate_wg_quick_client_config(peer_privkey, member_id, config.pubkey,\
|
|
|
- peer_psk, config.endpoint))
|
|
|
- else:
|
|
|
- print("Mode utilisateur avancé")
|
|
|
- print("=======================")
|
|
|
- print("À vous de vous débrouiller pour donner les clés/config à l'utilisateur")
|
|
|
- print("Clé privée: %s" % (privkey_path))
|
|
|
- print("Clé pré-partagée (psk): %s" % (psk_path))
|
|
|
- print("Clé publique (psk): %s" % (pubkey_path))
|
|
|
- input("Appuyez sur entrée pour continuer (les clés privées seront détruites): ")
|
|
|
- print("[+] Nettoyage des clés")
|
|
|
- _run_cmd("shred -u %s %s %s" % (privkey_path, pubkey_path, psk_path))
|
|
|
- print("[+] COMPTE CRÉE AVEC SUCCÈS")
|
|
|
+ try:
|
|
|
+ print("[+] Génération des clés wireguard")
|
|
|
+ (privkey_path, pubkey_path, psk_path) = gen_wg_keys(temp_dir)
|
|
|
+ print("[+] Envoi de la clé privée au nouveau membre")
|
|
|
+ print("Deux solutions ici:")
|
|
|
+ print("1- On envoie la configuration du nouveau membre en ligne. (automatique)")
|
|
|
+ print("2- On utilise une autre méthode pour passer la configuration au nouveau membre. (manuel)")
|
|
|
+ print("")
|
|
|
+ print("Suivant votre modèle de menace, envoyer la clé privée par e-mail peut ou peut ne pas être une bonne idée.")
|
|
|
+ use_email = input("Envoyer la configuration (contenant la clé privée) par email? (O/n)")
|
|
|
+ if use_email.strip().lower() == "o" :
|
|
|
+ with open(privkey_path, "r") as pkh:
|
|
|
+ peer_privkey = pkh.read()
|
|
|
+ with open(psk_path, "r") as pskh:
|
|
|
+ peer_psk = pskh.read()
|
|
|
+ email = Email(config.smtp_user, config.smtp_pass, config.smtp_from,\
|
|
|
+ member_email, config.smtp_server)
|
|
|
+ send_email(email, generate_wg_quick_client_config(peer_privkey, member_id, config.pubkey,\
|
|
|
+ peer_psk, config.endpoint))
|
|
|
+ else:
|
|
|
+ print("Mode utilisateur avancé")
|
|
|
+ print("=======================")
|
|
|
+ print("À vous de vous débrouiller pour passer les clés/config à l'utilisateur")
|
|
|
+ print("Clé privée: %s" % (privkey_path))
|
|
|
+ print("Clé pré-partagée (psk): %s" % (psk_path))
|
|
|
+ print("Clé publique (psk): %s" % (pubkey_path))
|
|
|
+ input("Appuyez sur entrée pour continuer (les clés privées seront détruites): ")
|
|
|
+ except Exception as e:
|
|
|
+ print("ERREUR: erreur lors de la génération/transfert de la clé:")
|
|
|
+ print(e)
|
|
|
+ print("Si vous ne comprenez pas le problème, transférez le message d'erreur complet à la liste\
|
|
|
+ de diffusion technique.")
|
|
|
+ print("Pas de panique: on n'a pas touché à la configuration du serveur de wireguard, \
|
|
|
+ rien n'a cassé.")
|
|
|
+ try:
|
|
|
+ print("[+] Modification de la configuration wireguard")
|
|
|
+ if not is_duplicate_entry_wg_conf(member_id, config_file):
|
|
|
+ update_wg_config(member_id, config_file, pubkey_path, psk_path)
|
|
|
+ else:
|
|
|
+ print("Le membre {} semble déja avoir un compte VPN.".format(member_id))
|
|
|
+ print("Veuillez contacter la liste de diffusion technique\
|
|
|
+ si son compte necessite une ré-activation.")
|
|
|
+ sys.exit(1)
|
|
|
+ print("[+] Chargement de la nouvelle interface réseau")
|
|
|
+ _run_cmd("systemctl restart %s" % (config.wg_service))
|
|
|
+ print("[+] Nettoyage des clés")
|
|
|
+ _run_cmd("shred -u %s %s %s" % (privkey_path, pubkey_path, psk_path))
|
|
|
+ print("[+] COMPTE CRÉE AVEC SUCCÈS")
|
|
|
+ except Exception as e:
|
|
|
+ print("ERREUR CRITIQUE: attention, la configuration wireguard est cassée, il y a probablement urgence.")
|
|
|
+ print(e)
|
|
|
+ print("Si vous ne savez pas quoi faire pour régler le problème, contactez en urgence la\
|
|
|
+ liste de diffusion technique en joignant le message d'erreur ci-dessus.")
|
|
|
+ print("Je le répète: le serveur VPN est probablement cassé, c'est une urgence.")
|