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

« back to all changes in this revision

Viewing changes to ivle/database.py

  • Committer: Matt Giuca
  • Date: 2010-02-18 09:18:15 UTC
  • Revision ID: matt.giuca@gmail.com-20100218091815-t5r1k9g8luwybvu3
serveservice and serve: Fixed download of non-ASCII-named files, by decoding filenames in serveservice (so they aren't mangled by JSON) and re-encoding them in the response headers (as you can't put unicode strings in the HTTP response). This is, as far as I can tell, the last outstanding non-ASCII filenames bug in IVLE, so I am closing bug #523500. Hooray.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
import hashlib
27
27
import datetime
28
 
import os
29
28
 
30
29
from storm.locals import create_database, Store, Int, Unicode, DateTime, \
31
30
                         Reference, ReferenceSet, Bool, Storm, Desc
608
607
 
609
608
        a = Assessed.get(Store.of(self), principal, self)
610
609
        ps = ProjectSubmission()
611
 
        # Raise SubmissionError if the path is illegal
612
 
        ps.path = ProjectSubmission.test_and_normalise_path(path)
 
610
        ps.path = path
613
611
        ps.revision = revision
614
612
        ps.date_submitted = datetime.datetime.now()
615
613
        ps.assessed = a
815
813
    approver = Reference(approver_id, User.id)
816
814
    notes = Unicode()
817
815
 
818
 
class SubmissionError(Exception):
819
 
    """Denotes a validation error during submission."""
820
 
    pass
821
 
 
822
816
class ProjectSubmission(Storm):
823
817
    """A submission from a user or group repository to a particular project.
824
818
 
854
848
        return "/files/%s/%s/%s?r=%d" % (user.login,
855
849
            self.assessed.checkout_location, submitpath, self.revision)
856
850
 
857
 
    @staticmethod
858
 
    def test_and_normalise_path(path):
859
 
        """Test that path is valid, and normalise it. This prevents possible
860
 
        injections using malicious paths.
861
 
        Returns the updated path, if successful.
862
 
        Raises SubmissionError if invalid.
863
 
        """
864
 
        # Ensure the path is absolute to prevent being tacked onto working
865
 
        # directories.
866
 
        # Prevent '\n' because it will break all sorts of things.
867
 
        # Prevent '[' and ']' because they can be used to inject into the
868
 
        # svn.conf.
869
 
        # Normalise to avoid resulting in ".." path segments.
870
 
        if not os.path.isabs(path):
871
 
            raise SubmissionError("Path is not absolute")
872
 
        if any(c in path for c in "\n[]"):
873
 
            raise SubmissionError("Path must not contain '\\n', '[' or ']'")
874
 
        return os.path.normpath(path)
875
 
 
876
851
# WORKSHEETS AND EXERCISES #
877
852
 
878
853
class Exercise(Storm):