Skip to content
Snippets Groups Projects
Commit 81c6f79a authored by bmate711's avatar bmate711
Browse files

Merge branch 'dev' into 'feature/news_api'

# Conflicts:
#   src/index.ts
#   tsconfig.json
parents bec0016b ba214b32
No related branches found
No related tags found
2 merge requests!10Feature/12 dev auto deploy,!6Feature/news api
...@@ -26,23 +26,18 @@ const app: Application = express(); ...@@ -26,23 +26,18 @@ const app: Application = express();
app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use( app.use(expressSession({
expressSession({ secret: process.env.SESSION_SECRET || "secret",
secret: process.env.SESSION_SECRET || "alma", resave: false,
resave: false, saveUninitialized: true,
saveUninitialized: true, cookie: { secure: false }
cookie: { secure: false } }));
})
);
app.use((req: Request, res: Response, next: NextFunction) => {
res.data = {};
next();
});
app.get("/", (req: Request, res: Response) => { app.get("/", (req: Request, res: Response) => {
let message = "World!"; let message = "World!";
if (req.session!.user) message = req.session!.user!.sn || "World!"; if(req.session!.user)
res.send("Hello " + message); message = req.session!.user!.name || "World!";
res.send( "Hello " + message)
}); });
// Register routes // Register routes
......
import {Request, Response, NextFunction} from "express"; import {Request, Response, NextFunction} from "express";
const authenticated = () => (req : Request, res : Response, next: NextFunction ) =>{ const authenticated = () => (req : Request, res : Response, next: NextFunction ) =>{
if(req.session!.user) if(req.session!.user)
next(); next();
else{ else{
res.status(403); res.status(403);
res.json({message: "You have to login to see this page"}); res.json({message: "You have to login to see this page"});
} }
} }
export default authenticated; export default authenticated;
\ No newline at end of file
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import {oauth2, scope} from '../../utils/auth' import {oauth2, scope} from '../../utils/auth'
import axios from "axios"; import axios from "axios";
const complete = () => async (req: Request, res: Response) => { const complete = () => async (req: Request, res: Response) => {
const tokenConfig = { const tokenConfig = {
code: req.query.code, code: req.query.code,
scope: scope, scope: scope,
redirect_uri: "" redirect_uri: ""
}; };
try { try {
const result = await oauth2().authorizationCode.getToken(tokenConfig); const token = await oauth2().authorizationCode.getToken(tokenConfig);
const token = oauth2().accessToken.create(result); await axios.get(`https://auth.sch.bme.hu/api/profile/?access_token=${token.access_token}`)
await axios.get(`https://auth.sch.bme.hu/api/profile/?access_token=${token.token.access_token}`) .then( (response) => {
.then( (response) => { req.session!.user = {
req.session!.user = response.data; id: String(response.data.basic),
}) email: String(response.data.mail),
.catch(function (error) { name: `${response.data.sn} ${response.data.givenName}` ,
console.log(error); token,
}); };
res.redirect('/'); })
} catch (error) { .catch(function (error) {
console.log('Access Token Error', error.message); console.log(error);
} });
}; res.redirect('/');
} catch (error) {
console.log('Access Token Error', error.message);
}
};
export default complete; export default complete;
\ No newline at end of file
import { Request, Response } from 'express'; import { Request, Response } from 'express';
import {oauth2, scope} from '../../utils/auth' import {oauth2, scope} from '../../utils/auth'
const authorizationUri = oauth2().authorizationCode.authorizeURL({ const authorizationUri = oauth2().authorizationCode.authorizeURL({
scope: scope, scope: scope,
}); });
const login = () => (req: Request, res: Response) => res.redirect(authorizationUri); const login = () => (req: Request, res: Response) => res.redirect(authorizationUri);
export default login; export default login;
\ No newline at end of file
import { Request, Response } from 'express'; import { Request, Response } from 'express';
const logout = () => (req : Request, res : Response) =>{ const logout = () => (req : Request, res : Response) =>{
req.session!.destroy(() => console.log("user logged out.")); req.session!.destroy(() => console.log("user logged out."));
res.redirect("/"); res.redirect("/");
} }
export default logout; export default logout;
\ No newline at end of file
import { Request, Response, NextFunction } from 'express';
import { oauth2 } from '../../utils/auth'
const refreshToken = () => async (req: Request, res: Response, next: NextFunction) => {
if (req.session && req.session.user) {
try{
let accessToken = oauth2().accessToken.create(req.session.user.token);
if (accessToken.expired(Number(process.env.AUTH_TOKEN_EXPIRATION_WINDOW_IN_SECONDS))) {
req.session.user.token = await accessToken.refresh().then(accessToken => accessToken.token);
}
}catch (error) {
console.log('Error refreshing access token: ', error.message);
}
}
next();
}
export default refreshToken;
\ No newline at end of file
import { Token } from "simple-oauth2";
export interface User{
email: string,
name: string,
id: string,
token: Token,
}
\ No newline at end of file
...@@ -2,9 +2,9 @@ import { Application } from 'express'; ...@@ -2,9 +2,9 @@ import { Application } from 'express';
import login from '../middlewares/auth/login'; import login from '../middlewares/auth/login';
import complete from '../middlewares/auth/complete'; import complete from '../middlewares/auth/complete';
import logout from '../middlewares/auth/logout'; import logout from '../middlewares/auth/logout';
import authenticated from '../middlewares/auth/authenticated' import authenticated from '../middlewares/auth/authenticated';
const authRout = (app: Application): void => { const authRoute = (app: Application): void => {
app.get('/login', login() ); app.get('/login', login() );
app.get('/complete', complete() ); app.get('/complete', complete() );
...@@ -12,4 +12,4 @@ import authenticated from '../middlewares/auth/authenticated' ...@@ -12,4 +12,4 @@ import authenticated from '../middlewares/auth/authenticated'
app.get('/logout', authenticated(), logout() ); app.get('/logout', authenticated(), logout() );
} }
export default authRout; export default authRoute;
\ No newline at end of file \ No newline at end of file
import { AccessToken } from "simple-oauth2";
import { User } from 'src/models/user.interface';
declare global {
namespace Express {
export interface Session {
user: User | null;
}
}
}
\ No newline at end of file
{ {
"files": [ "files": [
"./src/utils/declarations/response.d.ts", "./src/utils/declarations/response.d.ts",
"./src/utils/declarations/request.d.ts" "./src/utils/declarations/request.d.ts",
"./src/utils/declarations/session.d.ts",
], ],
"compilerOptions": { "compilerOptions": {
"module": "commonjs", "module": "commonjs",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment