L'inscription Classeo se fait via invitation : un admin crée un compte, l'utilisateur reçoit un lien d'activation par email pour définir son mot de passe. Ce flow sécurisé évite les inscriptions non autorisées et garantit que seuls les utilisateurs légitimes accèdent au système. Points clés de l'implémentation : - Tokens d'activation à usage unique stockés en cache (Redis/filesystem) - Validation du consentement parental pour les mineurs < 15 ans (RGPD) - L'échec d'activation ne consume pas le token (retry possible) - Users dans un cache séparé sans TTL (pas d'expiration) - Hot reload en dev (FrankenPHP sans mode worker) Story: 1.3 - Inscription et activation de compte
100 lines
1.9 KiB
JavaScript
100 lines
1.9 KiB
JavaScript
import js from '@eslint/js';
|
|
import tseslint from 'typescript-eslint';
|
|
import sveltePlugin from 'eslint-plugin-svelte';
|
|
import svelteParser from 'svelte-eslint-parser';
|
|
import prettier from 'eslint-config-prettier';
|
|
|
|
export default tseslint.config(
|
|
// Base JavaScript recommended rules
|
|
js.configs.recommended,
|
|
|
|
// TypeScript recommended rules
|
|
...tseslint.configs.recommended,
|
|
|
|
// Global ignores
|
|
{
|
|
ignores: [
|
|
'.svelte-kit/**',
|
|
'build/**',
|
|
'dist/**',
|
|
'node_modules/**',
|
|
'*.config.js',
|
|
'*.config.ts'
|
|
]
|
|
},
|
|
|
|
// TypeScript files
|
|
{
|
|
files: ['**/*.ts'],
|
|
languageOptions: {
|
|
parserOptions: {
|
|
sourceType: 'module',
|
|
ecmaVersion: 2020
|
|
},
|
|
globals: {
|
|
window: 'readonly',
|
|
document: 'readonly',
|
|
console: 'readonly',
|
|
process: 'readonly',
|
|
__dirname: 'readonly',
|
|
__filename: 'readonly',
|
|
Promise: 'readonly',
|
|
Set: 'readonly',
|
|
Map: 'readonly'
|
|
}
|
|
},
|
|
rules: {
|
|
'@typescript-eslint/no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_'
|
|
}
|
|
],
|
|
'no-console': ['warn', { allow: ['warn', 'error'] }]
|
|
}
|
|
},
|
|
|
|
// Svelte files
|
|
{
|
|
files: ['**/*.svelte'],
|
|
languageOptions: {
|
|
parser: svelteParser,
|
|
parserOptions: {
|
|
parser: tseslint.parser,
|
|
sourceType: 'module',
|
|
ecmaVersion: 2020,
|
|
extraFileExtensions: ['.svelte']
|
|
},
|
|
globals: {
|
|
window: 'readonly',
|
|
document: 'readonly',
|
|
console: 'readonly',
|
|
process: 'readonly',
|
|
Promise: 'readonly',
|
|
Set: 'readonly',
|
|
Map: 'readonly',
|
|
Event: 'readonly',
|
|
SubmitEvent: 'readonly',
|
|
fetch: 'readonly'
|
|
}
|
|
},
|
|
plugins: {
|
|
svelte: sveltePlugin
|
|
},
|
|
rules: {
|
|
...sveltePlugin.configs.recommended.rules,
|
|
'@typescript-eslint/no-unused-vars': [
|
|
'error',
|
|
{
|
|
argsIgnorePattern: '^_',
|
|
varsIgnorePattern: '^_'
|
|
}
|
|
]
|
|
}
|
|
},
|
|
|
|
// Prettier (disable conflicting rules)
|
|
prettier
|
|
);
|