Improve data and icon file handling
[quassel.git] / scripts / manageusers.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 #
4 # Requires at least python version 2.5
5
6 """Usage:
7     manageusers.py (add|changepass) <username> <password>
8     manageusers.py list"""
9
10 import os
11 import sha
12 import sys
13 from pprint import pprint
14
15 try:
16     import sqlite3
17 except ImportError:
18     print >> sys.stderr, "ERROR: sqlite3 module not available!"
19     print >> sys.stderr, "This script needs sqlite3 support which is part of Python 2.5"
20     print >> sys.stderr, "You probably need to upgrade your Python installation first."
21     sys.exit(3)
22
23 class UserManager(object):
24     def __init__(self):
25         self.db = sqlite3.connect(os.environ['HOME'] + '/.quassel/quassel-storage.sqlite')
26         self.cursor = self.db.cursor()
27
28     def __del__(self):
29         self.db.commit()
30         self.db.close();
31
32     def _shaCrypt(self, password):
33         return sha.new(password).hexdigest()
34
35     def add(self, username, password):
36         self.cursor.execute('INSERT INTO quasseluser (username, password) VALUES (:username, :password)',
37             {'username':username, 'password':self._shaCrypt(password)}).fetchone()
38
39     def changepass(self, username, password):
40         self.cursor.execute('UPDATE quasseluser SET password = :password WHERE username = :username',
41             {'username':username, 'password':self._shaCrypt(password)}).fetchone()
42
43     def list(self):
44         return self.cursor.execute("SELECT * FROM quasseluser").fetchall()
45
46     def callByName(self, name, *args, **kws):
47         return self.__getattribute__(name)(*args, **kws)
48
49 def main():
50     usermanager = UserManager()
51
52     try:
53         action = sys.argv[1].lower()
54     except:
55         print(__doc__)
56         return
57
58     if action == 'list':
59         pprint(usermanager.list())
60     elif action in ['add', 'changepass'] and len(sys.argv) > 3:
61         usermanager.callByName(action, sys.argv[2], sys.argv[3])
62     else:
63         print("ERROR: Wrong arguments supplied.")
64         print(__doc__)
65
66 if __name__ == "__main__":
67     main()