118 lines
4.5 KiB
Python
Executable file
118 lines
4.5 KiB
Python
Executable file
#! /usr/bin/env python
|
|
# -*- coding: iso-8859-15 -*-
|
|
|
|
# Script de création de compte sur le wiki
|
|
# Auteur : Stéphane Glondu
|
|
# Licence : GPLv2
|
|
|
|
import sys, os, httplib, urllib, locale
|
|
from getpass import getpass
|
|
from smtplib import SMTP
|
|
from email.MIMEBase import MIMEBase
|
|
from email.MIMEText import MIMEText
|
|
from email.MIMEMultipart import MIMEMultipart
|
|
from email.Encoders import encode_7or8bit
|
|
|
|
sys.path.append("/usr/scripts/gestion")
|
|
from affich_tools import coul, prompt, cprint
|
|
from user_tests import getuser
|
|
|
|
bugmail = ["root@crans.org"]
|
|
bugreport = u"""
|
|
Nom d'utilisateur : %(name)s
|
|
Adresse e-mail : %(email)s
|
|
"""
|
|
|
|
# C'est l'encodage du wiki et des bugreports
|
|
encoding = "utf-8"
|
|
|
|
# Utilisateur qui lance le script
|
|
user = getuser()
|
|
|
|
def send(msg):
|
|
msg['From'] = '%s@crans.org' % user
|
|
msg['To'] = ','.join(bugmail)
|
|
msg['User-Agent'] = 'creer_compte_wiki.py'
|
|
smtp = SMTP()
|
|
smtp.connect()
|
|
smtp.sendmail('%s@crans.org' % user, bugmail, msg.as_string())
|
|
smtp.quit()
|
|
|
|
def creer_compte(nom, mdp, email):
|
|
form = {'action': 'newaccount',
|
|
'name': nom.encode(encoding),
|
|
'password1': mdp,
|
|
'password2': mdp,
|
|
'email': email.encode(encoding),
|
|
'create_only': 'Create+Profile'}
|
|
params = urllib.urlencode(form)
|
|
headers = {"Content-type": "application/x-www-form-urlencoded",
|
|
"Accept": "text/plain"}
|
|
conn = httplib.HTTPSConnection("wiki.crans.org")
|
|
conn.request("POST", "/UserPreferences", params, headers)
|
|
response = conn.getresponse()
|
|
data = response.read()
|
|
conn.close()
|
|
if 'User account created!' in data:
|
|
msg = MIMEText(bugreport.encode(encoding) % form, 'plain', encoding)
|
|
msg['Subject'] = "creer_compte_wiki.py: success"
|
|
send(msg)
|
|
return coul(u"Compte %s créé avec succès !" % nom, "vert")
|
|
elif 'This user name already belongs to somebody else.' in data:
|
|
return coul(u"Le compte %s existe déjà !" % nom, "rouge")
|
|
elif 'This email already belongs to somebody else.' in data:
|
|
return coul(u"L'adresse %s est déjà utilisée !" % email, "rouge")
|
|
elif 'Password not acceptable: Password too short.' in data:
|
|
return coul(u"Le mot de passe choisi est trop court", "rouge")
|
|
elif 'Invalid user name' in data or "Nom d'utilisateur invalide" in data:
|
|
msg = coul(u"Le nom d'utilisateur %s est invalide !" % nom, "rouge")
|
|
msg += u"""
|
|
Le nom d'utilisateur doit être un WikiNom, voir à ce sujet :
|
|
http://wiki.crans.org/NomWiki
|
|
Il peut contenir n'importe quel caractère alphanumérique, avec
|
|
éventuellement un espace facultatif entre chaque mot. Il peut aussi
|
|
contenir des accents, mais assurez-vous que votre terminal est
|
|
correctement configuré (en %s).""" % (locale.getdefaultlocale()[1])
|
|
return msg
|
|
else:
|
|
html = MIMEBase('text', 'html')
|
|
html.set_payload(data)
|
|
html.add_header('Content-Disposition', 'attachment', filename='response.html')
|
|
txt = MIMEText(bugreport.encode(encoding) % form, 'plain', encoding)
|
|
msg = MIMEMultipart()
|
|
msg['Subject'] = '[Bugreport] creer_compte_wiki.py: creer_compte'
|
|
msg.attach(txt)
|
|
msg.attach(html)
|
|
send(msg)
|
|
return coul(u"Erreur inconnue\n", "rouge") + \
|
|
u"Un rapport de bug a été automatiquement envoyé. Réessayez plus tard."
|
|
|
|
if __name__ == '__main__':
|
|
try:
|
|
nom = prompt("Nom d'utilisateur (utiliser un WikiNom) : ")
|
|
while True:
|
|
mdp = getpass(coul("Mot de passe (ne pas utiliser le même que pour zamok) : ", "gras"))
|
|
if getpass(coul("Confirmation du mot de passe : ", "gras")) == mdp:
|
|
break
|
|
else:
|
|
cprint(u"Les deux mots de passe sont différents, veuillez réessayer...", "jaune")
|
|
email = prompt("Adresse e-mail : ")
|
|
print creer_compte(nom, mdp, email)
|
|
|
|
except KeyboardInterrupt:
|
|
print "Interruption par l'utilisateur."
|
|
exit = 255
|
|
|
|
except SystemExit, c:
|
|
if c.__str__() == '254':
|
|
os.system('reset')
|
|
print "Votre session d'édition à été tuée."
|
|
exit = c
|
|
|
|
except:
|
|
import traceback
|
|
msg = MIMEText('\n'.join(traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback)).encode(encoding), 'plain', encoding)
|
|
msg['Subject'] = '[Bugreport] creer_compte_wiki.py: __main__'
|
|
send(msg)
|
|
print coul(u"Erreur inconnue\n", "rouge") + \
|
|
u"Un rapport de bug a été automatiquement envoyé. Réessayez plus tard."
|