diff --git a/src/index.ts b/src/index.ts index 8f793b9d26beea53c0fab34e19e158287fdc77c9..e880caa51515ba7eca2a69fe1f83c570176280a9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,10 +12,15 @@ app.use(expressSession({ secret: process.env.SESSION_SECRET || "alma", resave: false, saveUninitialized: true, - cookie: { secure: true } + cookie: { secure: false } })); -app.get("/", (req: Request, res: Response) => res.send("Hel World!")); +app.get("/", (req: Request, res: Response) => { + let message = "World!"; + if(req.session!.user) + message = req.session!.user!.sn || "World!"; + res.send( "Hello " + message) +}); // Register routes authRoute(app); diff --git a/src/middlewares/auth/authenticated.ts b/src/middlewares/auth/authenticated.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef36ada2061092d69082adcfe186e5e8c69e93ec --- /dev/null +++ b/src/middlewares/auth/authenticated.ts @@ -0,0 +1,10 @@ +import {Request, Response, NextFunction} from "express"; + +const authenticated = () => (req : Request, res : Response, next: NextFunction ) =>{ + if(req.session!.user) + next(); + res.status(403); + res.json({message: "You have to login to see this page"}); +} + +export default authenticated; \ 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..dedc5c8c0d95f6611bc2731264f4e851c15128dd --- /dev/null +++ b/src/middlewares/auth/complete.ts @@ -0,0 +1,29 @@ +import { Request, Response } from 'express'; +import {oauth2, scope} from '../../utils/auth' +import axios from "axios"; + + +const complete = () => async (req: Request, res: Response) => { + const tokenConfig = { + code: req.query.code, + scope: scope, + redirect_uri: "" + }; + + try { + const result = await oauth2().authorizationCode.getToken(tokenConfig); + const token = oauth2().accessToken.create(result); + await axios.get(`https://auth.sch.bme.hu/api/profile/?access_token=${token.token.access_token}`) + .then( (response) => { + req.session!.user = response.data; + }) + .catch(function (error) { + console.log(error); + }); + res.redirect('/'); + } catch (error) { + console.log('Access Token Error', error.message); + } +}; + +export default complete; \ No newline at end of file diff --git a/src/middlewares/auth/login.ts b/src/middlewares/auth/login.ts new file mode 100644 index 0000000000000000000000000000000000000000..356629f10a2f8bda13639201a837cdf7416b6fcd --- /dev/null +++ b/src/middlewares/auth/login.ts @@ -0,0 +1,13 @@ +import { Request, Response } from 'express'; +import {oauth2, scope} from '../../utils/auth' + + +const authorizationUri = oauth2().authorizationCode.authorizeURL({ + scope: scope, +}); + + +const login = () => (req: Request, res: Response) => res.redirect(authorizationUri); + + +export default login; \ No newline at end of file diff --git a/src/middlewares/auth/logout.ts b/src/middlewares/auth/logout.ts new file mode 100644 index 0000000000000000000000000000000000000000..040bba6460c7d19c67c1b2583544ccbe8eca508c --- /dev/null +++ b/src/middlewares/auth/logout.ts @@ -0,0 +1,9 @@ +import { Request, Response } from 'express'; + +const logout = () => (req : Request, res : Response) =>{ + console.log(req.session!.user); + req.session!.destroy(() => console.log("user logged out.")); + res.redirect("/"); +} + +export default logout; \ No newline at end of file diff --git a/src/routes/auth.ts b/src/routes/auth.ts new file mode 100644 index 0000000000000000000000000000000000000000..b930250fa6704fd6b43c0f1191e7ff25326c00e6 --- /dev/null +++ b/src/routes/auth.ts @@ -0,0 +1,15 @@ +import { Application } from 'express'; +import login from '../middlewares/auth/login'; +import complete from '../middlewares/auth/complete'; +import logout from '../middlewares/auth/logout'; +import authenticated from '../middlewares/auth/authenticated' + + const authRout = (app: Application): void => { + app.get('/login', login() ); + + app.get('/complete', complete() ); + + app.get('/logout', authenticated(), logout() ); +} + +export default authRout; \ No newline at end of file diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 0000000000000000000000000000000000000000..d00f20423b0e457c8a03b7a34e4b45915c5c9b0d --- /dev/null +++ b/src/utils/auth.ts @@ -0,0 +1,19 @@ +import simpleOauth2 from "simple-oauth2"; + +const oauth2 = () => simpleOauth2.create( + { + client: { + id: process.env.AUTH_ID || "", + secret: process.env.AUTH_SECRET_KEY || "" + }, + auth: { + tokenHost: 'https://auth.sch.bme.hu', + tokenPath: '/oauth2/token', + authorizePath: '/site/login' + } + } +); + +const scope : string[] = ['basic', 'mail', 'sn', 'givenName'] + +export {oauth2, scope}; \ No newline at end of file