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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# IVLE
# Copyright (C) 2007-2009 The University of Melbourne
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

# Author: Matt Giuca, Will Grant

'''Service for accessing a jail's filesystem.

This application is a wrapper around the library module fileservice, running
it through trampoline.

It receives file handling instructions as requests, performs actions on the
student's workspace, and returns directory listings in JSON.

See the documentation in ivle.fileservice_lib for details.
'''

import os.path

import ivle.interpret
from ivle.webapp.base.views import BaseView
from ivle.webapp.base.plugins import ViewPlugin

# XXX: Writes to req directly. This is a direct port of the legacy version.
#      This needs to be rewritten soon.

class FileserviceView(BaseView):
    def __init__(self, req, path):
        # XXX: Still depends on req.path internally.
        self.path = path

    def authorize(self, req):
        return req.user is not None

    def render(self, req):
        """Handler for the File Services application."""
        if len(self.path) == 0:
            # If no path specified, default to the user's home directory
            req.throw_redirect(req.make_path(os.path.join('fileservice',
                                                          req.user.login)))

        interp_object = ivle.interpret.interpreter_objects["cgi-python"]
        user_jail_dir = os.path.join(req.config['paths']['jails']['mounts'],
                                     req.user.login)

        ivle.interpret.interpret_file(req, req.user, user_jail_dir,
                                  os.path.join(req.config['paths']['share'],
                                               'services/fileservice'),
                                  interp_object, gentle=False)

class Plugin(ViewPlugin):
    urls = [
        ('fileservice/*path', FileserviceView),
        ('fileservice', FileserviceView, {'path': ''}),
    ]