Compare commits

..

No commits in common. "2499f78b6a165e91b9f641a02561e815b66ab808" and "3a2baaaa1ca79fd1ccb100ff4c5354e511c83c9a" have entirely different histories.

6 changed files with 15 additions and 143 deletions

View file

@ -1,6 +1,6 @@
# client # client
FROM node:20 AS build FROM node:18 AS build
WORKDIR /usr/src/app/client WORKDIR /usr/src/app/client

View file

@ -1,109 +0,0 @@
version: '3'
services:
frontend:
build:
context: ./client
dockerfile: Dockerfile
container_name: frontend
ports:
- "5173:5173"
restart: always
backend:
build:
context: ./server
dockerfile: Dockerfile
container_name: backend
ports:
- "3000:3000"
environment:
PORT: 3000
MONGO_URI: "mongodb://mongo:27017/evaluetonsavoir"
MONGO_DATABASE: evaluetonsavoir
EMAIL_SERVICE: gmail
SENDER_EMAIL: infoevaluetonsavoir@gmail.com
EMAIL_PSW: 'vvml wmfr dkzb vjzb'
JWT_SECRET: haQdgd2jp09qb897GeBZyJetC8ECSpbFJe
SESSION_Secret: 'lookMomImQuizzing'
SITE_URL: http://localhost
FRONTEND_PORT: 5173
USE_PORTS: false
AUTHENTICATED_ROOMS: false
volumes:
- ./server/auth_config.json:/usr/src/app/serveur/config/auth_config.json
depends_on:
- mongo
- keycloak
restart: always
# Ce conteneur sert de routeur pour assurer le bon fonctionnement de l'application
nginx:
image: fuhrmanator/evaluetonsavoir-routeur:latest
container_name: nginx
ports:
- "80:80"
depends_on:
- backend
- frontend
restart: always
# Ce conteneur est la base de données principale pour l'application
mongo:
image: mongo
container_name: mongo
ports:
- "27017:27017"
tty: true
volumes:
- mongodb_data:/data/db
restart: always
# Ce conteneur cherche des mises à jour à 5h du matin
watchtower:
image: containrrr/watchtower
container_name: watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=America/Montreal
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_DEBUG=true
- WATCHTOWER_INCLUDE_RESTARTING=true
- WATCHTOWER_SCHEDULE=0 0 5 * * * # At 5 am everyday
restart: always
watchtower-once:
image: containrrr/watchtower
container_name: watchtower-once
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --run-once
environment:
- TZ=America/Montreal
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_DEBUG=true
- WATCHTOWER_INCLUDE_RESTARTING=true
restart: "no"
keycloak:
container_name: keycloak
image: quay.io/keycloak/keycloak:latest
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin123
KC_HEALTH_ENABLED: 'true'
KC_FEATURES: preview
ports:
- "8080:8080"
volumes:
- ./oauth-tester/config.json:/opt/keycloak/data/import/realm-config.json
command:
- start-dev
- --import-realm
- --hostname-strict=false
volumes:
mongodb_data:
external: false

View file

@ -3,19 +3,18 @@ version: '3'
services: services:
frontend: frontend:
image: fuhrmanator/evaluetonsavoir-frontend:latest build:
context: ./client
dockerfile: Dockerfile
container_name: frontend container_name: frontend
environment:
# Define empty VITE_BACKEND_URL because it's production
- VITE_BACKEND_URL=
# Define empty VITE_BACKEND_SOCKET_URL so it will default to window.location.host
- VITE_BACKEND_SOCKET_URL=
ports: ports:
- "5173:5173" - "5173:5173"
restart: always restart: always
backend: backend:
image: fuhrmanator/evaluetonsavoir-backend:latest build:
context: ./server
dockerfile: Dockerfile
container_name: backend container_name: backend
ports: ports:
- "3000:3000" - "3000:3000"
@ -29,12 +28,11 @@ services:
JWT_SECRET: haQdgd2jp09qb897GeBZyJetC8ECSpbFJe JWT_SECRET: haQdgd2jp09qb897GeBZyJetC8ECSpbFJe
SESSION_Secret: 'lookMomImQuizzing' SESSION_Secret: 'lookMomImQuizzing'
SITE_URL: http://localhost SITE_URL: http://localhost
OIDC_URL: https://evalsa.etsmtl.ca
FRONTEND_PORT: 5173 FRONTEND_PORT: 5173
USE_PORTS: false USE_PORTS: false
AUTHENTICATED_ROOMS: false AUTHENTICATED_ROOMS: false
volumes: volumes:
- /opt/EvalueTonSavoir/auth_config.json:/usr/src/app/serveur/auth_config.json - ./server/auth_config.json:/usr/src/app/serveur/config/auth_config.json
depends_on: depends_on:
- mongo - mongo
- keycloak - keycloak
@ -100,7 +98,7 @@ services:
ports: ports:
- "8080:8080" - "8080:8080"
volumes: volumes:
- /opt/EvalueTonSavoir/oauth-tester/config.json:/opt/keycloak/data/import/realm-config.json - ./oauth-tester/config.json:/opt/keycloak/data/import/realm-config.json
command: command:
- start-dev - start-dev
- --import-realm - --import-realm

View file

@ -4,7 +4,6 @@ var users = require('../../../models/users');
var { hasNestedValue } = require('../../../utils'); var { hasNestedValue } = require('../../../utils');
const { MISSING_OIDC_PARAMETER } = require('../../../constants/errorCodes.js'); const { MISSING_OIDC_PARAMETER } = require('../../../constants/errorCodes.js');
const AppError = require('../../../middleware/AppError.js'); const AppError = require('../../../middleware/AppError.js');
const expressListEndpoints = require('express-list-endpoints');
class PassportOpenIDConnect { class PassportOpenIDConnect {
constructor(passportjs, auth_name) { constructor(passportjs, auth_name) {
@ -24,16 +23,11 @@ class PassportOpenIDConnect {
async register(app, passport, endpoint, name, provider) { async register(app, passport, endpoint, name, provider) {
const config = await this.getConfigFromConfigURL(name, provider); const config = await this.getConfigFromConfigURL(name, provider)
const cb_url = `${process.env['OIDC_URL']}${endpoint}/${name}/callback`; const cb_url = `${process.env['BACKEND_URL']}${endpoint}/${name}/callback`
const self = this; const self = this
const scope = 'openid profile email ' + `${provider.OIDC_ADD_SCOPE}`; const scope = 'openid profile email ' + `${provider.OIDC_ADD_SCOPE}`
console.log(config);
console.log('');
console.log(cb_url);
console.log('');
console.log(scope);
passport.use(name, new OpenIDConnectStrategy({ passport.use(name, new OpenIDConnectStrategy({
issuer: config.issuer, issuer: config.issuer,
authorizationURL: config.authorization_endpoint, authorizationURL: config.authorization_endpoint,
@ -55,6 +49,7 @@ class PassportOpenIDConnect {
roles: [] roles: []
}; };
if (hasNestedValue(profile, provider.OIDC_ROLE_TEACHER_VALUE)) received_user.roles.push('teacher') if (hasNestedValue(profile, provider.OIDC_ROLE_TEACHER_VALUE)) received_user.roles.push('teacher')
if (hasNestedValue(profile, provider.OIDC_ROLE_STUDENT_VALUE)) received_user.roles.push('student') if (hasNestedValue(profile, provider.OIDC_ROLE_STUDENT_VALUE)) received_user.roles.push('student')
@ -104,8 +99,7 @@ class PassportOpenIDConnect {
} }
} }
); );
console.info(`Ajout de la connexion : ${name}(OIDC)`); console.info(`Ajout de la connexion : ${name}(OIDC)`)
console.log(expressListEndpoints(app));
} }
} }

View file

@ -14,7 +14,6 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.4.4", "dotenv": "^16.4.4",
"express": "^4.18.2", "express": "^4.18.2",
"express-list-endpoints": "^7.1.1",
"express-session": "^1.18.0", "express-session": "^1.18.0",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"mongodb": "^6.3.0", "mongodb": "^6.3.0",
@ -3248,15 +3247,6 @@
"url": "https://opencollective.com/express" "url": "https://opencollective.com/express"
} }
}, },
"node_modules/express-list-endpoints": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/express-list-endpoints/-/express-list-endpoints-7.1.1.tgz",
"integrity": "sha512-SA6YHH1r6DrioJ4fFJNqiwu1FweGFqJZO9KBApMzwPosoSGPOX2AW0wiMepOXjojjEXDuP9whIvckomheErbJA==",
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/express-session": { "node_modules/express-session": {
"version": "1.18.1", "version": "1.18.1",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz",

View file

@ -18,7 +18,6 @@
"cors": "^2.8.5", "cors": "^2.8.5",
"dotenv": "^16.4.4", "dotenv": "^16.4.4",
"express": "^4.18.2", "express": "^4.18.2",
"express-list-endpoints": "^7.1.1",
"express-session": "^1.18.0", "express-session": "^1.18.0",
"jsonwebtoken": "^9.0.2", "jsonwebtoken": "^9.0.2",
"mongodb": "^6.3.0", "mongodb": "^6.3.0",