mirror of
https://github.com/deunix-educ/Fail2banMqttActionBanishment.git
synced 2026-08-24 03:11:58 +02:00
36 lines
1.5 KiB
Python
36 lines
1.5 KiB
Python
"""Émission de jetons d'auto-inscription (flux "kubeadm join", voir
|
|
ROADMAP.md et banevents/views.py::join_node) — factorisé pour être
|
|
appelé à la fois par `manage.py create_join_token` (CLI, décision
|
|
humaine directe) et par `EnrollmentRequestAdmin.approve_and_send_token`
|
|
(validation d'une demande soumise via /communaute/) : un seul endroit qui
|
|
touche le hachage/l'expiration du jeton.
|
|
"""
|
|
import datetime
|
|
import hashlib
|
|
import os
|
|
import secrets
|
|
|
|
from django.utils import timezone
|
|
|
|
from .models import JoinToken
|
|
|
|
DEFAULT_TTL_MINUTES = 60
|
|
|
|
|
|
def issue_join_token(node_name: str, ttl_minutes: int = DEFAULT_TTL_MINUTES) -> tuple[str, JoinToken]:
|
|
"""Génère un jeton en clair (jamais persisté tel quel) + l'objet
|
|
JoinToken correspondant (seul le hash SHA-256 est stocké)."""
|
|
token = secrets.token_urlsafe(32)
|
|
token_hash = hashlib.sha256(token.encode('utf-8')).hexdigest()
|
|
expires_at = timezone.now() + datetime.timedelta(minutes=ttl_minutes)
|
|
join_token = JoinToken.objects.create(node_name=node_name, token_hash=token_hash, expires_at=expires_at)
|
|
return token, join_token
|
|
|
|
|
|
def join_command(node_name: str, token: str) -> str:
|
|
"""Commande complète à communiquer (CLI ou email) — DASHBOARD_DOMAIN
|
|
déjà chargé dans os.environ par python-dotenv (cf. settings/base.py)."""
|
|
master_url = os.environ.get('DASHBOARD_DOMAIN', '')
|
|
master_url = f'https://{master_url}' if master_url else '<url-du-master>'
|
|
return f'sudo make join MASTER={master_url} NODE={node_name} TOKEN={token}'
|