--- /dev/null
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+""" Script pour créer des comptes sur le wikoeur
+ Attention, la commande "moin account create" ne marchant pas, ça va etre sale.
+
+ Nan mais en fait je l'utilise pas.
+"""
+
+# Config
+config_dir="/etc/moin/"
+import sys
+sys.path.insert(0, config_dir)
+import wikiconfig
+
+import hashlib
+import base64
+import random
+import time
+
+def random_string(size=20):
+ """Renvoie une chaîne aléatoire de taille size (pour générer un sel)"""
+ return "".join([chr(random.randrange(20,256)) for i in range(size)])
+
+def hash_pass(password, salt=None):
+ """Renvoie un password hashé selon la politique de moinmoin"""
+ if salt==None:
+ salt=random_string(20)
+ return base64.b64encode(hashlib.sha1(password+salt).digest()+salt)
+
+def check_filename(folder_path, filename):
+ """Vérifie si le fichier filename existe dans le dossier folder_path"""
+ try:
+ f=open(folder_path + filename)
+ except IOError as e:
+ if e.errno == 2:
+ return True
+ return False
+
+class FailedCreateFile(Exception):
+ """Exception levée si on n'a pas réussi à créer le fichier."""
+ pass
+
+def get_filename(folder_path):
+ """Renvoie le nom d'un fichier pour stocker le compte.
+ Seulement le nom, pas le path.
+ Vérifie qu'il n'est pas déjà pris.
+ N'essaie que 10 fois et en cas d'échec lève une erreur FailedCreateFile."""
+ success, tries = False, 0
+ while not success and tries<10:
+ filename = str(time.time())
+ if check_filename(folder_path, filename):
+ return filename
+ tries += 1
+ raise FailedCreateFile
+
+account_template = """# Data saved '%(date)s' for id '%(ident)s'
+aliasname=
+bookmarks{}=
+css_url=
+date_fmt=
+datetime_fmt=
+disabled=0
+edit_on_doubleclick=1
+edit_rows=20
+editor_default=text
+editor_ui=freechoice
+email=%(mail)s
+email_subscribed_events[]=PageChangedEvent PageRenamedEvent PageDeletedEvent PageCopiedEvent PageRevertedEvent FileAttachedEvent
+enc_password={SSHA}%(hashed_password)s
+jabber_subscribed_events[]=
+jid=
+language=fr
+last_saved=%(last_saved)s
+mailto_author=0
+name=%(name)s
+quicklinks[]=
+real_language=
+recoverpass_key=
+remember_last_visit=0
+remember_me=1
+show_comments=0
+show_fancy_diff=1
+show_nonexist_qm=0
+show_page_trail=1
+show_toolbar=1
+show_topbottom=0
+subscribed_pages[]=
+theme_name=modernized
+tz_offset=7200
+wikiname_add_spaces=0"""
+
+def save_account(folder_path, filename, mail, wikinom, password):
+ """Enregistre le fichier du compte."""
+ now = time.time()
+ d = {"date": time.strftime("%F %T", time.localtime(now)),
+ "ident": filename,
+ "mail": mail,
+ "last_saved": now,
+ "name": wikinom,
+ "hashed_password": hash_pass(password)
+ }
+ text = account_template % d
+ filename = get_filename(folder_path)
+ f = open(folder_path + filename, "w")
+ f.write(text)
+ f.close()
+
+def parse_mail():
+ folder_path = wikiconfig.data_dir + "user/"
+ try:
+ filename= get_filename(folder_path)
+ except FailedCreateFile:
+ print "Impossible de créer un fichier dans %s !" % (folder_path)
+ save_account(folder_path, filename, mail, wikinom, password)