]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - useless/wikoeur_accounts.py
[solde_date] proprification, importable
[scripts-20-100.git] / useless / wikoeur_accounts.py
1 #!/usr/bin/env python
2 # -*- encoding: utf-8 -*-
3
4 """ Script pour créer des comptes sur le wikoeur
5 Attention, la commande "moin account create" ne marchant pas, ça va etre sale.
6
7 Nan mais en fait je l'utilise pas.
8 """
9
10 # Config
11 config_dir="/etc/moin/"
12 import sys
13 sys.path.insert(0, config_dir)
14 import wikiconfig
15
16 import hashlib
17 import base64
18 import random
19 import time
20
21 def random_string(size=20):
22 """Renvoie une chaîne aléatoire de taille size (pour générer un sel)"""
23 return "".join([chr(random.randrange(20,256)) for i in range(size)])
24
25 def hash_pass(password, salt=None):
26 """Renvoie un password hashé selon la politique de moinmoin"""
27 if salt==None:
28 salt=random_string(20)
29 return base64.b64encode(hashlib.sha1(password+salt).digest()+salt)
30
31 def check_filename(folder_path, filename):
32 """Vérifie si le fichier filename existe dans le dossier folder_path"""
33 try:
34 f=open(folder_path + filename)
35 except IOError as e:
36 if e.errno == 2:
37 return True
38 return False
39
40 class FailedCreateFile(Exception):
41 """Exception levée si on n'a pas réussi à créer le fichier."""
42 pass
43
44 def get_filename(folder_path):
45 """Renvoie le nom d'un fichier pour stocker le compte.
46 Seulement le nom, pas le path.
47 Vérifie qu'il n'est pas déjà pris.
48 N'essaie que 10 fois et en cas d'échec lève une erreur FailedCreateFile."""
49 success, tries = False, 0
50 while not success and tries<10:
51 filename = str(time.time())
52 if check_filename(folder_path, filename):
53 return filename
54 tries += 1
55 raise FailedCreateFile
56
57 account_template = """# Data saved '%(date)s' for id '%(ident)s'
58 aliasname=
59 bookmarks{}=
60 css_url=
61 date_fmt=
62 datetime_fmt=
63 disabled=0
64 edit_on_doubleclick=1
65 edit_rows=20
66 editor_default=text
67 editor_ui=freechoice
68 email=%(mail)s
69 email_subscribed_events[]=PageChangedEvent PageRenamedEvent PageDeletedEvent PageCopiedEvent PageRevertedEvent FileAttachedEvent
70 enc_password={SSHA}%(hashed_password)s
71 jabber_subscribed_events[]=
72 jid=
73 language=fr
74 last_saved=%(last_saved)s
75 mailto_author=0
76 name=%(name)s
77 quicklinks[]=
78 real_language=
79 recoverpass_key=
80 remember_last_visit=0
81 remember_me=1
82 show_comments=0
83 show_fancy_diff=1
84 show_nonexist_qm=0
85 show_page_trail=1
86 show_toolbar=1
87 show_topbottom=0
88 subscribed_pages[]=
89 theme_name=modernized
90 tz_offset=7200
91 wikiname_add_spaces=0"""
92
93 def save_account(folder_path, filename, mail, wikinom, password):
94 """Enregistre le fichier du compte."""
95 now = time.time()
96 d = {"date": time.strftime("%F %T", time.localtime(now)),
97 "ident": filename,
98 "mail": mail,
99 "last_saved": now,
100 "name": wikinom,
101 "hashed_password": hash_pass(password)
102 }
103 text = account_template % d
104 filename = get_filename(folder_path)
105 f = open(folder_path + filename, "w")
106 f.write(text)
107 f.close()
108
109 def parse_mail():
110 folder_path = wikiconfig.data_dir + "user/"
111 try:
112 filename= get_filename(folder_path)
113 except FailedCreateFile:
114 print "Impossible de créer un fichier dans %s !" % (folder_path)
115 save_account(folder_path, filename, mail, wikinom, password)