proxy test
This commit is contained in:
parent
fdbb7378e8
commit
45a8cad486
1 changed files with 48 additions and 9 deletions
|
@ -1,7 +1,12 @@
|
||||||
import treq
|
import treq
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
import os
|
||||||
from twisted.internet.defer import inlineCallbacks, returnValue
|
from twisted.internet.defer import inlineCallbacks, returnValue
|
||||||
|
from twisted.internet import reactor
|
||||||
|
from twisted.web.client import ProxyAgent, Agent
|
||||||
|
from twisted.web.http_headers import Headers
|
||||||
|
from twisted.internet.endpoints import TCP4ClientEndpoint
|
||||||
from synapse.module_api import ModuleApi, errors
|
from synapse.module_api import ModuleApi, errors
|
||||||
from synapse.types import UserID
|
from synapse.types import UserID
|
||||||
import logging
|
import logging
|
||||||
|
@ -47,17 +52,49 @@ class InviteChecker:
|
||||||
@inlineCallbacks
|
@inlineCallbacks
|
||||||
def fetch_json(self, url):
|
def fetch_json(self, url):
|
||||||
logger.info(f"Fetching JSON data from: {url}")
|
logger.info(f"Fetching JSON data from: {url}")
|
||||||
|
|
||||||
|
# Fetch proxy from the environment variable
|
||||||
|
https_proxy = os.getenv('https_proxy')
|
||||||
|
|
||||||
|
if https_proxy:
|
||||||
|
logger.info(f"Using HTTPS proxy: {https_proxy}")
|
||||||
|
|
||||||
|
# Parse the proxy URL with optional username and password
|
||||||
|
if '@' in https_proxy: # Check if authentication info is present
|
||||||
|
credentials, proxy_hostport = https_proxy.split('@')
|
||||||
|
username, password = credentials.split(':')
|
||||||
|
proxy_host, proxy_port = proxy_hostport.split(':')
|
||||||
|
|
||||||
|
# Create basic authentication header
|
||||||
|
auth_string = f'{username}:{password}'
|
||||||
|
auth_bytes = base64.b64encode(auth_string.encode('utf-8')).decode('utf-8')
|
||||||
|
headers = Headers({
|
||||||
|
'Proxy-Authorization': [f'Basic {auth_bytes}']
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
headers = None
|
||||||
|
proxy_host, proxy_port = https_proxy.split(':')
|
||||||
|
|
||||||
|
proxy_endpoint = TCP4ClientEndpoint(reactor, proxy_host, int(proxy_port))
|
||||||
|
|
||||||
|
# Create a ProxyAgent with authentication if needed
|
||||||
|
agent = ProxyAgent(proxy_endpoint)
|
||||||
|
else:
|
||||||
|
# If no proxy is set, use the default agent
|
||||||
|
agent = Agent(reactor)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
response = yield treq.get(url)
|
# Pass headers to the request if authentication is required
|
||||||
|
if headers:
|
||||||
|
response = yield treq.get(url, agent=agent, headers=headers)
|
||||||
|
else:
|
||||||
|
response = yield treq.get(url, agent=agent)
|
||||||
|
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
try:
|
|
||||||
content = yield response.content()
|
content = yield response.content()
|
||||||
data = json.loads(content.decode('utf-8'))
|
data = json.loads(content.decode('utf-8'))
|
||||||
logger.debug(f"Received JSON data: {data}")
|
logger.debug(f"Received JSON data: {data}")
|
||||||
returnValue(data)
|
returnValue(data)
|
||||||
except Exception as json_error:
|
|
||||||
logger.error(f"Failed to decode JSON data: {json_error}")
|
|
||||||
returnValue(None)
|
|
||||||
else:
|
else:
|
||||||
logger.error(f"Failed to fetch JSON data. Status code: {response.code}")
|
logger.error(f"Failed to fetch JSON data. Status code: {response.code}")
|
||||||
returnValue(None)
|
returnValue(None)
|
||||||
|
@ -65,6 +102,8 @@ class InviteChecker:
|
||||||
logger.error(f"Error while fetching JSON: {str(e)}")
|
logger.error(f"Error while fetching JSON: {str(e)}")
|
||||||
returnValue(None)
|
returnValue(None)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@inlineCallbacks
|
@inlineCallbacks
|
||||||
def fetch_policy_room_banlist(self):
|
def fetch_policy_room_banlist(self):
|
||||||
"""Fetches the ban lists from multiple policy rooms using Synapse API."""
|
"""Fetches the ban lists from multiple policy rooms using Synapse API."""
|
||||||
|
|
Loading…
Reference in a new issue