cvgen/controllers/linkedin.js
2025-09-09 15:30:31 +02:00

88 lines
2.2 KiB
JavaScript

// filepath: c:\Users\amaizy\Desktop\cvgen\controllers\linkedin.js
const axios = require("axios");
const querystring = require("querystring");
const clientId = "780w7gsy8eysmj";
const clientSecret = "WPL_AP1.w6OTTkAndAdT3PYF.UZEcwQ==";
const redirectUri = "http://localhost:4200/api/auth/linkedin/callback";
const scope = "openid profile email";
let accessToken = "";
const authenticateUser = (req, res) => {
const authUrl = `https://www.linkedin.com/oauth/v2/authorization?${querystring.stringify(
{
response_type: "code",
client_id: clientId,
redirect_uri: redirectUri,
scope: scope,
}
)}`;
res.redirect(authUrl);
};
const handleCallback = async (req, res) => {
const { code } = req.query;
try {
const tokenResponse = await axios.post(
"https://www.linkedin.com/oauth/v2/accessToken",
querystring.stringify({
grant_type: "authorization_code",
code: code,
redirect_uri: redirectUri,
client_id: clientId,
client_secret: clientSecret,
})
);
const accessToken = tokenResponse.data.access_token;
// Stocke dans la session
req.session.user = {
accessToken,
};
// Redirige vers /profile après authentification
res.redirect("/profile");
} catch (error) {
console.error(
"LinkedIn token error:",
error.response ? error.response.data : error.message
);
res.status(500).send("Error retrieving access token.");
}
};
const getUserProfile = async (req, res) => {
try {
const token = req.session?.user?.accessToken;
if (!token) {
return res.status(401).json({ error: "Aucun accessToken en session." });
}
const { data } = await axios.get("https://api.linkedin.com/v2/userinfo", {
headers: {
Authorization: `Bearer ${token}`,
Accept: "application/json",
},
});
return res.json(data);
} catch (error) {
console.error(
"LinkedIn OIDC error:",
error.response?.data || error.message
);
return res
.status(500)
.json({ error: "Erreur lors de la récupération du profil." });
}
};
module.exports = {
authenticateUser,
handleCallback,
getUserProfile,
};