Example #1
0
 def navigateToURL(self, dimdimID, roomID, sessionID, encodedURL):
     
     # navigateToURL is called only from within a page.
     # so this is always for the 'current' resourceID
         
     originalURL = urllib.unquote(encodedURL)
     page = self.stateEngine.getCurrentPage(dimdimID)
     currentBaseURL = self.baseURL(page.get('url'))
     baseURL = self.baseURL(originalURL)
     
     if string.find(originalURL, osconfig.serverURL()) >= 0:
         # some pages don't have base injected (e.g. youtube)
         # these pages might give out relative links which
         # assume osconfig.serverURL() as the base URL.
         originalURL = string.lstrip(originalURL, osconfig.serverURL())
     
     # it is possible that originalURL isn't an absolute link
     if string.find(originalURL, 'http://') != 0:
         # the only way originalURL isn't an absolute link is if
         # it belongs to the existing server. so we can
         # safely set baseURL to existing currentBaseURL
         baseURL = currentBaseURL
         originalURL = urlparse.urljoin(baseURL, originalURL)
         encodedURL = urllib.quote(originalURL)
     
     meeting = self.stateEngine.getMeeting(dimdimID)
     resourceID = meeting.get('currentResource')
     resource = self.stateEngine.getCurrentResource(dimdimID)
     lastPageNum = resource.get('lastPage')
     currentPageNum = resource.get('currentPage')
     if (currentPageNum != lastPageNum):
         self.stateEngine.trimResourceToCurrentPage(dimdimID)
         
     resourceType = self.stateEngine.getResourceType(dimdimID, resourceID)
     currentPageNum = currentPageNum + 1
     
     # just create the page and return its location
     
     resourcePath = os.path.join(os.path.join(os.path.join(osconfig.cobArchive(), dimdimID), resourceType), resourceID)
     pagePath = os.path.join(resourcePath, str(currentPageNum))
     presenterPagePath = os.path.join(pagePath, 'presenter')
     attendeePagePath = os.path.join(pagePath, 'attendee')
     
     if not os.path.isdir(presenterPagePath):
         os.makedirs(presenterPagePath)
     if not os.path.isdir(attendeePagePath):
         os.makedirs(attendeePagePath)
     
     tempStore = os.path.join(resourcePath, 'temp.html')
     try:
         os.remove(tempStore)
     except:
         pass
     
     retval = self.curlHandle.downloadToFileFromHTTPURL(encodedURL, tempStore)
     if len(retval) < 3:
         try:
             os.remove(tempStore)
         except:
             pass
         try:
             shutil.rmtree(pagePath)
         except:
             pass
             
         response = self.jsonObj.encode({'result' : False, 'error' : 7500})
         return response.encode()
     
     if originalURL != retval:
         # must be a 302. this is our new URL
         originalURL = retval
         baseURL = self.baseURL(originalURL)
         encodedURL = urllib.quote(originalURL)
         
     htmlHandle = open(tempStore, 'r')
     htmlContent = htmlHandle.read()
     htmlHandle.close()
     
     htmlContent = contentMgr.sanitizeHTML(htmlContent, baseURL)
     self.prepareHtml(originalURL, htmlContent, presenterPagePath, attendeePagePath)
     
     try:
         os.remove(tempStore)
     except:
         pass
     
     # add this page to the stateMachine
     self.stateEngine.registerPage(dimdimID, originalURL)
     resource = self.stateEngine.getCurrentResource(dimdimID)
     lastPage = resource.get('lastPage')
     response = self.jsonObj.encode({'result' : True, 'lastPage' : str(lastPage), 'currentPage' : str(currentPageNum), 'error' : 7200})
     return response.encode()
Example #2
0
 def createURLResource(self, dimdimID, roomID, sessionID, encodedURL, resourceID = '_default', resourceType = 'regular'):
     
     # createURLResource is only called for a fresh resource
     
     jsonError = jsonObject()
     jsonError.clearResponse()
     jsonError.add('result', 'false')
     jsonError.add('method', 'cacheURL')
     jsonError.add('error', '7500')
     
     meeting = self.stateEngine.getMeeting(dimdimID)
     if not meeting:
         # register the meeting first
         # ideally, this call should never come..
         # meeting should be registered in listURLResources
         logManager.log('Detected that meeting ' + dimdimID + ' was never registered. This could mean that listURLResources was not called', logging.WARN)
         self.stateEngine.registerMeeting(dimdimID, '')
         self.stateEngine.registerMeeting(dimdimID, 'http://webmeeting.dimdim.com:80/dimdim/BookmarkCobResource.action')
         #return jsonError.jsonResponse()
     
     if resourceType != 'regular':
         resourceType = 'preloaded'
         
     if resourceID == '_default':
         resourceType = 'regular'    # can't have preloaded resources with _default
         
     originalURL = urllib.unquote(encodedURL)
     baseURL = self.baseURL(originalURL)
     
     pageNum = '0'       # duh! this is a new resource
     
     resourcePath = os.path.join(os.path.join(os.path.join(osconfig.cobArchive(), dimdimID), resourceType), resourceID)
     presenterPagePath = os.path.join(os.path.join(resourcePath, pageNum), 'presenter')
     attendeePagePath = os.path.join(os.path.join(resourcePath, pageNum), 'attendee')
     
     if not os.path.isdir(presenterPagePath):
         os.makedirs(presenterPagePath)
     if not os.path.isdir(attendeePagePath):
         os.makedirs(attendeePagePath)
     
     tempStore = os.path.join(resourcePath, 'temp.html')
     try:
         os.remove(tempStore)
     except:
         pass
     
     retval = self.curlHandle.downloadToFileFromHTTPURL(encodedURL, tempStore)
     
     if len(retval) < 3:
         try:
             shutil.rmtree(presenterPagePath)
             shutil.rmtree(attendeePagePath)
             os.remove(tempStore)
         except:
             pass
         return jsonError.jsonResponse()
     
     if originalURL != retval:
         # must be a 302. this is our new URL
         originalURL = retval
         baseURL = self.baseURL(originalURL)
         encodedURL = urllib.quote(originalURL)
         
     htmlHandle = open(tempStore, 'r')
     htmlContent = htmlHandle.read()
     htmlHandle.close()
     
     # inject baseURL
     htmlContent = contentMgr.sanitizeHTML(htmlContent, baseURL)
     self.prepareHtml(originalURL, htmlContent, presenterPagePath, attendeePagePath)
     
     # prepare cache
     presenterLocation = resourceType + '/' + resourceID + '/' + pageNum + '/presenter/content.html'
     presenterCache = string.replace(self.presenterCacheBuffer, 'DIMDIMSL_COB_CONTENT_SRC', presenterLocation)
     
     attendeeLocation = resourceType + '/' + resourceID + '/' + pageNum + '/attendee/content.html'
     attendeeCache = string.replace(self.attendeeCacheBuffer, 'DIMDIMSL_COB_CONTENT_SRC', attendeeLocation)
     
     pCacheLocation = os.path.join(os.path.join(osconfig.cobArchive(), dimdimID), 'p_cache.html')
     pCacheHandle = open(pCacheLocation, 'wb')
     pCacheHandle.write(presenterCache)
     pCacheHandle.close()
     
     aCacheLocation = os.path.join(os.path.join(osconfig.cobArchive(), dimdimID), 'a_cache.html')
     aCacheHandle = open(aCacheLocation, 'wb')
     aCacheHandle.write(attendeeCache)
     aCacheHandle.close()
     
     # clean up
     
     try:
         os.remove(tempStore)
     except:
         pass
     
     # register everything
     
     
     self.stateEngine.registerResource(dimdimID, resourceID, resourceType)
     self.stateEngine.registerPage(dimdimID, originalURL)
     
     jsonSuccess = jsonObject()
     jsonSuccess.clearResponse()
     jsonSuccess.add('result', 'true')
     jsonSuccess.add('method', 'cacheURL')
     jsonSuccess.add('error', '7200')
     jsonSuccess.add('location', '/content/' + str(dimdimID))
     
     return jsonSuccess.jsonResponse()
Example #3
0
    def formSubmit(self, paramDict):
        
        dimdimID = paramDict.pop('dimdimsl_dimdimID')
        roomID = paramDict.pop('dimdimsl_roomID')
        sessionID = paramDict.pop('dimdimsl_sessionID')
        method = paramDict.pop('dimdimsl_method')
        action = paramDict.pop('dimdimsl_action')
        
        
        originalAction = urllib.unquote(action)
        page = self.stateEngine.getCurrentPage(dimdimID)
        currentBaseURL = self.baseURL(page.get('url'))
        baseURL = self.baseURL(originalAction)
        
        if string.find(originalAction, osconfig.serverURL()) >= 0:
            # some pages don't have base injected (e.g. youtube)
            # these pages might give out relative links which
            # assume osconfig.serverURL() as the base URL.
            originalAction = string.lstrip(originalAction, osconfig.serverURL())
            
        # it is possible that originalAction isn't an absolute link
        if string.find(originalAction, 'http://') != 0:
            # the only way originalAction isn't an absolute link is if
            # it belongs to the existing server. so we can
            # safely set baseURL to existing currentBaseURL
            baseURL = currentBaseURL
            originalAction = urlparse.urljoin(baseURL, originalAction)
            action = urllib.quote(originalAction)
    
        meeting = self.stateEngine.getMeeting(dimdimID)
        resourceID = meeting.get('currentResource')
        resource = self.stateEngine.getCurrentResource(dimdimID)
        lastPageNum = resource.get('lastPage')
        currentPageNum = resource.get('currentPage')
        if (currentPageNum != lastPageNum):
            self.stateEngine.trimResourceToCurrentPage(dimdimID)
            
        resourceType = self.stateEngine.getResourceType(dimdimID, resourceID)
        currentPageNum = currentPageNum + 1
        
        # just create the page and return its location
        
        resourcePath = os.path.join(os.path.join(os.path.join(osconfig.cobArchive(), dimdimID), resourceType), resourceID)
        pagePath = os.path.join(resourcePath, str(currentPageNum))
        presenterPagePath = os.path.join(pagePath, 'presenter')
        attendeePagePath = os.path.join(pagePath, 'attendee')
        
        if not os.path.isdir(presenterPagePath):
            os.makedirs(presenterPagePath)
        if not os.path.isdir(attendeePagePath):
            os.makedirs(attendeePagePath)
        
        tempStore = os.path.join(resourcePath, 'temp.html')
        try:
            os.remove(tempStore)
        except:
            pass
        
        retval = self.curlHandle.downloadToFileFromHTTPFormSubmit(action, method, paramDict, tempStore)
        if len(retval) < 3:
            try:
                os.remove(tempStore)
            except:
                pass
            try:
                shutil.rmtree(pagePath)
            except:
                pass

            response = self.jsonObj.encode({'result' : False, 'error' : 7500})
            return response.encode()
        
        if originalAction != retval:
            # must be a 302. this is our new URL
            originalAction = retval
            baseURL = self.baseURL(originalAction)
            encodedURL = urllib.quote(originalAction)
        
        htmlHandle = open(tempStore, 'r')
        htmlContent = htmlHandle.read()
        htmlHandle.close()
        
        # inject baseURL and jquery.noConflict
        # TODO - WHAT IF BASE URL IS ALREADY THERE ??
        htmlContent = contentMgr.sanitizeHTML(htmlContent, baseURL)
        
        self.prepareHtml(originalAction, htmlContent, presenterPagePath, attendeePagePath)
     
        try:
            os.remove(tempStore)
        except:
            pass
        
        # add this page to the stateMachine
        self.stateEngine.registerPage(dimdimID, originalAction)
        resource = self.stateEngine.getCurrentResource(dimdimID)
        lastPage = resource.get('lastPage')
        response = self.jsonObj.encode({'result' : True, 'lastPage' : str(lastPage), 'currentPage' : str(currentPageNum), 'error' : 7200})
        return response.encode()