HarshItPDF / license_server.py
hursheesh's picture
Upload 5 files
4578ce6 verified
Raw
History Blame Contribute Delete
2.13 kB
"""
mock-license-server — Standalone HTTP server that validates licenses.
Replaces api.keygen.sh for the HarshItPDF license verification flow.
"""
import os
import json
import logging
from http.server import HTTPServer, BaseHTTPRequestHandler
PORT = int(os.environ.get("LICENCE_SERVER_PORT", "7871"))
logger = logging.getLogger("license-server")
VALID_RESPONSE = {
"meta": {"valid": True},
"data": {
"type": "license",
"id": "mock-license-001",
"attributes": {
"name": "HarshItPDF Enterprise License",
"key": "harshitpdf-unlocked-0000-0000-0000-000000000001",
"status": "ACTIVE",
"expiry": None,
"metadata": {
"isEnterprise": True,
"isPremium": True,
"maxUsers": 999,
"plan": "enterprise",
"tier": "enterprise",
},
"maxMachines": 999,
},
},
}
class LicenseHandler(BaseHTTPRequestHandler):
def do_POST(self):
body = self.rfile.read(int(self.headers.get("Content-Length", 0)))
logger.info(f"License check from {self.client_address}: {self.path}")
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.send_header("Connection", "close")
self.end_headers()
self.wfile.write(json.dumps(VALID_RESPONSE).encode())
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.send_header("Connection", "close")
self.end_headers()
self.wfile.write(
json.dumps({"ok": True, "service": "mock-license-server", "version": "1.0"}).encode()
)
def log_message(self, fmt, *args):
logger.info(fmt % args)
def start_license_server():
server = HTTPServer(("0.0.0.0", PORT), LicenseHandler)
logger.info(f"Mock license server listening on port {PORT}")
server.serve_forever()
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO, format="[license-server] %(message)s")
start_license_server()