Exemple #1
0
    def render_PUT(self, request):
        result = WebdavResource.render_PUT(self, request)
        if result is not None and result.has_key(request.path) and \
        request.env['CONTENT_TYPE'].strip().find('text/calendar') == 0:
            user=request.env.get('user')
            stream = self.storageProvider.get(request.path, user=user)
            try:
                event = vobject.readOne(stream)
                self.calendarProvider.store(request.path, event, user=user)

                # generate the etag data and add it to the document.
                stream.seek(0)
                md5Sum = getMD5(stream)
                md5Sum.update(request.path)
                etag = md5Sum.hexdigest()

                request.setHeader("ETag", "%s" % etag)

                self.storageProvider.setMeta(request.path,
                                        {'{DAV:}getetag': "%s" % etag,
                                         '{DAV:}getcontenttype': 'text/calendar'
                                        },
                                        user=user
                                 )
            except Exception as ex:
                logging.getLogger().warn('Not a calendar object. Got error: %s' % ex)
            finally:
                stream.close()
        return result
Exemple #2
0
 def render_GET(self, request):
     result = WebdavResource.render_GET(self, request)
     user = request.env.get('user')
     if not self.storageProvider.isCollection(request.path, user=user) and \
     self.calendarProvider.isCalendar(request.path, user=user):
         request.setHeader('Content-Type','text/calendar; charset=utf-8')
     return result
Exemple #3
0
    def render_PUT(self, request):
        result = WebdavResource.render_PUT(self, request)
        if result is not None and result.has_key(request.path):
            user = request.env.get('user')
            stream = self.storageProvider.get(request.path, user=user)
            md5Sum = getMD5(stream)
            md5Sum.update(request.path)
            etag = md5Sum.hexdigest()

            request.setHeader("ETag", "%s" % etag)

            self.storageProvider.setMeta(request.path,
                                        {'{DAV:}getetag': "%s" % etag},
                                        user=user
                                 )
            stream.seek(0)
            event = vobject.readOne(stream)
            self.contactProvider.store(request.path, event)
        return result
Exemple #4
0
 def render_OPTIONS(self, request):
     WebdavResource.render_OPTIONS(self, request)
     request.setHeader('DAV', '1, 2, access-control, addressbook')
     request.setHeader('Allow', 'REPORT, ACL')
Exemple #5
0
 def __init__(self, *args, **kwargs):
     """
     @param contactProvider 
     """
     self.contactProvider = kwargs.pop('contactProvider')
     WebdavResource.__init__(self, *args, **kwargs)
Exemple #6
0
 def render_OPTIONS(self, request):
     WebdavResource.render_OPTIONS(self, request)
     request.setHeader('DAV', '1, 2, access-control, calendar-access')
Exemple #7
0
 def render_PROPFIND(self,request):
     request.env['HTTP_ACCEPT']='text/xml'
     if request.env.has_key('HTTP_X_REQUESTED_WITH'):
         del request.env['HTTP_X_REQUESTED_WITH']
     return WebdavResource.render_PROPFIND(self, request)
Exemple #8
0
 def __init__(self, *args, **kwargs):
     """
     @param calendarProvider 
     """
     self.calendarProvider = kwargs.pop('calendarProvider')
     WebdavResource.__init__(self, *args, **kwargs)