10
# usrmgt-server <port> <magic>
12
# User management operations:
14
# - [Re]Create jail for a user
15
# - Create a svn repository for a user
19
# - Checkout repository as home directory
21
# - Disable a user's account
22
# - Enable a user's account
24
# - Rebuild svn config
25
# - Rebuild svn auth file
26
# - Rebuild passwd + push to nodes.
29
def create_user(props):
30
"""Create the database record for the given user.
32
username - used as a unix login name and svn repository name.
34
uid - the unix uid under which execution will take place
35
on the behalf of the user. Don't use 0! If not specified
36
or None, one will be allocated from the configured
39
password - the clear-text password for the user. If this property is
40
absent or None, this is an indication that external
41
authentication should be used (i.e. LDAP).
43
email - the user's email address.
45
nick - the display name to use.
47
fullname - The name of the user for results and/or other official
50
rolenm - The user's role. Must be one of "anyone", "student",
51
"tutor", "lecturer", "admin".
53
studentid - If supplied and not None, the student id of the user for
54
results and/or other official purposes.
56
Return Value: the uid associated with the user. INT
59
# FIXME: the IVLE server must check that an admin is doing this!
61
if 'uid' not in props or props['uid'] is None:
62
raise NotImplementedError, "No algorithm for creating uids yet!"
66
username = props['username']
69
password = props['password']
73
email = props['email']
77
fullname = props['fullname']
78
rolenm = props['rolenm']
80
studentid = props['studentid']
83
common.makeuser.make_user_db(username, uid, password, email, nick,
84
fullname, rolenm, studentid)
88
def activate_user(props):
89
"""Create the on-disk stuff for the given user.
90
Sets the state of the user in the db from pending to enabled.
92
login - the user name for the jail
97
login = props['login']
103
# FIXME: check we're pending
105
details = db.get_user(login)
107
# FIXME: make svn config/auth
111
common.makeuser.make_jail(login, details['unixid'])
113
db.update_user(login, state='enabled')
115
return {"response": "okay"}
121
'create_user':create_user,
122
'activate_user':activate_user
126
action = props.keys()[0]
127
return actions[action](props[action])
129
if __name__ == "__main__":
130
port = int(sys.argv[1])
133
common.chat.start_server(port, magic, False, dispatch)