mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-19 21:18:25 +02:00
feat(rust) : serveur réécrit en Rust, Node retiré ; Calendrier en tête du menu (#571)
- Serveur Rust (server-rs/, axum + sqlx) : les 148 adresses de l'API, l'interface, les migrations de démarrage et les tâches de fond ; même comportement que Node (banc : 2027 cas, 0 écart hors écarts déclarés USERS-02, RAPPRO-21, R4, R5). - Node retiré : server/, dépendances serveur, image Docker sans Node (51 Mo), docker-compose à un seul service applicatif. - R4 : écritures d'un autre site refusées (Sec-Fetch-Site / Origin). - R5 : « aujourd'hui » et sauvegarde automatique à l'heure de Paris. - R6 : mainteneur dans .github/CODEOWNERS. - Menu latéral : Accueil puis Calendrier en tête. - Plan et état : docs/PLAN-MIGRATION-RUST.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ke2qyS8rgacP3ap5iezDbM
This commit is contained in:
1 parent
6760f43e87
commit
600627c632
146 files changed
+31521
-20331
No files matched your search
@@ -0,0 +1,34 @@
|
||||
// Fonctions reprises de l'ancien serveur Node, pour écrire les données du banc
|
||||
// comme il les aurait écrites (le serveur Node a été retiré du dépôt).
|
||||
import crypto from "node:crypto";
|
||||
|
||||
const PREFIX = "enc:v1:";
|
||||
|
||||
/** Ancien server/crypto.ts : AES-256-GCM, clé = SHA-256(ENCRYPTION_KEY ou SESSION_SECRET) */
|
||||
export function encryptSecret(value: string): string {
|
||||
const secret = process.env.ENCRYPTION_KEY || process.env.SESSION_SECRET || "logiflow-fallback-secret-key";
|
||||
const key = crypto.createHash("sha256").update(secret).digest();
|
||||
const iv = crypto.randomBytes(12);
|
||||
const cipher = crypto.createCipheriv("aes-256-gcm", key, iv);
|
||||
const encrypted = Buffer.concat([cipher.update(value, "utf8"), cipher.final()]);
|
||||
const tag = cipher.getAuthTag();
|
||||
return `${PREFIX}${iv.toString("base64")}:${tag.toString("base64")}:${encrypted.toString("base64")}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ancien weatherService.getPreviousYearDate, serveur en UTC : même jour de la
|
||||
* semaine, même rang dans le mois, l'année précédente
|
||||
*/
|
||||
export function previousYearDate(date: Date): string {
|
||||
const year = date.getUTCFullYear();
|
||||
const month = date.getUTCMonth();
|
||||
const dayOfWeek = date.getUTCDay();
|
||||
const firstDayOfMonth = new Date(Date.UTC(year - 1, month, 1)).getUTCDay();
|
||||
const daysToAdd = (dayOfWeek - firstDayOfMonth + 7) % 7;
|
||||
const weekOfMonth = Math.ceil(date.getUTCDate() / 7);
|
||||
const target = new Date(Date.UTC(year - 1, month, 1 + daysToAdd + (weekOfMonth - 1) * 7));
|
||||
if (target.getUTCMonth() !== month) {
|
||||
target.setUTCDate(target.getUTCDate() - 7);
|
||||
}
|
||||
return target.toISOString().split("T")[0];
|
||||
}
|
||||
Reference in new issue
Block a user