diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000000000000000000000000000000000..f0eb61e0f7c69fee6e5f6520e3c6fff8186f964a --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": false +} diff --git a/src/index.ts b/src/index.ts index 187d3597b2638432091cb5ea9b8149207420479d..3aea492cfc79a2af91627310de5cf4bc52ca6671 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,11 @@ import "./utils/env"; -import express, { Request, Response, NextFunction, Application } from "express"; -import mongoose from "mongoose"; + +import express, { Application, NextFunction, Request, Response } from "express"; + +import authRoute from "./routes/auth"; import bodyParser from "body-parser"; import expressSession from "express-session"; -import authRoute from "./routes/auth"; +import mongoose from "mongoose"; import newsRoute from "./routes/news"; import usersRoute from "./routes/user"; @@ -11,12 +13,12 @@ mongoose .connect("mongodb://localhost:27017/bodysch", { useNewUrlParser: true, useCreateIndex: true, - useUnifiedTopology: true + useUnifiedTopology: true, }) .then(() => { console.log("Connected to database"); }) - .catch(err => { + .catch((err) => { console.log( "MongoDB connection error. Please make sure MongoDB is running. " + err ); @@ -27,18 +29,19 @@ const app: Application = express(); app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded -app.use(expressSession({ - secret: process.env.SESSION_SECRET || "secret", - resave: false, - saveUninitialized: true, - cookie: { secure: false } -})); +app.use( + expressSession({ + secret: process.env.SESSION_SECRET || "secret", + resave: false, + saveUninitialized: true, + cookie: { secure: false }, + }) +); app.get("/api/v1/", (req: Request, res: Response) => { let message = "World!"; - if(req.session!.user) - message = req.session!.user!.name || "World!"; - res.send( "Hello " + message) + if (req.session!.user) message = req.session!.user!.name || "World!"; + res.send("Hello " + message); }); // Register routes @@ -49,8 +52,6 @@ newsRoute(app); usersRoute(app); - - app.use((err: any, req: Request, res: Response, next: NextFunction) => { res.status(500).send("Houston, we have a problem!"); diff --git a/src/middlewares/auth/authenticated.ts b/src/middlewares/auth/authenticated.ts index 139a50d949d0b81a8c0f4ca2d5b5f3fbfbb4fb67..8e9d03013726beeb853f6336b5f8dee388edbaf1 100644 --- a/src/middlewares/auth/authenticated.ts +++ b/src/middlewares/auth/authenticated.ts @@ -1,12 +1,15 @@ -import {Request, Response, NextFunction} from "express"; +import { NextFunction, Request, Response } from "express"; -const authenticated = () => (req : Request, res : Response, next: NextFunction ) =>{ - if(req.session!.user) - next(); - else{ - res.status(403); - res.json({message: "You have to login to see this page"}); - } -} +const authenticated = () => ( + req: Request, + res: Response, + next: NextFunction +) => { + if (req.session!.user) next(); + else { + res.status(403); + res.json({ message: "You have to login to see this page" }); + } +}; -export default authenticated; \ No newline at end of file +export default authenticated; diff --git a/src/middlewares/auth/complete.ts b/src/middlewares/auth/complete.ts index 988565680015af76bfebe882c9012ea1c9a9b6d3..28c3f98ffbae2f18719e83a893b9f3e320afe862 100644 --- a/src/middlewares/auth/complete.ts +++ b/src/middlewares/auth/complete.ts @@ -1,33 +1,36 @@ -import { Request, Response } from 'express'; -import {oauth2, scope} from '../../utils/auth' +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: "", + }; -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(`https://auth.sch.bme.hu/api/profile/?access_token=${token.access_token}`) - .then( (response) => { - 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); - }); - res.redirect('/'); - } catch (error) { - console.log('Access Token Error', error.message); - } + try { + const token = await oauth2().authorizationCode.getToken(tokenConfig); + await axios + .get( + `https://auth.sch.bme.hu/api/profile/?access_token=${token.access_token}` + ) + .then((response) => { + 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); + }); + res.redirect("/"); + } catch (error) { + console.log("Access Token Error", error.message); + } }; -export default complete; \ No newline at end of file +export default complete; diff --git a/src/middlewares/auth/login.ts b/src/middlewares/auth/login.ts index a1efd4d702106c65512c6b87c4734fcfd9ec279d..eeb5cad4b60be58df7946dad388629d6cfe24cdc 100644 --- a/src/middlewares/auth/login.ts +++ b/src/middlewares/auth/login.ts @@ -1,13 +1,11 @@ -import { Request, Response } from 'express'; -import {oauth2, scope} from '../../utils/auth' - +import { Request, Response } from "express"; +import { oauth2, scope } from "../../utils/auth"; 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; \ No newline at end of file +export default login; diff --git a/src/middlewares/auth/logout.ts b/src/middlewares/auth/logout.ts index 9367d85fe4d7d7c23604fc1f62ff5f05aa2c5e84..104371befb0c9387d7a81ebcf2a2f2de368a0162 100644 --- a/src/middlewares/auth/logout.ts +++ b/src/middlewares/auth/logout.ts @@ -1,8 +1,8 @@ -import { Request, Response } from 'express'; +import { Request, Response } from "express"; -const logout = () => (req : Request, res : Response) =>{ - req.session!.destroy(() => console.log("user logged out.")); - res.redirect("/"); -} +const logout = () => (req: Request, res: Response) => { + req.session!.destroy(() => console.log("user logged out.")); + res.redirect("/"); +}; -export default logout; \ No newline at end of file +export default logout; diff --git a/src/middlewares/auth/refreshToken.ts b/src/middlewares/auth/refreshToken.ts index 1d857bb151626e418365d095e4e667ec4a183450..4f6c0e7c0f22bd1260a13359bccc17f0ee5cb3fc 100644 --- a/src/middlewares/auth/refreshToken.ts +++ b/src/middlewares/auth/refreshToken.ts @@ -1,18 +1,29 @@ -import { Request, Response, NextFunction } from 'express'; -import { oauth2 } from '../../utils/auth' +import { NextFunction, Request, Response } from "express"; -const refreshToken = () => async (req: Request, res: Response, next: NextFunction) => { +import { oauth2 } from "../../utils/auth"; + +const refreshToken = () => async ( + req: Request, + res: Response, + next: NextFunction +) => { if (req.session && req.session.user) { - try{ + 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); + 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 +export default refreshToken; diff --git a/src/middlewares/news/addNews.ts b/src/middlewares/news/addNews.ts index 43c6437fa20c7d7808dd93b7415c8fb969f616db..026bea1e030c7f53502a70f945bb47f9b18ddcf8 100644 --- a/src/middlewares/news/addNews.ts +++ b/src/middlewares/news/addNews.ts @@ -1,4 +1,5 @@ -import { Request, Response, NextFunction } from "express"; +import { NextFunction, Request, Response } from "express"; + import News from "../../models/NewsSchema"; const addNews = () => { @@ -8,7 +9,7 @@ const addNews = () => { news.text = req.body.text; news.publishedAt = new Date().toDateString(); - news.save(err => { + news.save((err) => { if (err) { } else { res.status(201); diff --git a/src/middlewares/news/deleteNews.ts b/src/middlewares/news/deleteNews.ts index 7f6330375840761cfd595786688d62310018fc38..4382737857e889728d7c15d6b7c6f3bea252494f 100644 --- a/src/middlewares/news/deleteNews.ts +++ b/src/middlewares/news/deleteNews.ts @@ -1,4 +1,5 @@ -import { Request, Response, NextFunction } from "express"; +import { NextFunction, Request, Response } from "express"; + import News from "../../models/NewsSchema"; const deleteNews = () => { diff --git a/src/middlewares/news/getNews.ts b/src/middlewares/news/getNews.ts index e48a3d6cf7a8d2cbb4bd54b035369a1785a63ef6..f99829e7079f3135bb08fbe8dbeba024d18da538 100644 --- a/src/middlewares/news/getNews.ts +++ b/src/middlewares/news/getNews.ts @@ -1,4 +1,5 @@ -import { Request, Response, NextFunction } from "express"; +import { NextFunction, Request, Response } from "express"; + import News from "../../models/NewsSchema"; const getNews = () => { diff --git a/src/middlewares/news/getNewsList.ts b/src/middlewares/news/getNewsList.ts index c55aa8a23b87205f6940ffb38a2de4f947944c15..3f26b9006288c96241e617735fed88dc7eafb6be 100644 --- a/src/middlewares/news/getNewsList.ts +++ b/src/middlewares/news/getNewsList.ts @@ -1,4 +1,5 @@ -import { Request, Response, NextFunction } from "express"; +import { NextFunction, Request, Response } from "express"; + import News from "../../models/NewsSchema"; const getNewsList = () => { diff --git a/src/middlewares/user/addUser.ts b/src/middlewares/user/addUser.ts index af47ce6e30550e456d1b0db66100258cdc929114..ede1490decdb0c849d1b950059ae622d7c5c8757 100644 --- a/src/middlewares/user/addUser.ts +++ b/src/middlewares/user/addUser.ts @@ -1,29 +1,27 @@ -import { Request, Response, NextFunction } from 'express'; +import { NextFunction, Request, Response } from "express"; import Profile, { Role } from "../../models/ProfileSchema"; const addUser = () => (req: Request, res: Response, next: NextFunction) => { const profile = new Profile(); - - const fields = ['studentCardNumber', 'roomNumber', 'picture']; - fields.forEach(field => { - const value = req.body[field] - if(value) - profile.set(field, value); + + const fields = ["studentCardNumber", "roomNumber", "picture"]; + fields.forEach((field) => { + const value = req.body[field]; + if (value) profile.set(field, value); }); - + profile.external_id = req.session!.user!.id; profile.role = Role.User; - - profile.save(err => { + + profile.save((err) => { if (err) { res.status(400); - } - else { + } else { res.status(201); - res.data = {profile}; + res.data = { profile }; } - next() + next(); }); -} +}; -export default addUser; \ No newline at end of file +export default addUser; diff --git a/src/middlewares/user/addWarning.ts b/src/middlewares/user/addWarning.ts index e7eae54ef0692fb641e551038535e48883ac95e7..a606fd111cbb4a5a23d0047e47ce4a2134cf52ed 100644 --- a/src/middlewares/user/addWarning.ts +++ b/src/middlewares/user/addWarning.ts @@ -1,7 +1,7 @@ -import {Request, Response, NextFunction} from 'express'; +import { NextFunction, Request, Response } from "express"; -const addWarning = () => (req: Request, res: Response, next: NextFunction) =>{ - res.send("Add warning"); -} +const addWarning = () => (req: Request, res: Response, next: NextFunction) => { + res.send("Add warning"); +}; -export default addWarning; \ No newline at end of file +export default addWarning; diff --git a/src/middlewares/user/deleteUser.ts b/src/middlewares/user/deleteUser.ts index fe4eb181a4e0424b637227bf5cb8d5f67cfcd187..ac37f2533c48b09a8da5b105c01acd1802a339fe 100644 --- a/src/middlewares/user/deleteUser.ts +++ b/src/middlewares/user/deleteUser.ts @@ -1,5 +1,6 @@ -import { Request, Response, NextFunction } from 'express'; -import Profile from '../../models/ProfileSchema'; +import { NextFunction, Request, Response } from "express"; + +import Profile from "../../models/ProfileSchema"; const deletUser = () => (req: Request, res: Response, next: NextFunction) => { Profile.findByIdAndDelete(req.params.id, (error) => { @@ -10,6 +11,6 @@ const deletUser = () => (req: Request, res: Response, next: NextFunction) => { } next(); }); -} +}; -export default deletUser; \ No newline at end of file +export default deletUser; diff --git a/src/middlewares/user/deleteWarning.ts b/src/middlewares/user/deleteWarning.ts index 90ca8a2d9344ee0907f7de52b071f2e9f3341a73..fc39c12ae94151fe562781497d7a8e7a68b8f9fc 100644 --- a/src/middlewares/user/deleteWarning.ts +++ b/src/middlewares/user/deleteWarning.ts @@ -1,7 +1,11 @@ -import {Request, Response, NextFunction} from 'express'; +import { NextFunction, Request, Response } from "express"; -const deleteWarning = () => (req: Request, res: Response, next: NextFunction) =>{ - res.send("Delete warning"); -} +const deleteWarning = () => ( + req: Request, + res: Response, + next: NextFunction +) => { + res.send("Delete warning"); +}; -export default deleteWarning; \ No newline at end of file +export default deleteWarning; diff --git a/src/middlewares/user/getOwnUser.ts b/src/middlewares/user/getOwnUser.ts index 5a8f5ed20a8b9e278f152850187c7f71aa05763c..d236dd4618a94ca4c234df011cef6a4aa87ee5eb 100644 --- a/src/middlewares/user/getOwnUser.ts +++ b/src/middlewares/user/getOwnUser.ts @@ -1,11 +1,12 @@ -import { Request, Response, NextFunction } from 'express'; -import Profile from '../../models/ProfileSchema'; +import { NextFunction, Request, Response } from "express"; + +import Profile from "../../models/ProfileSchema"; const getOwnUser = () => (req: Request, res: Response, next: NextFunction) => { - if(!req.session!.user) { - return res.json({loggedIn: false}) + if (!req.session!.user) { + return res.json({ loggedIn: false }); } - res.json({...req.session!.user, loggedIn: true}); -} + res.json({ ...req.session!.user, loggedIn: true }); +}; -export default getOwnUser; \ No newline at end of file +export default getOwnUser; diff --git a/src/middlewares/user/getUser.ts b/src/middlewares/user/getUser.ts index 0f165ef4f5276bf5ba84b0f1cfb1cef2f4f63d34..21204b2508b9a0e3f7c1020ca2c978360e9660be 100644 --- a/src/middlewares/user/getUser.ts +++ b/src/middlewares/user/getUser.ts @@ -1,5 +1,6 @@ -import { Request, Response, NextFunction } from 'express'; -import Profile from '../../models/ProfileSchema'; +import { NextFunction, Request, Response } from "express"; + +import Profile from "../../models/ProfileSchema"; const getUser = () => (req: Request, res: Response, next: NextFunction) => { Profile.findById(req.params.id, (error, profile) => { @@ -12,6 +13,6 @@ const getUser = () => (req: Request, res: Response, next: NextFunction) => { } next(); }); -} +}; -export default getUser; \ No newline at end of file +export default getUser; diff --git a/src/middlewares/user/getUsersList.ts b/src/middlewares/user/getUsersList.ts index 5cd7a515512c99f6ba85587244de281666250d39..4f910011b0bdf3408952ea551ef077e4e33c62b5 100644 --- a/src/middlewares/user/getUsersList.ts +++ b/src/middlewares/user/getUsersList.ts @@ -1,17 +1,21 @@ -import {Request, Response, NextFunction} from 'express'; -import Profile from '../../models/ProfileSchema'; +import { NextFunction, Request, Response } from "express"; -const getUsersList = () => (req: Request, res: Response, next: NextFunction) =>{ - Profile.find({}, (err, profiles) =>{ - if(err) { - res.status(400); - } - else{ - res.status(200); - res.data = {profiles} - } - next(); - }) -} +import Profile from "../../models/ProfileSchema"; -export default getUsersList; \ No newline at end of file +const getUsersList = () => ( + req: Request, + res: Response, + next: NextFunction +) => { + Profile.find({}, (err, profiles) => { + if (err) { + res.status(400); + } else { + res.status(200); + res.data = { profiles }; + } + next(); + }); +}; + +export default getUsersList; diff --git a/src/middlewares/user/getWarning.ts b/src/middlewares/user/getWarning.ts index d97d5d2523185bd35c6f3210608d79dfcd2faea5..cd0c5a2c64de84d7ec6c57f6ad91e2e382ee4594 100644 --- a/src/middlewares/user/getWarning.ts +++ b/src/middlewares/user/getWarning.ts @@ -1,7 +1,7 @@ -import {Request, Response, NextFunction} from 'express'; +import { NextFunction, Request, Response } from "express"; -const getWarning = () => (req: Request, res: Response, next: NextFunction) =>{ - res.send("Get warning"); -} +const getWarning = () => (req: Request, res: Response, next: NextFunction) => { + res.send("Get warning"); +}; -export default getWarning; \ No newline at end of file +export default getWarning; diff --git a/src/middlewares/user/getWarningsList.ts b/src/middlewares/user/getWarningsList.ts index c4cff031cc1d7cb1f3e435812a766f96cb296a4c..97b24086a904f529757b274935366799746350f6 100644 --- a/src/middlewares/user/getWarningsList.ts +++ b/src/middlewares/user/getWarningsList.ts @@ -1,7 +1,11 @@ -import {Request, Response, NextFunction} from 'express'; +import { NextFunction, Request, Response } from "express"; -const getWarningsList = () => (req: Request, res: Response, next: NextFunction) =>{ - res.send("Get warnings"); -} +const getWarningsList = () => ( + req: Request, + res: Response, + next: NextFunction +) => { + res.send("Get warnings"); +}; -export default getWarningsList; \ No newline at end of file +export default getWarningsList; diff --git a/src/middlewares/user/responseUser.ts b/src/middlewares/user/responseUser.ts index 07d6958cbdeade91bea4ae0d8a24ba6b9f6dafb1..2c61d7d461833d73de216dfef5ba536ea4bace76 100644 --- a/src/middlewares/user/responseUser.ts +++ b/src/middlewares/user/responseUser.ts @@ -1,7 +1,7 @@ -import { Request, Response, NextFunction, response } from 'express'; +import { NextFunction, Request, Response, response } from "express"; const responseUser = () => (req: Request, res: Response) => { - res.json(res.data.profile); -} + res.json(res.data.profile); +}; -export default responseUser; \ No newline at end of file +export default responseUser; diff --git a/src/middlewares/user/responseUserList.ts b/src/middlewares/user/responseUserList.ts index 364b3c490615cf41d242baa211dd95cac0bde51a..fda9d94b0095e1eb39f41a502395797d695b4428 100644 --- a/src/middlewares/user/responseUserList.ts +++ b/src/middlewares/user/responseUserList.ts @@ -1,7 +1,7 @@ -import { Request, Response, NextFunction, response } from 'express'; +import { NextFunction, Request, Response, response } from "express"; const responseUserList = () => (req: Request, res: Response) => { - res.json(res.data.profiles); -} + res.json(res.data.profiles); +}; -export default responseUserList; \ No newline at end of file +export default responseUserList; diff --git a/src/middlewares/user/updateUser.ts b/src/middlewares/user/updateUser.ts index 2097af527aff8f1f91a540563ebb766caccc9abe..bc145a94cebd7cb55bfc6695e7e85843f4568685 100644 --- a/src/middlewares/user/updateUser.ts +++ b/src/middlewares/user/updateUser.ts @@ -1,29 +1,25 @@ -import {Request, Response, NextFunction} from 'express'; -import Profile from '../../models/ProfileSchema'; +import { NextFunction, Request, Response } from "express"; + +import Profile from "../../models/ProfileSchema"; const updateUser = () => (req: Request, res: Response, next: NextFunction) => { - const validFields = ['studentCardNumber', 'roomNumber', 'picture']; - Profile.findOne( - {_id : req.params.id}, - (error, profile) => { - res.status(200); - if (error) { - res.status(400); - } - else { - if(profile){ - validFields.forEach(field => { - const value = req.body[field] - if(value) - profile.set(field, value); - }); - profile.save(); - res.data = {profile}; - } - } - next(); - } - ); -} + const validFields = ["studentCardNumber", "roomNumber", "picture"]; + Profile.findOne({ _id: req.params.id }, (error, profile) => { + res.status(200); + if (error) { + res.status(400); + } else { + if (profile) { + validFields.forEach((field) => { + const value = req.body[field]; + if (value) profile.set(field, value); + }); + profile.save(); + res.data = { profile }; + } + } + next(); + }); +}; -export default updateUser; \ No newline at end of file +export default updateUser; diff --git a/src/middlewares/user/updateWarning.ts b/src/middlewares/user/updateWarning.ts index 6ff3f0bed90016310472a41c0505e4a729278cc4..25f2f568bdbcc17a4975e8591fbd79a9d552deb7 100644 --- a/src/middlewares/user/updateWarning.ts +++ b/src/middlewares/user/updateWarning.ts @@ -1,7 +1,11 @@ -import {Request, Response, NextFunction} from 'express'; +import { NextFunction, Request, Response } from "express"; -const updateWarning = () => (req: Request, res: Response, next: NextFunction) =>{ - res.send("Update warning"); -} +const updateWarning = () => ( + req: Request, + res: Response, + next: NextFunction +) => { + res.send("Update warning"); +}; -export default updateWarning; \ No newline at end of file +export default updateWarning; diff --git a/src/middlewares/utils/emptyResponse.ts b/src/middlewares/utils/emptyResponse.ts index db1e8cd2d762c7bb638b44a11da1d2842fdba9b8..a8113f2d81e4609a10c574a5653cd0c304180f8d 100644 --- a/src/middlewares/utils/emptyResponse.ts +++ b/src/middlewares/utils/emptyResponse.ts @@ -1,7 +1,5 @@ -import { Request, Response } from 'express'; - - +import { Request, Response } from "express"; const emptyResponse = () => (req: Request, res: Response) => res.json({}); -export default emptyResponse; \ No newline at end of file +export default emptyResponse; diff --git a/src/models/NewsSchema.ts b/src/models/NewsSchema.ts index 36a42fe0651bfa9d638275e0cc6089ff66c62845..5d0ad367199a7cf2a4ef67bc6e3775835019475d 100644 --- a/src/models/NewsSchema.ts +++ b/src/models/NewsSchema.ts @@ -1,9 +1,9 @@ -import { Document, Schema, model } from 'mongoose'; +import { Document, Schema, model } from "mongoose"; export interface INews extends Document { - title : string - text : string - /* author : { + title: string; + text: string; + /* author : { // id: IUser["_id"], userName: string, }, @@ -11,13 +11,13 @@ export interface INews extends Document { // id: IUser["_id"], userName: string, }, */ - publishedAt: string + publishedAt: string; } const NewsSchema = new Schema({ - title : { type: String, required: true }, - text : { type: String, required: true }, - /* author : { + title: { type: String, required: true }, + text: { type: String, required: true }, + /* author : { id: { type: Schema.Types.ObjectId, required: true }, userName: { type: String, required: true } }, @@ -25,7 +25,7 @@ const NewsSchema = new Schema({ id: { type: Schema.Types.ObjectId, required: true }, userName: { type: String, required: true } }, */ - publishedAt: { type: String, required: true }, + publishedAt: { type: String, required: true }, }); -export default model<INews>('News', NewsSchema); \ No newline at end of file +export default model<INews>("News", NewsSchema); diff --git a/src/models/ProfileSchema.ts b/src/models/ProfileSchema.ts index 9e1aef52b979bcae7d57a32e30a625d0c1fb1ac0..9c59d86b4663266073cbb92456c447e231a3cfe0 100644 --- a/src/models/ProfileSchema.ts +++ b/src/models/ProfileSchema.ts @@ -1,31 +1,32 @@ -import { Document, Schema, model } from 'mongoose'; -import { IWarnings, WarningSchema } from './WarningSchema'; -import { Admin } from 'mongodb'; +import { Document, Schema, model } from "mongoose"; +import { IWarnings, WarningSchema } from "./WarningSchema"; + +import { Admin } from "mongodb"; export enum Role { - Admin, - Staff, - User, + Admin, + Staff, + User, } export interface IProfile extends Document { - external_id: string, - studentCardNumber: string, - roomNumber?: string, - picture: string, - role: Role.Admin | Role.Staff | Role.User, - email?: string, - name?: string, - warnings: [IWarnings] | [], -}; + external_id: string; + studentCardNumber: string; + roomNumber?: string; + picture: string; + role: Role.Admin | Role.Staff | Role.User; + email?: string; + name?: string; + warnings: [IWarnings] | []; +} const ProfileSchema = new Schema({ - external_id: {type: String, required: true, unique : true, dropDups: true }, - studentCardNumber: {type: String, required: true }, - roomNumber: {type: String}, - picture: {type: String}, - role: {type: String, required: true}, - warnings: [WarningSchema] + external_id: { type: String, required: true, unique: true, dropDups: true }, + studentCardNumber: { type: String, required: true }, + roomNumber: { type: String }, + picture: { type: String }, + role: { type: String, required: true }, + warnings: [WarningSchema], }); -export default model<IProfile>('Profile', ProfileSchema); \ No newline at end of file +export default model<IProfile>("Profile", ProfileSchema); diff --git a/src/models/WarningSchema.ts b/src/models/WarningSchema.ts index 8eec29a2ef19a109417338ebd7147f5a376094de..a74a4d6465ad744a8b26fb8727c3e18f482b8e4c 100644 --- a/src/models/WarningSchema.ts +++ b/src/models/WarningSchema.ts @@ -1,19 +1,22 @@ -import { Schema } from 'mongoose'; +import { Schema } from "mongoose"; -export interface IWarnings extends Document{ - text: string, - date: Date, - given_by: { - _id: string, - name: string, - } +export interface IWarnings extends Document { + text: string; + date: Date; + given_by: { + _id: string; + name: string; + }; } export const WarningSchema = new Schema({ - text: {type: String, required: true}, - date: {type: Date, required: true}, - given_by: {required: true, type: { - _id: {type: String, required: true}, - name: {String, required: true}, - }} + text: { type: String, required: true }, + date: { type: Date, required: true }, + given_by: { + required: true, + type: { + _id: { type: String, required: true }, + name: { String, required: true }, + }, + }, }); diff --git a/src/models/user.interface.ts b/src/models/user.interface.ts index 50df6043ba1d9fc5ff826c56db1797b6c21b4014..d571e6900b31d73bab2ef717146431c8041d3dc3 100644 --- a/src/models/user.interface.ts +++ b/src/models/user.interface.ts @@ -1,8 +1,8 @@ import { Token } from "simple-oauth2"; -export interface User{ - email: string, - name: string, - id: string, - token: Token, -} \ No newline at end of file +export interface User { + email: string; + name: string; + id: string; + token: Token; +} diff --git a/src/routes/auth.ts b/src/routes/auth.ts index beb5f88f152ff224776b254fa93c7d0b57705aae..8599046dbc27daff02258423d41d32c133362c3a 100644 --- a/src/routes/auth.ts +++ b/src/routes/auth.ts @@ -1,15 +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'; +import { Application } from "express"; +import authenticated from "../middlewares/auth/authenticated"; +import complete from "../middlewares/auth/complete"; +import login from "../middlewares/auth/login"; +import logout from "../middlewares/auth/logout"; - const authRoute = (app: Application): void => { - app.get('/api/v1/login', login() ); +const authRoute = (app: Application): void => { + app.get("/api/v1/login", login()); - app.get('/api/v1/complete', complete() ); + app.get("/api/v1/complete", complete()); - app.get('/api/v1/logout', authenticated(), logout() ); -} + app.get("/api/v1/logout", authenticated(), logout()); +}; -export default authRoute; \ No newline at end of file +export default authRoute; diff --git a/src/routes/news.ts b/src/routes/news.ts index b4affe0446cb59f1bbe33aee9e94fc5051a8b3b4..f5b6b0523748490b8662c5653e323a8f762095d2 100644 --- a/src/routes/news.ts +++ b/src/routes/news.ts @@ -1,8 +1,9 @@ import { Application, Response } from "express"; -import getNewsListMiddleware from "../middlewares/news/getNewsList"; + import addNews from "../middlewares/news/addNews"; -import getNews from "../middlewares/news/getNews"; import deleteNews from "../middlewares/news/deleteNews"; +import getNews from "../middlewares/news/getNews"; +import getNewsListMiddleware from "../middlewares/news/getNewsList"; export default (app: Application): void => { app.get("/api/v1/news", getNewsListMiddleware(), (req, res: Response) => { diff --git a/src/routes/user.ts b/src/routes/user.ts index 1552ad589dfb53c8c0288114f8ca31663428909e..4f7c00c65b202645b107cba18074ed342b46fe58 100644 --- a/src/routes/user.ts +++ b/src/routes/user.ts @@ -1,44 +1,42 @@ -import { Application } from 'express'; +import { Application } from "express"; +import addUser from "../middlewares/user/addUser"; import addWarning from "../middlewares/user/addWarning"; +import authenticated from "../middlewares/auth/authenticated"; import deleteUser from "../middlewares/user/deleteUser"; import deleteWarning from "../middlewares/user/deleteWarning"; -import getUser from "../middlewares/user/getUser"; +import emptyResponse from "../middlewares/utils/emptyResponse"; import getOwnUser from "../middlewares/user/getOwnUser"; +import getUser from "../middlewares/user/getUser"; import getUsersList from "../middlewares/user/getUsersList"; import getWarning from "../middlewares/user/getWarning"; import getWarningsList from "../middlewares/user/getWarningsList"; +import responseUser from "../middlewares/user/responseUser"; +import responseUserList from "../middlewares/user/responseUserList"; import updateUser from "../middlewares/user/updateUser"; import updateWarning from "../middlewares/user/updateWarning"; -import addUser from '../middlewares/user/addUser'; -import authenticated from '../middlewares/auth/authenticated'; -import emptyResponse from '../middlewares/utils/emptyResponse'; -import responseUser from '../middlewares/user/responseUser'; -import responseUserList from '../middlewares/user/responseUserList'; +const usersRoute = (app: Application): void => { + app.get("/api/v1/users", authenticated(), getUsersList(), responseUserList()); + + app.post("/api/v1/users", authenticated(), addUser(), responseUser()); + app.get("/api/v1/users/me", getOwnUser(), responseUser()); - const usersRoute = (app: Application): void => { - app.get('/api/v1/users', authenticated(), getUsersList(), responseUserList()); + app.get("/api/v1/users/:id", getUser(), responseUser()); - app.post('/api/v1/users', authenticated(), addUser(), responseUser()); + app.get("/api/v1/users/:id/warnings", getWarningsList()); - app.get('/api/v1/users/me', getOwnUser(), responseUser() ); - - app.get('/api/v1/users/:id', getUser(), responseUser() ); + app.get("/api/v1/users/:userId/warnings/:warningId", getWarning()); - app.get('/api/v1/users/:id/warnings', getWarningsList() ); - - app.get('/api/v1/users/:userId/warnings/:warningId', getWarning() ); + app.post("/api/v1/users/:id/warnings", addWarning()); - app.post('/api/v1/users/:id/warnings', addWarning()); + app.put("/api/v1/users/:id", updateUser(), responseUser()); - app.put('/api/v1/users/:id', updateUser(), responseUser() ); + app.put("/api/v1/users/:userId/warnings/:warningId", updateWarning()); - app.put('/api/v1/users/:userId/warnings/:warningId', updateWarning()); - - app.delete('/api/v1/users/:id', deleteUser(), emptyResponse()); + app.delete("/api/v1/users/:id", deleteUser(), emptyResponse()); - app.delete('/api/v1/users/:userId/warnings/:warningId', deleteWarning()); -} + app.delete("/api/v1/users/:userId/warnings/:warningId", deleteWarning()); +}; -export default usersRoute; \ No newline at end of file +export default usersRoute; diff --git a/src/utils/auth.ts b/src/utils/auth.ts index d00f20423b0e457c8a03b7a34e4b45915c5c9b0d..ce3d6af243ce447c8c75169f28567418d48ef796 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,19 +1,18 @@ import simpleOauth2 from "simple-oauth2"; -const oauth2 = () => simpleOauth2.create( - { +const oauth2 = () => + simpleOauth2.create({ client: { id: process.env.AUTH_ID || "", - secret: process.env.AUTH_SECRET_KEY || "" + secret: process.env.AUTH_SECRET_KEY || "", }, auth: { - tokenHost: 'https://auth.sch.bme.hu', - tokenPath: '/oauth2/token', - authorizePath: '/site/login' - } - } -); + tokenHost: "https://auth.sch.bme.hu", + tokenPath: "/oauth2/token", + authorizePath: "/site/login", + }, + }); -const scope : string[] = ['basic', 'mail', 'sn', 'givenName'] +const scope: string[] = ["basic", "mail", "sn", "givenName"]; -export {oauth2, scope}; \ No newline at end of file +export { oauth2, scope }; diff --git a/src/utils/declarations/session.d.ts b/src/utils/declarations/session.d.ts index 70023005e094f05efb4eee9ec4d5775e0473f4b1..66b7be37077663274587c032ed22936970889c19 100644 --- a/src/utils/declarations/session.d.ts +++ b/src/utils/declarations/session.d.ts @@ -1,10 +1,10 @@ import { AccessToken } from "simple-oauth2"; -import { User } from 'src/models/user.interface'; +import { User } from "src/models/user.interface"; declare global { - namespace Express { - export interface Session { - user: User | null; - } + namespace Express { + export interface Session { + user: User | null; } -} \ No newline at end of file + } +} diff --git a/src/utils/env.ts b/src/utils/env.ts index 0627d2453f2d58367b30824efb562de580e15e46..622b6e5e89d0c7d122a535a79a50f016f8ed00cc 100644 --- a/src/utils/env.ts +++ b/src/utils/env.ts @@ -1,5 +1,4 @@ -import { resolve } from "path" +import { config } from "dotenv"; +import { resolve } from "path"; -import { config } from "dotenv" - -config({ path: resolve(__dirname, "../../.env") }) \ No newline at end of file +config({ path: resolve(__dirname, "../../.env") });