From 2efca9cc12f4ea1352019e4bd74a5a44f8a75933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Tue, 5 Mar 2024 15:03:45 +0000 Subject: [PATCH] Add check to skip BunkerWeb Pro license key verification if already checked within the last 10 minutes --- .../core/pro/jobs/download-pro-plugins.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/common/core/pro/jobs/download-pro-plugins.py b/src/common/core/pro/jobs/download-pro-plugins.py index 68d797e43..e4305c584 100644 --- a/src/common/core/pro/jobs/download-pro-plugins.py +++ b/src/common/core/pro/jobs/download-pro-plugins.py @@ -100,6 +100,13 @@ def install_plugin(plugin_dir: str, db, preview: bool = True) -> bool: try: logger.info("Checking BunkerWeb Pro license key...") db = Database(logger, sqlalchemy_string=getenv("DATABASE_URI"), pool=False) + db_metadata = db.get_metadata() + current_date = datetime.now() + + # If we already checked in the last 10 minutes, skip the check + if db_metadata["last_pro_check"] and (current_date - db_metadata["last_pro_check"]).seconds < 600: + logger.info("Skipping the check for BunkerWeb Pro license (already checked in the last 10 minutes)") + sys_exit(0) data = { "integration": get_integration(), @@ -116,7 +123,6 @@ try: "pro_services": 0, } metadata = {} - db_metadata = db.get_metadata() pro_license_key = getenv("PRO_LICENSE_KEY") error = False @@ -140,16 +146,17 @@ try: else: resp.raise_for_status() - metadata = resp.json() + metadata = resp.json()["data"] + logger.debug(f"Got BunkerWeb Pro license metadata: {metadata}") metadata["pro_expire"] = datetime.strptime(metadata["pro_expire"], "%Y-%m-%d") if metadata["pro_expire"] else None if metadata["pro_expire"] and metadata["pro_expire"] < datetime.now(): metadata["pro_status"] = "expired" if metadata["pro_services"] < int(data["service_number"]): metadata["pro_overlapped"] = True - metadata["is_pro"] = metadata["pro_status"] == "valid" and not metadata["pro_overlapped"] + metadata["is_pro"] = metadata["pro_status"] == "active" and not metadata["pro_overlapped"] metadata = metadata or default_metadata - db.set_pro_metadata(metadata) + db.set_pro_metadata(metadata | {"last_pro_check": current_date}) if metadata["is_pro"]: logger.info("🚀 Your BunkerWeb Pro license is valid, checking if there are new or updated Pro plugins...") @@ -163,7 +170,7 @@ try: logger.error(f"Access denied to {API_ENDPOINT}/pro - please check your BunkerWeb Pro access at https://panel.bunkerweb.io/") error = True metadata = default_metadata - db.set_pro_metadata(metadata) + db.set_pro_metadata(metadata | {"last_pro_check": current_date}) clean_pro_plugins(db) elif resp.headers.get("Content-Type", "") != "application/octet-stream": logger.error(f"Got unexpected content type: {resp.headers.get('Content-Type', 'missing')} from {API_ENDPOINT}/pro") @@ -180,7 +187,7 @@ try: message = "No BunkerWeb Pro license key provided" logger.warning(f"{message}, only checking if there are new or updated preview versions of Pro plugins...") - if db_metadata["pro_status"] == "valid": + if metadata["is_pro"]: clean_pro_plugins(db) resp = get(f"{PREVIEW_ENDPOINT}/v{data['version']}.zip", timeout=5, allow_redirects=True)