|
|
|
@@ -20,38 +20,44 @@ logger = logging.getLogger(__name__)
|
|
|
|
|
# VAPID keys for push notifications
|
|
|
|
|
VAPID_PUBLIC_KEY = os.getenv('VAPID_PUBLIC_KEY', '')
|
|
|
|
|
VAPID_PRIVATE_KEY = os.getenv('VAPID_PRIVATE_KEY', '')
|
|
|
|
|
VAPID_SUBJECT = os.getenv('VAPID_SUBJECT', f'mailto:admin@{os.getenv("SERVER_NAME", "localhost")}')
|
|
|
|
|
VAPID_SUBJECT = os.getenv('VAPID_SUBJECT', f'mailto:support@invario-software.de')
|
|
|
|
|
|
|
|
|
|
# VAPID keys file paths
|
|
|
|
|
VAPID_PRIVATE_PEM = os.path.join(os.path.dirname(__file__), 'vapid_private.pem')
|
|
|
|
|
VAPID_PUBLIC_PEM = os.path.join(os.path.dirname(__file__), 'vapid_public.pem')
|
|
|
|
|
|
|
|
|
|
# Auto-generate VAPID keys if none are provided
|
|
|
|
|
if not VAPID_PUBLIC_KEY or not VAPID_PRIVATE_KEY:
|
|
|
|
|
try:
|
|
|
|
|
from py_vapid import Vapid, b64urlencode
|
|
|
|
|
from cryptography.hazmat.primitives import serialization
|
|
|
|
|
|
|
|
|
|
# Load or auto-generate VAPID keys
|
|
|
|
|
try:
|
|
|
|
|
from py_vapid import Vapid, b64urlencode
|
|
|
|
|
from cryptography.hazmat.primitives import serialization
|
|
|
|
|
|
|
|
|
|
if not os.path.exists(VAPID_PRIVATE_PEM) or not os.path.exists(VAPID_PUBLIC_PEM):
|
|
|
|
|
vapid = Vapid()
|
|
|
|
|
if not os.path.exists(VAPID_PRIVATE_PEM):
|
|
|
|
|
vapid.generate_keys()
|
|
|
|
|
vapid.save_key(VAPID_PRIVATE_PEM)
|
|
|
|
|
vapid.save_public_key(VAPID_PUBLIC_PEM)
|
|
|
|
|
logger.info("Auto-generated new VAPID keys")
|
|
|
|
|
else:
|
|
|
|
|
vapid = Vapid.from_file(VAPID_PRIVATE_PEM)
|
|
|
|
|
|
|
|
|
|
raw_pub = vapid.public_key.public_bytes(
|
|
|
|
|
serialization.Encoding.X962,
|
|
|
|
|
serialization.PublicFormat.UncompressedPoint
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
VAPID_PUBLIC_KEY = b64urlencode(raw_pub).decode('utf-8')
|
|
|
|
|
VAPID_PRIVATE_KEY = VAPID_PRIVATE_PEM
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f'Could not load or generate VAPID keys: {e}')
|
|
|
|
|
vapid.generate_keys()
|
|
|
|
|
vapid.save_key(VAPID_PRIVATE_PEM)
|
|
|
|
|
vapid.save_public_key(VAPID_PUBLIC_PEM)
|
|
|
|
|
logger.info("Auto-generated new VAPID keys")
|
|
|
|
|
else:
|
|
|
|
|
vapid = Vapid.from_file(VAPID_PRIVATE_PEM)
|
|
|
|
|
|
|
|
|
|
# Extract public key in standard uncompressed point format encoded in URL-safe base64
|
|
|
|
|
raw_pub = vapid.public_key.public_bytes(
|
|
|
|
|
serialization.Encoding.X962,
|
|
|
|
|
serialization.PublicFormat.UncompressedPoint
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
VAPID_PUBLIC_KEY = b64urlencode(raw_pub).decode('utf-8')
|
|
|
|
|
VAPID_PRIVATE_KEY = VAPID_PRIVATE_PEM # pywebpush accepts the file path to the private PEM
|
|
|
|
|
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(f'Could not load or generate VAPID keys: {e}')
|
|
|
|
|
VAPID_PUBLIC_KEY = os.getenv('VAPID_PUBLIC_KEY', '')
|
|
|
|
|
VAPID_PRIVATE_KEY = os.getenv('VAPID_PRIVATE_KEY', '')
|
|
|
|
|
|
|
|
|
|
VAPID_SUBJECT = os.getenv('VAPID_SUBJECT', 'mailto:support@invario-software.de')
|
|
|
|
|
|
|
|
|
|
# Push service endpoint (typically Firebase or Web Push Service)
|
|
|
|
|
FCM_API_KEY = os.getenv('FCM_API_KEY', '') # Firebase API key
|
|
|
|
|
FCM_API_KEY = os.getenv('FCM_API_KEY', '')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _get_username_hash(username):
|
|
|
|
|