コード例 #1
0
ファイル: RelayRequestHandler.py プロジェクト: Alecat/pykol
    def do_GET(self):
        if not self.path.count('/newchatmessages.php?') and not self.path.count('/submitnewchat.php?'):
            Report.debug("relay", "GET: %s" % self.path)

        relayServer = self.server.relayServer

        # Check to see if we should terminate the RelayServer.
        if self.path == '/terminate':
            relayServer.haltEvent.set()
            self.wfile.write('Server Stopping...')
            return

        # Redirect empty URL to main.html.
        if self.path == '/':
            self.path = '/main.html'

        # Execute the server request.
        dReq = DynamicRequest(relayServer.session, self.path[1:])
        dReq.doRequest()

        # The following line is for the sake of some js scripts (mainly chat).
        page = dReq.responseText.replace("window.location.hostname", 'window.location.hostname+":"+window.location.port')

        # Add server shutdown in compact mode.
        if self.path == '/topmenu.php':
            page = page.replace('<option value="logout.php">Log Out</option>','<option value="terminate">Stop Server</option>')

        self.wfile.write(page)
コード例 #2
0
ファイル: GenericRequest.py プロジェクト: ZJ/pykol
    def doRequest(self):
        """
		Performs the request. This method will ensure that nightly maintenance is not occuring.
		In addition, this method will throw a NotLoggedInError if the session thinks it is logged
		in when it actually isn't. All specific KoL requests should inherit from this class.
		"""

        Report.debug("request", "Requesting %s" % self.url)

        self.response = self.session.opener.open(self.url, urllib.urlencode(self.requestData))
        self.responseText = self.response.read()

        Report.debug("request", "Received response: %s" % self.url)
        Report.debug("request", "Response Text: %s" % self.responseText)

        if self.response.geturl().find("/maint.php") >= 0:
            self.session.isConnected = False
            raise NightlyMaintenanceError("Nightly maintenance in progress.")

        if self.response.geturl().find("/login.php") >= 0:
            if self.session.isConnected:
                self.session.isConnected = False
                raise NotLoggedInError("You are no longer connected to the server.")

                # Allow for classes that extend GenericRequest to parse all of the data someone
                # would need from the response and then to place this data in self.responseData.
        self.responseData = {}
        if self.skipParseResponse == False and "parseResponse" in self.__class__.__dict__:
            self.parseResponse()
            if len(self.responseData) > 0:
                Report.debug("request", "Parsed response data: %s" % self.responseData)

        return self.responseData
コード例 #3
0
ファイル: GenericRequest.py プロジェクト: Cairnarvon/pykol
    def doRequest(self):
        """
        Performs the request. This method will ensure that nightly maintenance is not occuring.
        In addition, this method will throw a NOT_LOGGED_IN error if the session thinks it is
        logged in when it actually isn't. All specific KoL requests should inherit from this class.
        """

        Report.debug("request", "Requesting %s" % self.url)

        self.response = self.session.opener.open(self.url, self.requestData)
        self.responseText = self.response.text

        Report.debug("request", "Received response: %s" % self.url)
        Report.debug("request", "Response Text: %s" % self.responseText)

        if self.response.url.find("/maint.php") >= 0:
            self.session.isConnected = False
            raise Error.Error("Nightly maintenance in progress.", Error.NIGHTLY_MAINTENANCE)

        if self.response.url.find("/login.php") >= 0:
            if self.session.isConnected:
                self.session.isConnected = False
                raise Error.Error("You are no longer connected to the server.", Error.NOT_LOGGED_IN)

        # Allow for classes that extend GenericRequest to parse all of the data someone
        # would need from the response and then to place this data in self.responseData.
        self.responseData = {}
        if self.skipParseResponse == False and hasattr(self, "parseResponse"):
            self.parseResponse()
            if len(self.responseData) > 0:
                Report.debug("request", "Parsed response data: %s" % self.responseData)

        return self.responseData
コード例 #4
0
	def doRequest(self):
		"""
		Performs the request. This method will ensure that nightly maintenance is not occuring.
		In addition, this method will throw a NotLoggedInError if the session thinks it is logged
		in when it actually isn't. All specific KoL requests should inherit from this class.
		"""
		
		Report.debug("request", "Requesting %s" % self.url)
		
		self.response = self.session.opener.open(self.url, urllib.urlencode(self.requestData))
		self.responseText = self.response.read()
		
		Report.debug("request", "Received response: %s" % self.url)
		Report.debug("request", "Response Text: %s" % self.responseText)
		
		if self.response.geturl().find("/maint.php") >= 0:
			self.session.isConnected = False
			raise NightlyMaintenanceError("Nightly maintenance in progress.")
			
		if self.response.geturl().find("/login.php") >= 0:
			if self.session.isConnected:
				self.session.isConnected = False
				raise NotLoggedInError("You are no longer connected to the server.")
		
		# Allow for classes that extend GenericRequest to parse all of the data someone
		# would need from the response and then to place this data in self.responseData.
		self.responseData = {}
		if self.skipParseResponse == False and "parseResponse" in self.__class__.__dict__:
			self.parseResponse()
			if len(self.responseData) > 0:
				Report.debug("request", "Parsed response data: %s" % self.responseData)
		
		return self.responseData
コード例 #5
0
ファイル: RelayRequestHandler.py プロジェクト: Alecat/pykol
    def do_POST(self):
        Report.debug("relay", "POST: %s" % self.path)

        relayServer = self.server.relayServer

        # Parse out the POST parameters.
        headers = str(self.headers).split('\n')
        length = 0
        for x in headers:
            if x.split(':')[0].lower() == 'content-length':
                length = int(x.split(':')[1].strip())
        payload =  self.rfile.read(length)

        # Execute the server request.
        dReq = DynamicRequest(relayServer.session, self.path[1:], payload)
        dReq.doRequest()
        self.wfile.write(dReq.responseText)
コード例 #6
0
    def doRequest(self):
        """
        Performs the request. This method will ensure that nightly maintenance is not occuring.
        In addition, this method will throw a NOT_LOGGED_IN error if the session thinks it is
        logged in when it actually isn't.
        """

        Report.debug("request", "Requesting %s" % self.url)

        self.response = self.session.opener.opener.post(self.url, self.requestData, stream=True)
        responseStr = StringIO()
        try:
            for chunk in self.response.iter_content(self.chunkSize):
                responseStr.write(chunk)
                s = responseStr.getvalue()
                
                matched = True
                for regex in self.regexList:
                    if not regex.search(s):
                        matched = False
                        break

                if matched:                    
                    break

            self.responseText = responseStr.getvalue()
            responseStr.close()
        finally:
            self.response.close()

        Report.debug("request", "Received response: %s" % self.url)
        Report.debug("request", "Response Text: %s" % self.responseText)

        if self.response.url.find("/maint.php") >= 0:
            self.session.isConnected = False
            raise Error.Error("Nightly maintenance in progress.", Error.NIGHTLY_MAINTENANCE)

        if self.response.url.find("/login.php") >= 0:
            if self.session.isConnected:
                self.session.isConnected = False
                raise Error.Error("You are no longer connected to the server.", Error.NOT_LOGGED_IN)

        # Allow for classes that extend GenericRequest to parse all of the data someone
        # would need from the response and then to place this data in self.responseData.
        self.responseData = {}
        if self.skipParseResponse == False and hasattr(self, "parseResponse"):
            self.parseResponse()
            if len(self.responseData) > 0:
                Report.debug("request", "Parsed response data: %s" % self.responseData)

        return self.responseData
コード例 #7
0
    def doRequest(self):
        """
        Performs the request. This method will ensure that nightly maintenance is not occuring.
        In addition, this method will throw a NOT_LOGGED_IN error if the session thinks it is
        logged in when it actually isn't. All specific KoL requests should inherit from this class.
        """

        if self.get:
            Report.debug("request", "Requesting %s via GET".format(self.url))
            self.response = self.session.opener.get(self.url, self.requestData)
        else:
            Report.debug("request", "Requesting %s via POST".format(self.url))
            self.response = self.session.opener.open(self.url,
                                                     self.requestData)
        self.responseText = self.response.text

        Report.debug("request", "Received response: %s" % self.url)
        Report.debug("request", "Response Text: %s" % self.responseText)

        if self.response.url.find("/maint.php") >= 0:
            self.session.isConnected = False
            raise Error.Error("Nightly maintenance in progress.",
                              Error.NIGHTLY_MAINTENANCE)

        if self.response.url.find("/login.php") >= 0:
            if self.session.isConnected:
                self.session.isConnected = False
                raise Error.Error("You are no longer connected to the server.",
                                  Error.NOT_LOGGED_IN)

        # Allow for classes that extend GenericRequest to parse all of the data someone
        # would need from the response and then to place this data in self.responseData.
        self.responseData = {}
        if self.skipParseResponse == False and hasattr(self, "parseResponse"):
            self.parseResponse()
            if len(self.responseData) > 0:
                Report.debug("request",
                             "Parsed response data: %s" % self.responseData)

        return self.responseData