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

« back to all changes in this revision

Viewing changes to ivle/webapp/console/service.py

  • Committer: William Grant
  • Date: 2009-06-24 10:47:04 UTC
  • Revision ID: grantw@unimelb.edu.au-20090624104704-614jru0retkt5h5q
Kill Request.unmake_path.

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
# XXX: Should be RPC view, with actions in URL?
38
38
class ConsoleServiceRESTView(JSONRESTView):
39
39
    '''An RPC interface to a Python console.'''
40
 
    def get_permissions(self, user, config):
 
40
    def get_permissions(self, user):
41
41
        if user is not None:
42
42
            return set(['use'])
43
43
        else:
60
60
                                     "magic": cons.magic}).encode('hex')}
61
61
 
62
62
    @named_operation('use')
63
 
    def chat(self, req, key, text='', cwd='', kind="chat"):
 
63
    def chat(self, req, key, text='', kind="chat"):
64
64
        # The request *should* have the following four fields:
65
65
        # key: Hex JSON dict of host and port where the console server lives,
66
66
        # and the secret to use to digitally sign the communication with the
78
78
 
79
79
        jail_path = os.path.join(req.config['paths']['jails']['mounts'],
80
80
                                 req.user.login)
81
 
        # Within Jail
82
 
        working_dir = os.path.join("/home", req.user.login, cwd)
 
81
        working_dir = os.path.join("/home", req.user.login)   # Within jail
83
82
        uid = req.user.unixid
84
83
 
85
84
        # XXX: JSONRESTView should do this for us.
87
86
 
88
87
        msg = {'cmd':kind, 'text':text}
89
88
        try:
 
89
            json_response = ivle.chat.chat(host, port, msg, magic,decode=False)
 
90
 
 
91
            # Snoop the response from python-console to check that it's valid
90
92
            try:
91
 
                json_response = ivle.chat.chat(host, port, msg, magic,decode=False)
92
 
                # Snoop the response from python-console to check that it's valid
93
93
                response = cjson.decode(json_response)
94
 
            except (cjson.DecodeError, ivle.chat.ProtocolError):
 
94
            except cjson.DecodeError:
95
95
                # Could not decode the reply from the python-console server
96
96
                response = {"terminate":
97
 
                    "Communication lost"}
 
97
                    "Communication to console process lost"}
98
98
            if "terminate" in response:
99
99
                response = restart_console(req.config, uid, jail_path,
100
100
                    working_dir, response["terminate"])
103
103
                # Timeout: Restart the session
104
104
                response = restart_console(req.config, uid, jail_path,
105
105
                    working_dir,
106
 
                    "Timed out due to inactivity")
 
106
                    "The IVLE console has timed out due to inactivity")
107
107
            elif enumber == errno.ECONNRESET:
108
108
                # Communication issue: Restart the session
109
109
                response = restart_console(req.config, uid, jail_path,
110
110
                    working_dir,
111
 
                    "Connection reset")
 
111
                    "Connection with the console has been reset")
112
112
            else:
113
113
                # Some other error - probably serious
114
114
                raise socket.error, (enumber, estring)