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

« back to all changes in this revision

Viewing changes to scripts/usrmgt-server

  • Committer: Matt Giuca
  • Date: 2010-03-05 06:40:59 UTC
  • Revision ID: matt.giuca@gmail.com-20100305064059-wc6jsup5v66lo1o4
Added an entry on the user settings page to display the user's Subversion password. This was previously only possible through an arcane console command. Updated documentation. This fixes Launchpad bug #528450.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
 
3
 
import os
4
 
import sys
5
 
import logging
6
 
 
7
 
import conf
8
 
import common.db
9
 
import common.chat
10
 
import common.makeuser
11
 
import common.studpath
12
 
 
13
 
# usage:
14
 
#   usrmgt-server <port> <magic>
15
 
 
16
 
# User management operations:
17
 
#   - Create local user
18
 
#   - [Re]Create jail for a user
19
 
#       - Create a svn repository for a user
20
 
#           - create repository
21
 
#           - svn config
22
 
#           - svn auth
23
 
#       - /etc/passwd entry
24
 
#   - Disable a user's account
25
 
#   - Enable a user's account
26
 
#   - Remove a user
27
 
#   - Rebuild svn config
28
 
#   - Rebuild svn auth file
29
 
#   - Rebuild passwd + push to nodes.
30
 
 
31
 
def activate_user(props):
32
 
    """Create the on-disk stuff for the given user.
33
 
       Sets the state of the user in the db from pending to enabled.
34
 
       Expected properties:
35
 
        login       - the user name for the jail
36
 
                      STRING REQUIRED
37
 
       Return Value: None
38
 
    """
39
 
 
40
 
    os.umask(0022) # Bad, but start_server sets it worse.
41
 
 
42
 
    login = props['login']
43
 
 
44
 
    db = common.db.DB()
45
 
 
46
 
    try:
47
 
 
48
 
        # FIXME: check we're pending
49
 
 
50
 
        details = db.get_user(login)
51
 
 
52
 
        # make svn config/auth
53
 
 
54
 
        repopath = os.path.join(conf.svn_repo_path, 'users', login)
55
 
        logging.debug("Creating user's Subversion repository")
56
 
        common.makeuser.make_svn_repo(repopath, throw_on_error=False)
57
 
 
58
 
        logging.debug("Rebuilding Subversion authorization config")
59
 
        try:
60
 
            common.makeuser.rebuild_svn_config()
61
 
        except:
62
 
            logging.warning('Rebuild of Subversion authorization config failed!')
63
 
 
64
 
        logging.debug("Adding Subversion authentication")
65
 
        passwd = common.makeuser.make_svn_auth(login, throw_on_error=False)
66
 
        logging.debug("passwd: %s" % passwd)
67
 
 
68
 
        logging.debug("Creating jail")
69
 
        common.makeuser.make_jail(login, details.unixid, svn_pass=passwd)
70
 
 
71
 
        logging.info("Enabling user")
72
 
        db.update_user(login, state='enabled')
73
 
 
74
 
        return {"response": "okay"}
75
 
 
76
 
    finally:
77
 
        db.close()
78
 
 
79
 
actions = {
80
 
        'activate_user':activate_user,
81
 
    }
82
 
 
83
 
def initializer():
84
 
    try:
85
 
        pidfile = open('/var/run/usrmgt-server.pid', 'w')
86
 
        pidfile.write('%d\n' % os.getpid())
87
 
        pidfile.close()
88
 
    except IOError, (errno, strerror):
89
 
        print "Couldn't write PID file. IO error(%s): %s" % (errno, strerror)
90
 
        sys.exit(1)
91
 
 
92
 
def dispatch(props):
93
 
    logging.debug(repr(props))
94
 
    action = props.keys()[0]
95
 
    return actions[action](props[action])
96
 
 
97
 
if __name__ == "__main__":
98
 
    if len(sys.argv) <3:
99
 
        print >>sys.stderr, "Usage: usrmgt-server <port> <magic>"
100
 
        sys.exit(1)
101
 
    port = int(sys.argv[1])
102
 
    magic = sys.argv[2]
103
 
 
104
 
    pid = os.getpid()
105
 
 
106
 
    logging.basicConfig(filename="/var/log/usrmgt.log", level=logging.INFO)
107
 
    logging.info("Starting usrmgt server on port %d (pid = %d)" % (port, pid))
108
 
 
109
 
    common.chat.start_server(port, magic, True, dispatch, initializer)