~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to lib/common/makeuser.py

  • Committer: mattgiuca
  • Date: 2008-02-19 06:10:53 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:503
user.py: Added acct_expired and pass_expired methods.
login.py: Removed has_expired function (now we put it inside the class)
    and called those methods instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
# TODO: When creating a new home directory, chown it to its owner
33
33
 
 
34
import md5
34
35
import os
35
36
import stat
36
37
import shutil
 
38
import time
 
39
import uuid
37
40
import warnings
38
41
 
39
42
import conf
40
43
import db
41
44
 
 
45
def make_svn_repo(login):
 
46
    """Create a repository for the given user.
 
47
    """
 
48
    path = os.path.join(conf.svn_repo_path, login)
 
49
    res = os.system("svnadmin create '%s'" % path)
 
50
    if res != 0:
 
51
        raise Exception("Cannot create repository for %s" % login)
 
52
 
 
53
def rebuild_svn_config():
 
54
    """Build the complete SVN configuration file.
 
55
    """
 
56
    conn = db.DB()
 
57
    res = conn.query("SELECT login, rolenm FROM login;").dictresult()
 
58
    groups = {}
 
59
    for r in res:
 
60
        role = r['rolenm']
 
61
        if role not in groups:
 
62
            groups[role] = []
 
63
        groups[role].append(r['login'])
 
64
    f = open(conf.svn_conf + ".new", "w")
 
65
    f.write("# IVLE SVN Repositories Configuration\n")
 
66
    f.write("# Auto-generated on %s\n" % time.asctime())
 
67
    f.write("\n")
 
68
    f.write("[groups]\n")
 
69
    for (g,ls) in groups.iteritems():
 
70
        f.write("%s = %s\n" % (g, ",".join(ls)))
 
71
    f.write("\n")
 
72
    for r in res:
 
73
        login = r['login']
 
74
        f.write("[%s:/]\n" % login)
 
75
        f.write("%s = rw\n" % login)
 
76
        f.write("@tutor = r\n")
 
77
        f.write("@lecturer = rw\n")
 
78
        f.write("@admin = rw\n")
 
79
        f.write("\n")
 
80
    f.close()
 
81
    os.rename(conf.svn_conf + ".new", conf.svn_conf)
 
82
 
 
83
def make_svn_config(login):
 
84
    """Add an entry to the apache-svn config file for the given user.
 
85
       Assumes the given user is either a guest or a student.
 
86
    """
 
87
    f = open(conf.svn_conf, "a")
 
88
    f.write("[%s:/]\n" % login)
 
89
    f.write("%s = rw\n" % login)
 
90
    f.write("@tutor = r\n")
 
91
    f.write("@lecturer = rw\n")
 
92
    f.write("@admin = rw\n")
 
93
    f.write("\n")
 
94
    f.close()
 
95
 
 
96
def make_svn_auth(login):
 
97
    """Setup svn authentication for the given user.
 
98
       FIXME: create local.auth entry
 
99
    """
 
100
    passwd = md5.new(uuid.uuid4().bytes).digest().encode('hex')
 
101
    if os.path.exists(conf.svn_auth_ivle):
 
102
        create = ""
 
103
    else:
 
104
        create = "c"
 
105
 
 
106
    db.DB().update_user({'svn_pass':passwd})
 
107
 
 
108
    res = os.system("htpasswd -%smb %s %s" % (create,
 
109
                                              conf.svn_auth_ivle,
 
110
                                              login, passwd))
 
111
    if res != 0:
 
112
        raise Exception("Unable to create ivle-auth for %s" % login)
 
113
 
42
114
def make_jail(username, uid, force=True):
43
115
    """Creates a new user's jail space, in the jail directory as configured in
44
116
    conf.py.
165
237
    if errors:
166
238
        raise Exception, errors
167
239
 
168
 
def make_user_db(login, uid, password, nick, fullname, rolenm, studentid,
169
 
    force=True):
 
240
def make_user_db(**kwargs):
170
241
    """Creates a user's entry in the database, filling in all the fields.
171
 
    If force is False, throws an exception if the user already exists.
172
 
    If True, overwrites the user's entry in the DB.
 
242
    All arguments must be keyword args. They are the fields in the table.
 
243
    However, instead of supplying a "passhash", you must supply a
 
244
    "password" argument, which will be hashed internally.
 
245
    Also do not supply a state. All users are created in the "no_agreement"
 
246
    state.
 
247
    Throws an exception if the user already exists.
173
248
    """
174
249
    dbconn = db.DB()
175
 
    if force:
176
 
        # Delete user if it exists
177
 
        try:
178
 
            dbconn.delete_user(login)
179
 
        except:
180
 
            pass
181
 
    dbconn.create_user(login, uid, password, nick, fullname, rolenm, studentid)
 
250
    dbconn.create_user(**kwargs)
182
251
    dbconn.close()