ugh damn ssl shit
This commit is contained in:
1 parent
2da85c4d84
commit
cca9d94b36
3 files changed
+235
-9
No files matched your search
+50
-9
@@ -1,6 +1,7 @@
|
||||
import argparse
|
||||
import asyncio
|
||||
import json
|
||||
import ssl
|
||||
from aiohttp import web
|
||||
from base64 import b64decode
|
||||
from typing import Dict, Any
|
||||
@@ -240,16 +241,48 @@ parser.add_argument(
|
||||
default=8080,
|
||||
help="Optional separate port for webhook endpoint. default: 8080",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ssl-cert",
|
||||
type=str,
|
||||
default=None,
|
||||
help="Path to SSL certificate file for HTTPS (PEM format)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ssl-key",
|
||||
type=str,
|
||||
default=None,
|
||||
help="Path to SSL private key file for HTTPS (PEM format)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--hook-ssl-only",
|
||||
action="store_true",
|
||||
help="Enable HTTPS only for webhook endpoint (main server stays HTTP)",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(banner.generate("studspider v0.1"))
|
||||
print("Built for PLAY-WELL TEKNOLOGIES by contact@traps.moe\n\n")
|
||||
|
||||
# Setup SSL context if certificates provided
|
||||
ssl_context = None
|
||||
if args.ssl_cert and args.ssl_key:
|
||||
ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
|
||||
ssl_context.load_cert_chain(args.ssl_cert, args.ssl_key)
|
||||
print(f"SSL enabled with cert: {args.ssl_cert}")
|
||||
elif args.ssl_cert or args.ssl_key:
|
||||
print("ERROR: Both --ssl-cert and --ssl-key must be provided together")
|
||||
exit(1)
|
||||
|
||||
# If hook-port is specified, run a separate server for webhooks
|
||||
if args.hook_port:
|
||||
print(f"Starting main server on {args.host}:{args.port}")
|
||||
print(f"Starting webhook server on {args.host}:{args.hook_port}")
|
||||
protocol_main = "https" if (ssl_context and not args.hook_ssl_only) else "http"
|
||||
protocol_hook = "https" if ssl_context else "http"
|
||||
|
||||
print(f"Starting main server on {args.host}:{args.port} ({protocol_main})")
|
||||
print(
|
||||
f"Starting webhook server on {args.host}:{args.hook_port} ({protocol_hook})"
|
||||
)
|
||||
|
||||
# Create separate app for webhook
|
||||
hook_app = web.Application()
|
||||
@@ -259,23 +292,31 @@ if __name__ == "__main__":
|
||||
async def run_servers():
|
||||
runner1 = web.AppRunner(app)
|
||||
await runner1.setup()
|
||||
site1 = web.TCPSite(runner1, args.host, args.port)
|
||||
# Main server uses SSL only if not hook-ssl-only mode
|
||||
main_ssl = None if args.hook_ssl_only else ssl_context
|
||||
site1 = web.TCPSite(runner1, args.host, args.port, ssl_context=main_ssl)
|
||||
|
||||
runner2 = web.AppRunner(hook_app)
|
||||
await runner2.setup()
|
||||
site2 = web.TCPSite(runner2, args.host, args.hook_port)
|
||||
# Webhook server always uses SSL if certificates provided
|
||||
site2 = web.TCPSite(
|
||||
runner2, args.host, args.hook_port, ssl_context=ssl_context
|
||||
)
|
||||
|
||||
await site1.start()
|
||||
await site2.start()
|
||||
|
||||
print(f"Main server running on http://{args.host}:{args.port}")
|
||||
print(f"Webhook server running on http://{args.host}:{args.hook_port}/hook")
|
||||
print(f"Main server running on {protocol_main}://{args.host}:{args.port}")
|
||||
print(
|
||||
f"Webhook server running on {protocol_hook}://{args.host}:{args.hook_port}/hook"
|
||||
)
|
||||
|
||||
# Keep running
|
||||
await asyncio.Event().wait()
|
||||
|
||||
asyncio.run(run_servers())
|
||||
else:
|
||||
print(f"Server running on {args.host}:{args.port}")
|
||||
print(f"Webhook endpoint: http://{args.host}:{args.port}/hook")
|
||||
web.run_app(app, host=args.host, port=args.port)
|
||||
protocol = "https" if ssl_context else "http"
|
||||
print(f"Server running on {args.host}:{args.port} ({protocol})")
|
||||
print(f"Webhook endpoint: {protocol}://{args.host}:{args.port}/hook")
|
||||
web.run_app(app, host=args.host, port=args.port, ssl_context=ssl_context)
|
||||
Reference in new issue
Block a user