diff --git a/.env.example b/.env.example index 41cb9efb6286629090a4284d526ebf0009c7d9fd..71bcc64ace2f3063e53af4ba8724bf44f1a52872 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ AUTH_SECRET_KEY= AUTH_ID= -SESSION_SECRET= \ No newline at end of file +SESSION_SECRET= +REDIRECT_URI={redirect after auth, not required, default = /} \ No newline at end of file diff --git a/src/middlewares/auth/complete.ts b/src/middlewares/auth/complete.ts new file mode 100644 index 0000000000000000000000000000000000000000..ac2036d50462fbdd7af9f1a49b62302347b944e4 --- /dev/null +++ b/src/middlewares/auth/complete.ts @@ -0,0 +1,60 @@ +import Profile, { Role } from "../../models/ProfileSchema"; +import { Request, Response } from "express"; +import { oauth2, scope } from "../../utils/auth"; + +import { authschResponse } from "../../utils/types/authschResponse"; +import axios from "axios"; + +const complete = () => async (req: Request, res: Response) => { + const tokenConfig = { + code: req.query.code, + scope: scope, + redirect_uri: "", + }; + + try { + const token = await oauth2().authorizationCode.getToken(tokenConfig); + await axios + .get<authschResponse>( + `https://auth.sch.bme.hu/api/profile/?access_token=${token.access_token}` + ) + .then((response) => { + Profile.findOne( + { external_id: response.data.internal_id }, + (error, profile) => { + if (error) { + console.warn(error); + return res.status(400); + } else { + if (!profile) { + const newProfile = new Profile(); + newProfile.external_id = response.data.internal_id; + newProfile.email = response.data.mail; + newProfile.name = `${response.data.sn} ${response.data.givenName}`; + newProfile.save((err) => { + if (err) { + console.log(err); + return res.status(400); + } + }); + } + } + } + ); + req.session!.user = { + id: String(response.data.internal_id), + email: String(response.data.mail), + name: `${response.data.sn} ${response.data.givenName}`, + token, + }; + }) + .catch(function (error) { + console.log(error); + }); + return res.redirect(process.env.REDIRECT_URI || "/"); + } catch (error) { + console.log("Access Token Error", error.message); + } +}; + +export default complete;