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

« back to all changes in this revision

Viewing changes to scripts/usrmgt-server

  • Committer: stevenbird
  • Date: 2008-02-19 21:17:21 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:512
Renaming of problems to exercises (initial commit).
Fix up module naming (exercises sometimes called tutorials).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
 
 
3
import sys
 
4
 
 
5
import common.db
 
6
import common.chat
 
7
import common.makeuser
 
8
 
 
9
# usage:
 
10
#   usrmgt-server <port> <magic>
 
11
 
 
12
# User management operations:
 
13
#   - Create local user
 
14
#   - [Re]Create jail for a user
 
15
#       - Create a svn repository for a user
 
16
#           - create repository
 
17
#           - svn config
 
18
#           - svn auth
 
19
#       - Checkout repository as home directory
 
20
#       - /etc/passwd entry
 
21
#   - Disable a user's account
 
22
#   - Enable a user's account
 
23
#   - Remove a user
 
24
#   - Rebuild svn config
 
25
#   - Rebuild svn auth file
 
26
#   - Rebuild passwd + push to nodes.
 
27
 
 
28
 
 
29
def create_user(props):
 
30
    """Create the database record for the given user.
 
31
       Expected properties:
 
32
        username    - used as a unix login name and svn repository name.
 
33
                      STRING REQUIRED 
 
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
 
37
                      numeric range.
 
38
                      INT OPTIONAL
 
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).
 
42
                      STRING OPTIONAL
 
43
        email       - the user's email address.
 
44
                      STRING OPTIONAL
 
45
        nick        - the display name to use.
 
46
                      STRING REQUIRED
 
47
        fullname    - The name of the user for results and/or other official
 
48
                      purposes.
 
49
                      STRING REQUIRED
 
50
        rolenm      - The user's role. Must be one of "anyone", "student",
 
51
                      "tutor", "lecturer", "admin".
 
52
                      STRING/ENUM REQUIRED
 
53
        studentid   - If supplied and not None, the student id of the user for
 
54
                      results and/or other official purposes.
 
55
                      STRING OPTIONAL
 
56
       Return Value: the uid associated with the user. INT
 
57
    """
 
58
 
 
59
    # FIXME: the IVLE server must check that an admin is doing this!
 
60
 
 
61
    if 'uid' not in props or props['uid'] is None:
 
62
        raise NotImplementedError, "No algorithm for creating uids yet!"
 
63
        # uid = invent-uid
 
64
        # props['uid'] = uid
 
65
 
 
66
    username = props['username']
 
67
    uid = props['uid']
 
68
    try:
 
69
        password = props['password']
 
70
    except KeyError:
 
71
        password = None
 
72
    try:
 
73
        email = props['email']
 
74
    except KeyError:
 
75
        email = None
 
76
    nick = props['nick']
 
77
    fullname = props['fullname']
 
78
    rolenm = props['rolenm']
 
79
    try:
 
80
        studentid = props['studentid']
 
81
    except KeyError:
 
82
        studentid = None
 
83
    common.makeuser.make_user_db(username, uid, password, email, nick,
 
84
                                 fullname, rolenm, studentid)
 
85
 
 
86
    return uid
 
87
 
 
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.
 
91
       Expected properties:
 
92
        login       - the user name for the jail
 
93
                      STRING REQUIRED
 
94
       Return Value: None
 
95
    """
 
96
 
 
97
    login = props['login']
 
98
 
 
99
    db = common.db.DB()
 
100
 
 
101
    try:
 
102
 
 
103
        # FIXME: check we're pending
 
104
 
 
105
        details = db.get_user(login)
 
106
 
 
107
        # FIXME: make svn config/auth
 
108
 
 
109
        # FIXME: etc, etc.
 
110
 
 
111
        common.makeuser.make_jail(login, details['unixid'])
 
112
 
 
113
        db.update_user(login, state='enabled')
 
114
 
 
115
        return {"response": "okay"}
 
116
 
 
117
    finally:
 
118
        db.close()
 
119
 
 
120
actions = {
 
121
        'create_user':create_user,
 
122
        'activate_user':activate_user
 
123
    }
 
124
 
 
125
def dispatch(props):
 
126
    action = props.keys()[0]
 
127
    return actions[action](props[action])
 
128
 
 
129
if __name__ == "__main__":
 
130
    port = int(sys.argv[1])
 
131
    magic = sys.argv[2]
 
132
 
 
133
    common.chat.start_server(port, magic, False, dispatch)