Initial Commit

This commit is contained in:
ExostFlash 2025-08-27 09:19:44 +02:00
parent 3eb657bf6f
commit d2d0977774
6 changed files with 2562 additions and 0 deletions

66
app.js Normal file
View file

@ -0,0 +1,66 @@
const DISCORD_CLIENT_ID = "your_client_id";
const DISCORD_CLIENT_SECRET = "your_client_secret";
const DISCORD_CALLBACK_URL = "http://localhost:3000/auth/discord/callback";
const SESSION_SECRET = "your_session_secret";
// ...existing code...
const express = require('express');
const session = require('express-session');
const passport = require('passport');
const DiscordStrategy = require('passport-discord').Strategy;
const SQLite = require('sqlite3').verbose();
const path = require('path');
const routes = require('./routes');
const app = express();
// DB SQLite
const db = new SQLite.Database('./database.sqlite', (err) => {
if (err) console.error('Erreur SQLite:', err);
else db.run('CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, username TEXT, discriminator TEXT, avatar TEXT)');
});
// Sessions
app.use(session({
secret: SESSION_SECRET,
resave: false,
saveUninitialized: false
}));
// Passport config
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser((id, done) => {
db.get('SELECT * FROM users WHERE id = ?', [id], (err, row) => {
if (err) return done(err);
done(null, row);
});
});
passport.use(new DiscordStrategy({
clientID: DISCORD_CLIENT_ID,
clientSecret: DISCORD_CLIENT_SECRET,
callbackURL: DISCORD_CALLBACK_URL,
scope: ['identify']
}, (accessToken, refreshToken, profile, done) => {
db.run('INSERT OR REPLACE INTO users (id, username, discriminator, avatar) VALUES (?, ?, ?, ?)',
[profile.id, profile.username, profile.discriminator, profile.avatar],
(err) => {
if (err) return done(err);
done(null, profile);
}
);
}));
app.use(passport.initialize());
app.use(passport.session());
// EJS
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
// Routes
app.use('/', routes);
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log('Serveur lancé sur http://localhost:' + PORT));

BIN
database.sqlite Normal file

Binary file not shown.

2428
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

26
package.json Normal file
View file

@ -0,0 +1,26 @@
{
"name": "resto-epi",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "ssh://git@git.lehub.tf:2222/SchoolTask/resto-epi.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"dependencies": {
"dotenv": "^17.2.1",
"ejs": "^3.1.10",
"express": "^5.1.0",
"express-session": "^1.18.2",
"passport": "^0.7.0",
"passport-discord": "^0.1.4",
"sqlite3": "^5.1.7"
}
}

27
routes.js Normal file
View file

@ -0,0 +1,27 @@
const express = require('express');
const passport = require('passport');
const router = express.Router();
// Page d'accueil
router.get('/', (req, res) => {
res.render('index', { user: req.user });
});
// Auth Discord
router.get('/auth/discord', passport.authenticate('discord'));
router.get('/auth/discord/callback',
passport.authenticate('discord', { failureRedirect: '/' }),
(req, res) => {
res.redirect('/');
}
);
// Déconnexion
router.get('/logout', (req, res) => {
req.logout(() => {
res.redirect('/');
});
});
module.exports = router;

15
views/index.ejs Normal file
View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<title>Accueil</title>
</head>
<body>
<% if (user) { %>
<h1>Bienvenue, <%= user.username %>!</h1>
<a href="/logout">Déconnexion</a>
<% } else { %>
<h1>Bienvenue sur Resto-EPI</h1>
<a href="/auth/discord">Connexion/Inscription via Discord</a>
<% } %>
</body>
</html>