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

« back to all changes in this revision

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

  • Committer: David Coles
  • Date: 2010-07-17 11:32:50 UTC
  • Revision ID: coles.david@gmail.com-20100717113250-vi18n50bcjmfmzrt
Show warning for CGI header field-names which contain restricted characters.

Forbidden characters are the separators defined by RFC3875. This is mainly to 
fix an issue where printing a dictionary (with no CGI headers) could be 
assumed to be a CGI header with no warnings.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import os
27
27
import socket
28
28
 
29
 
try:
30
 
    import json
31
 
except ImportError:
32
 
    import simplejson as json
33
 
 
 
29
import cjson
34
30
import errno
35
31
 
36
32
import ivle.console
58
54
                working_dir)
59
55
 
60
56
        # Assemble the key and return it. Yes, it is double-encoded.
61
 
        return {'key': json.dumps({"host": cons.host,
62
 
                                   "port": cons.port,
63
 
                                   "magic": cons.magic}).encode('hex')}
 
57
        return {'key': cjson.encode({"host": cons.host,
 
58
                                     "port": cons.port,
 
59
                                     "magic": cons.magic}).encode('hex')}
64
60
 
65
61
    @write_operation('use')
66
62
    def chat(self, req, key, text='', cwd='', kind="chat"):
72
68
        # It simply acts as a proxy to the console server
73
69
 
74
70
        try:
75
 
            keydict = json.loads(key.decode('hex'))
 
71
            keydict = cjson.decode(key.decode('hex'))
76
72
            host = keydict['host']
77
73
            port = keydict['port']
78
74
            magic = keydict['magic']
92
88
            try:
93
89
                json_response = ivle.chat.chat(host, port, msg, magic,decode=False)
94
90
                # Snoop the response from python-console to check that it's valid
95
 
                response = json.loads(json_response)
96
 
            except (ValueError, ivle.chat.ProtocolError):
 
91
                response = cjson.decode(json_response)
 
92
            except (cjson.DecodeError, ivle.chat.ProtocolError):
97
93
                # Could not decode the reply from the python-console server
98
94
                response = {"terminate":
99
95
                    "Communication lost"}
126
122
    cons = ivle.console.Console(config, user, jail_path, working_dir)
127
123
 
128
124
    # Make a JSON object to tell the browser to restart its console client
129
 
    new_key = json.dumps(
 
125
    new_key = cjson.encode(
130
126
        {"host": cons.host, "port": cons.port, "magic": cons.magic})
131
127
 
132
128
    return {"restart": reason, "key": new_key.encode("hex")}