Ajout page login non fonctionnelle

This commit is contained in:
2025-09-16 10:55:23 +02:00
parent 83e2b786c7
commit ad695b82f7
12 changed files with 3076 additions and 784 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
{
"name": "config",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^17.2.2",
"express": "^5.1.0",
"mssql": "^11.0.1"
},
"devDependencies": {
"@types/cors": "^2.8.19"
}
}

View File

@@ -0,0 +1,158 @@
const express = require('express');
const cors = require('cors');
const sql = require('mssql');
require('dotenv').config();
const app = express();
const PORT = 3002;
// Configuration base de données
const dbConfig = {
server: process.env.DB_SERVER,
database: process.env.DB_DATABASE,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
options: {
encrypt: true,
trustServerCertificate: true,
enableArithAbort: true
}
};
// Middleware
app.use(cors({
origin: ['http://localhost:5173', 'http://localhost:5174', 'http://localhost:3000', 'http://127.0.0.1:5173', 'http://127.0.0.1:5174'],
credentials: true
}));
app.use(express.json());
// Log de toutes les requêtes
app.use((req, res, next) => {
console.log(`${new Date().toISOString()} - ${req.method} ${req.path} depuis ${req.get('origin') || 'inconnu'}`);
next();
});
// Variable pour stocker la connexion
let pool = null;
// Fonction pour se connecter à la base
async function connectDatabase() {
try {
pool = await sql.connect(dbConfig);
console.log('Base de données connectée');
return true;
} catch (error) {
console.error('Erreur de connexion :', error.message);
return false;
}
}
// Route de test
app.get('/api/test', (req, res) => {
res.json({
message: 'Le serveur fonctionne !',
timestamp: new Date().toISOString()
});
});
// Route pour tester la base de données
app.get('/api/db-test', async (req, res) => {
try {
if (!pool) {
return res.status(500).json({ error: 'Base non connectée' });
}
const result = await pool.request().query('SELECT COUNT(*) as total FROM FormateurSqy');
res.json({
message: 'Base OK',
formateurs: result.recordset[0].total
});
} catch (error) {
res.status(500).json({ error: error.message });
}
});
// Route pour mettre à jour le statut d'une déclaration
app.put('/api/declarations/:id/status', async (req, res) => {
try {
const { id } = req.params;
const { status } = req.body;
await pool.request()
.input('id', sql.Int, id)
.input('status', sql.VarChar, status)
.query('UPDATE declarations SET status = @status WHERE id = @id');
res.json({ success: true, message: 'Statut mis à jour' });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
// Modifier votre route existante
// Remplacez la route existante par :
app.get('/api/get_declarations', async (req, res) => {
try {
console.log('Récupération des déclarations...');
const result = await pool.request().query(`
SELECT
d.id,
d.formateur_numero as utilisateur_id,
td.id as type_demande_id,
d.date,
d.duree,
d.description,
d.formateur_numero,
'pending' as status,
td.libelle as activityType,
f.NOM_ENS as nom,
f.PRENOM_ENS as prenom,
'Non défini' as campus
FROM declarations d
INNER JOIN types_demandes td ON d.type_demande_id = td.id
LEFT JOIN FormateurSqy f ON d.formateur_numero = f.NUMERO
ORDER BY d.date DESC
`);
console.log(`${result.recordset.length} déclarations trouvées`);
res.json(result.recordset);
} catch (error) {
console.error('Erreur lors de la récupération:', error);
res.status(500).json({ error: error.message });
}
});
// Démarrage du serveur
async function startServer() {
const dbConnected = await connectDatabase();
if (!dbConnected) {
console.log('Impossible de démarrer sans base de données');
return;
}
app.listen(PORT, () => {
console.log(`Serveur démarré sur http://localhost:${PORT}`);
console.log('Routes disponibles :');
console.log('- GET /api/test');
console.log('- GET /api/db-test');
console.log('- GET /api/get_declarations');
console.log('- PUT /api/declarations/:id/status');
});
}
// Arrêt propre
process.on('SIGINT', async () => {
console.log('Arrêt du serveur...');
if (pool) {
await pool.close();
}
process.exit(0);
});
// Démarrer
startServer();

View File

@@ -0,0 +1,62 @@
// Test avec authentification SQL Server
const sql = require('mssql');
const config = {
server: 'BONEMINE',
database: 'GTF',
user: 'gtf_app',
password: 'GTF2025!Secure',
options: {
encrypt: true,
trustServerCertificate: true,
enableArithAbort: true
}
};
async function testConnection() {
try {
console.log('Test avec authentification SQL Server...');
console.log('Serveur:', config.server);
console.log('Base:', config.database);
console.log('Utilisateur:', config.user);
await sql.connect(config);
console.log('Connexion réussie avec SQL Server Auth !');
// Test des tables
const result1 = await sql.query('SELECT COUNT(*) as total FROM FormateurSqy');
console.log('Nombre de formateurs :', result1.recordset[0].total);
const result2 = await sql.query('SELECT COUNT(*) as total FROM declarations');
console.log('Nombre de déclarations :', result2.recordset[0].total);
const result3 = await sql.query('SELECT COUNT(*) as total FROM types_demandes');
console.log('Nombre de types de demandes :', result3.recordset[0].total);
// Test d'insertion/lecture (pour vérifier les permissions)
const testResult = await sql.query(`
SELECT
id,
libelle
FROM types_demandes
`);
console.log('Types de demandes disponibles :');
testResult.recordset.forEach(t => {
console.log(`- ${t.id}: ${t.libelle}`);
});
console.log('Configuration SQL Server validée !');
} catch (error) {
console.error('Erreur :', error.message);
console.log('Code d\'erreur:', error.code);
if (error.code === 'ELOGIN') {
console.log('Vérifiez que l\'utilisateur gtf_app a été créé dans SQL Server');
}
} finally {
await sql.close();
}
}
testConnection();