Shodan and jobs
Build, push image, and notify Watchtower / build-image (push) Successful in 3m25s
Build, push image, and notify Watchtower / notify (push) Successful in 13s

This commit is contained in:
2026-08-18 15:48:37 +02:00
parent 2c0776bdaa
commit 88c3de6ab7
4 changed files with 290 additions and 3 deletions
+70 -2
View File
@@ -7,13 +7,16 @@ import sys
import json
from flask import Flask, request, jsonify, current_app
from pymongo import MongoClient
from APIs import generate, EdamamAPI
from APIs import generate
from APIs.mqtt import send_command
from APIs.webex import WebexManager
from APIs.shodan import ShodanAuditor
from APIs.twilio import send_alert_sms
from microwaveCookPlanner import MicrowaveCookPlanner
import safety_checker
import pymongo
from APIs.twilio import send_alert_sms
from apscheduler.schedulers.background import BackgroundScheduler
from jobs import job_server_cve_audit, job_client_ip_audit, job_request_telemetry
sys.path.insert(0, '..')
try:
@@ -37,6 +40,9 @@ cooking_collection = db["cooking_parameters"]
telemetry_collection = db["telemetry_data"]
alert_collection = db["alert_data"]
webex_tokens_collection = db["webex_tokens"] # Collection for Webex OAuth tokens
device_ip_collection = db["device_ips"] # Collection for device IPs
cve_audit_results = db["cve_audit_results"] # Collection for CVE audit results
# Webex Credentials & Configuration from Environment Variables
WEBEX_CLIENT_ID = os.getenv("WEBEX_CLIENT_ID", "YOUR_WEBEX_CLIENT_ID")
@@ -63,6 +69,44 @@ webex_manager = WebexManager(
team_id=WEBEX_TEAM_ID,
user_id=WEBEX_NINLUC_ID
)
shodan_auditor = ShodanAuditor()
# -------------------------------------------------------------
# Cron Scheduler Setup
# -------------------------------------------------------------
scheduler = BackgroundScheduler(daemon=True)
# Job 1: Server CVE audit every night at 00:00 UTC
scheduler.add_job(
func=job_server_cve_audit,
args=[shodan_auditor, db],
trigger="cron",
hour=0,
minute=0,
id="server_cve_audit_job"
)
# Job 2: Client IP Shodan audit every 6 hours
scheduler.add_job(
func=job_client_ip_audit,
args=[shodan_auditor, db],
trigger="cron",
hour="*/6",
minute=15,
id="client_ip_audit_job"
)
# Job 3: Request telemetry runs AFTER the client audit (e.g., every 12 hours)
scheduler.add_job(
func=job_request_telemetry,
args=[send_command],
trigger="cron",
hour="1,13",
minute=0,
id="request_telemetry_job"
)
scheduler.start()
# ---------------------------------------------------------
# OAuth Routes
@@ -97,6 +141,14 @@ def hello_world():
async def cooking_params():
try:
data = request.get_json()
microwave_id = data.get("microwave_id", "unknown")
client_ip = request.headers.get('X-Forwarded-For', request.remote_addr).split(',')[0].strip()
device_ip_collection.insert_one({
"microwave_id": microwave_id,
"client_ip": client_ip,
"received_at": datetime.now(timezone.utc)
})
if not data:
return jsonify({"error": "Invalid or missing JSON payload"}), 400
@@ -326,6 +378,22 @@ def telemetry():
except Exception as e:
return jsonify({"error": f"Database error: {str(e)}"}), 500
# -------------------------------------------------------------
# Server CVE & SSL Audit Endpoint
# -------------------------------------------------------------
@app.route('/api/security/cve-audit', methods=['GET'])
def run_cve_audit():
"""Runs a vulnerability and SSL audit against this server."""
audit_results = shodan_auditor.audit_server_vulnerabilities()
cve_audit_results.insert_one({
"audit_results": audit_results,
"timestamp": datetime.now(timezone.utc)
})
status_code = 200 if audit_results["status"] == "PASS" else 409
return jsonify(audit_results), status_code
@app.route("/debug/telemetryrequest", methods=["GET"])
def debug_telemetryrequest():