Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | 7x 7x 7x 14x 14x 14x 14x 14x 14x 7x 7x 1x 1x 1x 1x 1x 7x 11x 11x 11x 11x 11x 11x 11x 7x 7x 7x 7x 7x 5x 2x 2x | import {Request, Response} from "express"; import * as usersService from "../services/users_service"; import {handleError} from "../utils/handle_error"; import {CustomRequest} from "types/customRequest"; import admin from 'firebase-admin'; import * as dotenv from "dotenv"; dotenv.config(); // Initialize Firebase Admin SDK (ensure Firebase credentials are set in .env) Iif (!admin.apps.length && process.env.FIREBASE_SERVICE_ACCOUNT) { const serviceAccount = JSON.parse(process.env.FIREBASE_SERVICE_ACCOUNT!); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), }); } export const loginUser = async (req: Request, res: Response): Promise<void> => { try { const authProvider = req.body.authProvider; const { email, password } = req.body; const tokens = await usersService.loginUser(email, password, authProvider); Iif (!tokens) { res.status(401).json({ message: 'Invalid credentials' }); return; } res.json(tokens); } catch (err) { handleError(err, res); } }; // Google & Facebook Authentication (using Firebase) export const socialAuth = async (req: Request, res: Response) => { try { const { idToken, authProvider } = req.body; if (!idToken) { console.error("Missing idToken"); // Debugging line return res.status(400).json({ message: 'Missing idToken' }); } if (!authProvider) { console.error("Missing authProvider"); // Debugging line return res.status(400).json({ message: 'Missing authProvider' }); } // Verify the token using Firebase Admin SDK const decodedToken = await admin.auth().verifyIdToken(idToken); if (!decodedToken.email) { console.error("Invalid token - No email found"); // Debugging line return res.status(400).json({ message: 'Invalid token' }); } const email = decodedToken.email; const name = decodedToken.name.toString(); const image = decodedToken.picture; const resultTokens = await usersService.loginUserGoogle(email, authProvider, name, image); if (!resultTokens) { return res.status(401).json({ message: 'Invalid' }); } return res.status(200).json(resultTokens); } catch (error) { console.error("Authentication failed:", error); return res.status(400).json({ message: "Authentication failed", error }); } }; export const logoutUser = async (req: CustomRequest, res: Response): Promise<void> => { try { const { refreshToken } = req.body; const result = await usersService.logoutUser(refreshToken, req.user.id); Iif (!result) { res.status(401).json({ message: 'Invalid refresh token' }); return; } res.json({ message: 'User logged out successfully' }); } catch (err) { handleError(err, res); } }; export const registerUser = async (req: Request, res: Response): Promise<void> => { try { const { username, password, email } = req.body; const authProvider = req.body.authProvider; // Check if the user already exists const existingUser = await usersService.getUserByUsernameOrEmail(username, email); Iif (existingUser) { res.status(400).json({ message: 'Username or email already in use' }); return; } const savedUser = await usersService.registerUser(username, password, email, authProvider); res.status(201).json(savedUser); } catch (err) { handleError(err, res); } }; export const refreshToken = async (req: Request, res: Response): Promise<void> => { try { const { refreshToken } = req.body; Iif (!refreshToken) { res.status(401).json({ message: 'Refresh token required' }); return; } const { newRefreshToken, accessToken } = await usersService.refreshToken(refreshToken); res.json({ accessToken: accessToken, refreshToken: newRefreshToken }); } catch (err) { const e: Error = err as Error res.status(401).json({ message: e.message }); } }; |