fix
This commit is contained in:
70
backend/scripts/generate_vapid_keys.py
Normal file
70
backend/scripts/generate_vapid_keys.py
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script pour générer des clés VAPID pour les notifications push.
|
||||
|
||||
Usage:
|
||||
python scripts/generate_vapid_keys.py
|
||||
|
||||
Les clés générées doivent être ajoutées aux variables d'environnement:
|
||||
VAPID_PUBLIC_KEY=<clé_publique>
|
||||
VAPID_PRIVATE_KEY=<clé_privée>
|
||||
VAPID_CLAIMS_EMAIL=mailto:admin@example.com
|
||||
"""
|
||||
|
||||
import base64
|
||||
import os
|
||||
|
||||
try:
|
||||
from cryptography.hazmat.primitives.asymmetric import ec
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives import serialization
|
||||
except ImportError:
|
||||
print("❌ cryptography n'est pas installé.")
|
||||
print(" Installez-le avec: pip install cryptography")
|
||||
exit(1)
|
||||
|
||||
|
||||
def generate_vapid_keys():
|
||||
"""Génère une paire de clés VAPID au format base64url."""
|
||||
# Générer une clé privée EC P-256
|
||||
private_key = ec.generate_private_key(ec.SECP256R1(), default_backend())
|
||||
|
||||
# Extraire la clé privée brute (32 octets)
|
||||
private_numbers = private_key.private_numbers()
|
||||
private_bytes = private_numbers.private_value.to_bytes(32, byteorder='big')
|
||||
private_key_b64 = base64.urlsafe_b64encode(private_bytes).rstrip(b'=').decode('ascii')
|
||||
|
||||
# Extraire la clé publique non compressée (65 octets = 0x04 + X + Y)
|
||||
public_key = private_key.public_key()
|
||||
public_bytes = public_key.public_bytes(
|
||||
encoding=serialization.Encoding.X962,
|
||||
format=serialization.PublicFormat.UncompressedPoint
|
||||
)
|
||||
public_key_b64 = base64.urlsafe_b64encode(public_bytes).rstrip(b'=').decode('ascii')
|
||||
|
||||
return public_key_b64, private_key_b64
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("🔐 Génération des clés VAPID pour Web Push...\n")
|
||||
|
||||
public_key, private_key = generate_vapid_keys()
|
||||
|
||||
print("=" * 70)
|
||||
print("Clés VAPID générées avec succès !")
|
||||
print("=" * 70)
|
||||
print()
|
||||
print("Ajoutez ces variables à votre fichier .env ou configuration:")
|
||||
print()
|
||||
print(f'VAPID_PUBLIC_KEY={public_key}')
|
||||
print()
|
||||
print(f'VAPID_PRIVATE_KEY={private_key}')
|
||||
print()
|
||||
print('VAPID_CLAIMS_EMAIL=mailto:admin@lediscord.com')
|
||||
print()
|
||||
print("=" * 70)
|
||||
print()
|
||||
print("⚠️ IMPORTANT:")
|
||||
print(" - Gardez la clé privée SECRÈTE")
|
||||
print(" - Les clés doivent être les mêmes en dev et prod")
|
||||
print(" - Après changement de clés, les utilisateurs devront se réabonner")
|
||||
Reference in New Issue
Block a user