Files
SneakyMon/app/main.py
2025-11-06 03:25:44 -06:00

102 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
from pathlib import Path
from utils.common_utils import get_common_utils
from utils.logging_setup import get_logger
from utils.settings import get_settings
from utils.cache_db import get_cache
import requests
from dotenv import load_dotenv
logger = get_logger()
settings = get_settings()
utils = get_common_utils()
load_dotenv()
CACHE_DIR = Path.cwd() / "config" / "cache.db"
def gotify(title:str="Test", message:str="testing msg",priority:int=5):
"""
Send a message to a Gotify server using a Bearer token.
Args:
server_url (str): Base URL of the Gotify server (e.g., http://10.10.20.8:8080).
token (str): Gotify app token for authentication.
title (str): Title of the message.
message (str): Body of the message.
priority (int, optional): Message priority (110). Defaults to 5.
Returns:
bool: True if the message was sent successfully, False otherwise.
"""
server_url = os.getenv("GOTIFY_URL")
token = os.getenv("GOTIFY_TOKEN")
if not server_url or not token:
print("[!] Missing GOTIFY_URL or GOTIFY_TOKEN in environment.")
return False
url = f"{server_url.rstrip('/')}/message"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
payload = {
"title": title,
"message": message,
"priority": priority
}
try:
response = requests.post(url, headers=headers, json=payload, timeout=10)
response.raise_for_status()
return True
except requests.RequestException as e:
print(f"[!] Failed to send Gotify message: {e}")
return False
def check_dir_changed():
changed = False
dir_to_watch = os.getenv("DIR_TO_WATCH")
# create a cache db object and key for this dir (base64 of the dir)
cache = get_cache(CACHE_DIR)
cache_key = utils.TextUtils.encode_base64(dir_to_watch)
# get the old file listing from cache
existing_contents = cache.read(cache_key)
try:
# get current files
current_files = utils.FileUtils.list_files_in_dir_w_subs(dir_to_watch)
except Exception as e:
logger.error(f"Unable to check for files due to: {e}")
return False
# if they are different..
if existing_contents != current_files:
logger.info(f"The contents of {dir_to_watch} changed")
changed = True
# update the cache
if existing_contents is None:
cache.create(cache_key,current_files)
else:
cache.update(cache_key,current_files)
return changed
if __name__ == "__main__":
title = "NEW ACTIVITY DETECTED"
msg = "Your Camera System has uploaded videos!. We have detected activity!"
files_changed = check_dir_changed()
if files_changed:
gotify(title,msg)