Shodan and jobs
This commit is contained in:
+70
-2
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user