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

« back to all changes in this revision

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

Port the forum app to the new framework. With it also comes new cookie
infrastructure.

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
 
32
32
import ivle.console
33
33
import ivle.chat
 
34
import ivle.conf
34
35
from ivle.webapp.base.rest import JSONRESTView, named_operation
35
 
from ivle.webapp.errors import BadRequest
36
36
 
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):
41
 
        if user is not None:
42
 
            return set(['use'])
43
 
        else:
44
 
            return set()
45
 
 
46
 
    @named_operation('use')
 
40
    @named_operation
47
41
    def start(self, req, cwd=''):
48
42
        working_dir = os.path.join("/home", req.user.login, cwd)
49
43
 
50
44
        uid = req.user.unixid
51
45
 
52
46
        # Start the server
53
 
        jail_path = os.path.join(req.config['paths']['jails']['mounts'],
54
 
                                 req.user.login)
 
47
        jail_path = os.path.join(ivle.conf.jail_base, req.user.login)
55
48
        cons = ivle.console.Console(uid, jail_path, working_dir)
56
49
 
57
50
        # Assemble the key and return it. Yes, it is double-encoded.
59
52
                                     "port": cons.port,
60
53
                                     "magic": cons.magic}).encode('hex')}
61
54
 
62
 
    @named_operation('use')
 
55
    @named_operation
63
56
    def chat(self, req, key, text='', kind="chat"):
64
57
        # The request *should* have the following four fields:
65
58
        # key: Hex JSON dict of host and port where the console server lives,
76
69
        except KeyError:
77
70
            raise BadRequest("Invalid console key.")
78
71
 
79
 
        jail_path = os.path.join(req.config['paths']['jails']['mounts'],
80
 
                                 req.user.login)
 
72
        jail_path = os.path.join(ivle.conf.jail_base, req.user.login)
81
73
        working_dir = os.path.join("/home", req.user.login)   # Within jail
82
74
        uid = req.user.unixid
83
75
 
84
 
        # XXX: JSONRESTView should do this for us.
85
 
        text = text.decode('utf-8')
86
 
 
87
76
        msg = {'cmd':kind, 'text':text}
88
77
        try:
89
78
            json_response = ivle.chat.chat(host, port, msg, magic,decode=False)