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

« back to all changes in this revision

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

Added printing of full traceback when an error is caught.

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
35
34
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
 
    @named_operation
 
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')
41
47
    def start(self, req, cwd=''):
42
48
        working_dir = os.path.join("/home", req.user.login, cwd)
43
49
 
44
50
        uid = req.user.unixid
45
51
 
46
52
        # Start the server
47
 
        jail_path = os.path.join(ivle.conf.jail_base, req.user.login)
 
53
        jail_path = os.path.join(req.config['paths']['jails']['mounts'],
 
54
                                 req.user.login)
48
55
        cons = ivle.console.Console(uid, jail_path, working_dir)
49
56
 
50
57
        # Assemble the key and return it. Yes, it is double-encoded.
52
59
                                     "port": cons.port,
53
60
                                     "magic": cons.magic}).encode('hex')}
54
61
 
55
 
    @named_operation
 
62
    @named_operation('use')
56
63
    def chat(self, req, key, text='', kind="chat"):
57
64
        # The request *should* have the following four fields:
58
65
        # key: Hex JSON dict of host and port where the console server lives,
69
76
        except KeyError:
70
77
            raise BadRequest("Invalid console key.")
71
78
 
72
 
        jail_path = os.path.join(ivle.conf.jail_base, req.user.login)
 
79
        jail_path = os.path.join(req.config['paths']['jails']['mounts'],
 
80
                                 req.user.login)
73
81
        working_dir = os.path.join("/home", req.user.login)   # Within jail
74
82
        uid = req.user.unixid
75
83