|
@@ -1,45 +1,87 @@
|
|
|
-import { Strategy as JwtStrategy, ExtractJwt } from 'passport-jwt';
|
|
|
|
|
-import { PassportStatic } from 'passport';
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ Strategy as JwtStrategy,
|
|
|
|
|
+ ExtractJwt,
|
|
|
|
|
+ VerifiedCallback,
|
|
|
|
|
+} from 'passport-jwt';
|
|
|
import { Injectable } from '@nestjs/common';
|
|
import { Injectable } from '@nestjs/common';
|
|
|
import * as admin from 'firebase-admin';
|
|
import * as admin from 'firebase-admin';
|
|
|
|
|
+import * as passport from 'passport';
|
|
|
|
|
+
|
|
|
|
|
+export interface ServiceAccount {
|
|
|
|
|
+ projectId?: string;
|
|
|
|
|
+ clientEmail?: string;
|
|
|
|
|
+ privateKey?: string;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
@Injectable()
|
|
@Injectable()
|
|
|
export class AuthConfig {
|
|
export class AuthConfig {
|
|
|
- constructor(private readonly passport: PassportStatic) {
|
|
|
|
|
|
|
+ private firebaseAdmin!: admin.app.App;
|
|
|
|
|
+
|
|
|
|
|
+ constructor() {
|
|
|
this.initializeFirebase();
|
|
this.initializeFirebase();
|
|
|
this.configurePassport();
|
|
this.configurePassport();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private initializeFirebase() {
|
|
|
|
|
- const serviceAccount = require('path/to/your/serviceAccountKey.json');
|
|
|
|
|
- admin.initializeApp({
|
|
|
|
|
- credential: admin.credential.cert(serviceAccount),
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Initialise Firebase Admin SDK avec les informations du compte de service.
|
|
|
|
|
+ */
|
|
|
|
|
+ private initializeFirebase(): void {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
|
|
|
+ const serviceAccount = {
|
|
|
|
|
+ projectId: 'monhopital',
|
|
|
|
|
+ privateKey:
|
|
|
|
|
+ '-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCTmdIetvaCr9b+\n8yfmeFeL8iCaHeSVMlDicms171htwB6RtTi+66hLbEUQoPAlA7MXVDatFpwDS/pw\n/KAdZFxTKjDIO4/CmWxZn+eJZ/fD41EghWDyjVyXb+DwLmKVGAJLtW0iGxU2yyB5\nXbc5aLCxFFBcXv2nASS0RbYuL9Nk4wjTMq4MZZZ4n3oJ/Ru2Sp4ftg0NRe8lMiuy\nL+Xzzqivqha5b/AJh5JBQXTmilatORk2ZRzKtRqehtObEjWbkilEx5FS1rpSlgHS\nQKijWXzAs+IxufieOX/1Usa3KxlSbA2UqdxfYQnn2NfKg0GzXqruzOkJju5HsIAI\nDY+BSnXJAgMBAAECggEAQtw/8Ufh/KsYkd6lqWHEDpG8sPNvkyH6v8kixYjJHtYT\nQt+7d8iaMKg31OOCRNIbMysjpV6Dh37IUJwvD4FhzQ5kkJ9ibL1A9oxXvseI1YRI\nQJoKo3Tjh3nXhBUO9QiuKYtihzuLbYmwCSopkGja+SwBhwZEkn0TGlIlx2BEuwLo\nffz0nl8GL9jhY2v2JUm1zmhMIFRqXuAM/cWSYmtsgtQBlXwK9I2Drzt111ClryrP\nELC8cz7ZSibSZQi3sECAqKfenT6Pymicb6qMsUEGze4IkJyhAC55iF2eVJPc0d+J\nCQKzqrKyHf58aJ2VwOAR5bUzE1CxeqAIwCjfm08QHQKBgQC1pJrEGwSumzZvWC6r\n9VfQLqigfq1NfEJ+dm0Z4v1qK4hNKk1kR9j3MiBtgAE5N6yqK8T5oN4gZnWa3VFf\nO8F9GI/T0QQ9L334rTfQL79WtTpJVhtH3zmws1503kjMCP4IGv7xWXQliAdJaMBP\nHGbZZ1K3m4r8vgygkHcn7F4A2wKBgQDQBb/lFcw+aNKbMVDvzIoXQ7kgbNKbyPE6\n49U3FLmxzrpLp5gGqMy9+h8UVCwhR+jodkEzw3Gu+NlP4y1spyDRfAEtpMDy3w10\nzeEC6ha4aJUKcnUABZF6Fi5iDqyrjx7IW3H7LgVFkfmiQfnf99FgtC3/28rDn9ui\n9uEcPQVDKwKBgQCPG0U3tZWlvvFPHel/Xwc1JF2EPOlqv7hfjAv+tiAzcmKrcOWS\nWSyt7JcxzgSowJ1PYLaKeVwnqLGFNlKythCF70D5f5ZYYj9cGZR8d/HGbXejaayK\nnmsENPz5FFvELF1/o00yduiT3SzogBfq/BRnugioUWpaH50xL0BBeu7AuwKBgQCO\nVYDJlLKdeUexXHsOuRs7c+E1qIAqi8FTFBUNjSbJ3LNnlJLW66S70Gp3lGhllTht\n5owSiQY+PJMksEKid3BjJcAApRxIkgo5A62UOuu03gosjcg0bZruuEKgYX4QHOtp\nF/jTbte4lHsEZLQ+ZOhkjKR0zsTcOYMk7Ft24OG65QKBgQCb0Jw4ZXfy6L00Hhui\nIR1VZDL7tvX2OArhcuJLn+btGHKD/ZythWZYsyWdktXWWWO5Q28T05wQlb41QINf\nwZQ0xhUS1ESkCtcTS+GFSXbWNj2GsRiB4J84FmTLj/RX5uZbJGpZAnMcLpmzGHFw\nhxJoNoNm0XlG4hrjZzIsk0fFSg==\n-----END PRIVATE KEY-----\n',
|
|
|
|
|
+ clientEmail:
|
|
|
|
|
+ 'firebase-adminsdk-8gixa@monhopital.iam.gserviceaccount.com',
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ this.firebaseAdmin = admin.initializeApp({
|
|
|
|
|
+ credential: admin.credential.cert(serviceAccount),
|
|
|
|
|
+ });
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error("Erreur lors de l'initialisation de Firebase :", error);
|
|
|
|
|
+ throw new Error("Échec de l'initialisation de Firebase");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public configurePassport() {
|
|
|
|
|
- // remettre en private
|
|
|
|
|
- this.passport.use(
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Configure Passport.js avec la stratégie JWT.
|
|
|
|
|
+ */
|
|
|
|
|
+ public configurePassport(): void {
|
|
|
|
|
+ passport.use(
|
|
|
new JwtStrategy(
|
|
new JwtStrategy(
|
|
|
{
|
|
{
|
|
|
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
|
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
|
|
|
- secretOrKeyProvider: (request, rawJwtToken, done) => {
|
|
|
|
|
- admin
|
|
|
|
|
- .auth()
|
|
|
|
|
- .verifyIdToken(rawJwtToken)
|
|
|
|
|
- .then((decodedToken) => {
|
|
|
|
|
- done(null, decodedToken);
|
|
|
|
|
- })
|
|
|
|
|
- .catch((error) => {
|
|
|
|
|
- done(error, false);
|
|
|
|
|
- });
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ secretOrKey: '1002158efa1ed0f290ee1100ee9b6f73887bbf5e', // Utilisation d'une clé secrète statique
|
|
|
},
|
|
},
|
|
|
- (jwtPayload, done) => {
|
|
|
|
|
- // Vérifiez le payload JWT et retournez l'utilisateur
|
|
|
|
|
- return done(null, jwtPayload);
|
|
|
|
|
|
|
+ async (jwtPayload: any, done: VerifiedCallback) => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // Validez le payload JWT ici (par exemple, chargez l'utilisateur correspondant)
|
|
|
|
|
+ const user = await this.validateUser(jwtPayload.uid); // Exemple de validation utilisateur
|
|
|
|
|
+ if (!user) {
|
|
|
|
|
+ return done(null, false); // Utilisateur non trouvé
|
|
|
|
|
+ }
|
|
|
|
|
+ return done(null, user); // Utilisateur valide
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ return done(error, false); // Erreur lors de la validation
|
|
|
|
|
+ }
|
|
|
},
|
|
},
|
|
|
),
|
|
),
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Valide un utilisateur en fonction de son UID.
|
|
|
|
|
+ */
|
|
|
|
|
+ private async validateUser(uid: string): Promise<any> {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // Récupérez les informations de l'utilisateur depuis Firebase
|
|
|
|
|
+ const user = await this.firebaseAdmin.auth().getUser(uid);
|
|
|
|
|
+ return user.toJSON(); // Retournez les données utilisateur sous forme d'objet
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ console.error("Erreur lors de la validation de l'utilisateur :", error);
|
|
|
|
|
+ return null; // Utilisateur non trouvé
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|