mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
Chaos management
This commit is contained in:
parent
b9af549624
commit
b1e26d7895
12 changed files with 120 additions and 15 deletions
|
|
@ -23,13 +23,16 @@ import Header from './components/Header/Header';
|
|||
import Footer from './components/Footer/Footer';
|
||||
|
||||
import ApiService from './services/ApiService';
|
||||
import OAuthCallback from './pages/AuthSelection/AuthCallback';
|
||||
|
||||
const handleLogout = () => {
|
||||
ApiService.logout();
|
||||
};
|
||||
|
||||
const isLoggedIn = () => {
|
||||
return ApiService.isLoggedIn();
|
||||
const test = ApiService.isLoggedIn();
|
||||
console.log("App.tsx: " + test);
|
||||
return test;
|
||||
};
|
||||
|
||||
function App() {
|
||||
|
|
@ -71,6 +74,9 @@ function App() {
|
|||
|
||||
{/* Pages authentification sélection */}
|
||||
<Route path="/auth-selection" element={<AuthSelection />} />
|
||||
|
||||
{/* Pages authentification sélection */}
|
||||
<Route path="/oauth/callback" element={<OAuthCallback />} />
|
||||
</Routes>
|
||||
</main>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { useNavigate } from 'react-router-dom';
|
||||
import { Link, useNavigate } from 'react-router-dom';
|
||||
import * as React from 'react';
|
||||
import './header.css';
|
||||
import { Button } from '@mui/material';
|
||||
|
|
@ -32,6 +32,14 @@ const Header: React.FC<HeaderProps> = ({ isLoggedIn, handleLogout }) => {
|
|||
Logout
|
||||
</Button>
|
||||
)}
|
||||
|
||||
{!isLoggedIn() && (
|
||||
<div className="auth-selection-btn">
|
||||
<Link to="/auth-selection">
|
||||
<button className="auth-btn">Connexion</button>
|
||||
</Link>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
|
|
|||
27
client/src/pages/AuthSelection/AuthCallback.tsx
Normal file
27
client/src/pages/AuthSelection/AuthCallback.tsx
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
import { useEffect } from 'react';
|
||||
import { useNavigate, useLocation } from 'react-router-dom';
|
||||
import apiService from '../../services/ApiService';
|
||||
|
||||
const OAuthCallback: React.FC = () => {
|
||||
const navigate = useNavigate();
|
||||
const location = useLocation();
|
||||
|
||||
useEffect(() => {
|
||||
const searchParams = new URLSearchParams(location.search);
|
||||
const user = searchParams.get('user');
|
||||
|
||||
if (user) {
|
||||
// Save user data to localStorage or sessionStorage
|
||||
apiService.saveToken(user);
|
||||
|
||||
// Navigate to the dashboard or another page
|
||||
navigate('/');
|
||||
} else {
|
||||
navigate('/auth-selection');
|
||||
}
|
||||
}, [location, navigate]);
|
||||
|
||||
return <div>Loading...</div>;
|
||||
};
|
||||
|
||||
export default OAuthCallback;
|
||||
|
|
@ -33,7 +33,7 @@ const SimpleLogin: React.FC = () => {
|
|||
return;
|
||||
}
|
||||
else {
|
||||
navigate("/teacher/Dashboard")
|
||||
navigate("/")
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -6,13 +6,6 @@ import { Link } from 'react-router-dom';
|
|||
const Home: React.FC = () => {
|
||||
return (
|
||||
<div className="page">
|
||||
|
||||
<div className="auth-selection-btn">
|
||||
<Link to="/auth-selection">
|
||||
<button className="auth-btn">Connexion</button>
|
||||
</Link>
|
||||
</div>
|
||||
|
||||
<div className="btn-container">
|
||||
|
||||
<Link to="/student/join-room" className="student-btn">
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ class ApiService {
|
|||
}
|
||||
|
||||
// Helpers
|
||||
private saveToken(token: string): void {
|
||||
public saveToken(token: string): void {
|
||||
const now = new Date();
|
||||
|
||||
const object = {
|
||||
|
|
|
|||
|
|
@ -68,7 +68,6 @@ app.use(session({
|
|||
}));
|
||||
|
||||
authManager = new AuthManager(app)
|
||||
|
||||
app.use(errorHandler)
|
||||
|
||||
// Start server
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ class PassportOAuth {
|
|||
(req, res) => {
|
||||
if (req.user) {
|
||||
res.json(req.user)
|
||||
//const redirectUrl = `http://your-frontend-url.com/oauth/callback?user=${encodeURIComponent(req.user)}`;
|
||||
//res.redirect(redirectUrl);
|
||||
console.info(`L'utilisateur '${req.user.name}' vient de se connecter`)
|
||||
} else {
|
||||
res.status(401).json({ error: "L'authentification a échoué" });
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
const fs = require('fs');
|
||||
var passport = require('passport')
|
||||
var authprovider = require('../../models/authProvider')
|
||||
|
||||
class PassportJs{
|
||||
constructor(authmanager,settings){
|
||||
|
|
@ -9,10 +10,10 @@ class PassportJs{
|
|||
this.endpoint = "/api/auth"
|
||||
}
|
||||
|
||||
registerAuth(expressapp){
|
||||
async registerAuth(expressapp){
|
||||
expressapp.use(passport.initialize());
|
||||
expressapp.use(passport.session());
|
||||
|
||||
|
||||
for(const p of this.providers){
|
||||
for(const [name,provider] of Object.entries(p)){
|
||||
if(!(provider.type in this.registeredProviders)){
|
||||
|
|
@ -20,6 +21,9 @@ class PassportJs{
|
|||
}
|
||||
try{
|
||||
this.registeredProviders[provider.type].register(expressapp,passport,this.endpoint,name,provider)
|
||||
|
||||
const auth_id = `passportjs_${provider.type}_${name}`
|
||||
authprovider.create(auth_id)
|
||||
} catch(error){
|
||||
console.error(`La connexion ${name} de type ${provider.type} n'as pu être chargé.`)
|
||||
}
|
||||
|
|
@ -35,7 +39,7 @@ class PassportJs{
|
|||
});
|
||||
}
|
||||
|
||||
registerProvider(providerType){
|
||||
async registerProvider(providerType){
|
||||
try{
|
||||
const providerPath = `${process.cwd()}/auth/modules/passport-providers/${providerType}.js`
|
||||
const Provider = require(providerPath);
|
||||
|
|
@ -45,6 +49,15 @@ class PassportJs{
|
|||
console.error(`Le type de connexion '${providerType}' n'as pas pu être chargé dans passportjs.`)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
register(){
|
||||
|
||||
}
|
||||
|
||||
authenticate(){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
30
server/models/authProvider.js
Normal file
30
server/models/authProvider.js
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
const db = require('../config/db.js')
|
||||
const { ObjectId } = require('mongodb');
|
||||
|
||||
class AuthProvider {
|
||||
constructor(name) {
|
||||
this._id = new ObjectId();
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
async create(name) {
|
||||
await db.connect()
|
||||
const conn = db.getConnection();
|
||||
|
||||
const collection = conn.collection('authprovider');
|
||||
|
||||
const existingauth = await collection.findOne({ name:name });
|
||||
|
||||
if(foldersCollection){
|
||||
return existingauth._id;
|
||||
}
|
||||
|
||||
const newProvider = {
|
||||
name:name
|
||||
}
|
||||
const result = await foldersCollection.insertOne(newProvider);
|
||||
return result.insertedId;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new AuthProvider;
|
||||
14
server/models/authUserAssociation.js
Normal file
14
server/models/authUserAssociation.js
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
const db = require('../config/db.js')
|
||||
const { ObjectId } = require('mongodb');
|
||||
|
||||
|
||||
class AuthUserAssociation {
|
||||
constructor(authProviderId, authId, userId) {
|
||||
this._id = new ObjectId();
|
||||
this.authProvider_id = authProviderId;
|
||||
this.auth_id = authId;
|
||||
this.user_id = userId;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new AuthUserAssociation;
|
||||
13
server/models/userAuthAssociation.js
Normal file
13
server/models/userAuthAssociation.js
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
const db = require('../config/db.js')
|
||||
const { ObjectId } = require('mongodb');
|
||||
|
||||
|
||||
class AuthUserAssoc {
|
||||
constructor(authProviderId, authId, userId) {
|
||||
this._id = new ObjectId();
|
||||
this.authProvider_id = authProviderId;
|
||||
this.auth_id = authId;
|
||||
this.user_id = userId;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in a new issue