diff --git a/backend/config/dev.js b/backend/config/dev.js new file mode 100644 index 0000000..29bee39 --- /dev/null +++ b/backend/config/dev.js @@ -0,0 +1,38 @@ +const test_users = { + student: { + employeenumber: '', + mail: '', + hypersonstudentid: '112345701', + uid: 'johnsmith', + givenname: 'John', + sn: 'Smith', + }, + instructor: { + employeenumber: '', + mail: '', + hypersonstudentid: '112345699', + uid: 'olliohj', + givenname: 'Olli', + sn: 'Ohjaaja', + }, + admin: { + employeenumber: '', + mail: '', + hypersonstudentid: '011120775', + uid: 'mluukkai', + givenname: 'Matti', + sn: 'Luukkainen', + }, +} + +// Used in fake_shibbo middleware +// +// NOTE: This has to be an object because by default +// js imports are copies of the values but objects +// are passed by reference (like pointers in c/cpp) +let test_user = { test_user: test_users.student } + +module.exports = { + test_user, + test_users +} diff --git a/backend/controllers/dev.js b/backend/controllers/dev.js new file mode 100644 index 0000000..5616b26 --- /dev/null +++ b/backend/controllers/dev.js @@ -0,0 +1,31 @@ +const devRouter = require('express').Router() +const { test_user, test_users } = require('../config/dev') + +console.info('Initial user', test_user.test_user) + +// This is not the best place for this, but it was the most simple +// solution, as I didn't want to share state between middlewares and index.js +// and test_user is a shared local var between router and fake_shibbo. +devRouter.post('/', (req, res) => { + const role = req.body.role + switch (role) { + case 'student': + test_user.test_user = test_users.student + break + case 'instructor': + test_user.test_user = test_users.instructor + break + case 'admin': + test_user.test_user = test_users.admin + break + default: + console.warn('Didn\'t match any, defaulting to student') + test_user.test_user = test_users.student + break + } + + console.info('Logged in as', test_user.test_user) + return res.status(200).json({ role }) +}) + +module.exports = devRouter diff --git a/backend/index.js b/backend/index.js index 0df5e2c..2489089 100644 --- a/backend/index.js +++ b/backend/index.js @@ -60,6 +60,7 @@ const instructorTimeLogsRouter = require('./controllers/instructorTimeLogs') const sprintRouter = require('./controllers/sprints') const groupSprintSummaryRouter = require('./controllers/groupSprintSummary') const tagsRouter = require('./controllers/tags') +const devRouter = require('./controllers/dev') app.use('/api/login', loginRouter) app.use('/api/logout', logoutRouter) app.use('/api/topics', topicsRouter) @@ -83,6 +84,8 @@ app.use('/api/instructorTimeLogs', instructorTimeLogsRouter) app.use('/api/sprints', sprintRouter) app.use('/api/groupSprintSummary', groupSprintSummaryRouter) app.use('/api/tags', tagsRouter) +if (process.env.NODE_ENV === 'development') + app.use('/api/role', devRouter) console.log('NODE_ENV:', process.env.NODE_ENV) diff --git a/backend/middleware.js b/backend/middleware.js index da33422..d0daf72 100644 --- a/backend/middleware.js +++ b/backend/middleware.js @@ -1,6 +1,7 @@ // @ts-check const jwt = require('jsonwebtoken') const config = require('./config') +const { test_user } = require('./config/dev') /** * @typedef {import("express").Request} Request @@ -100,42 +101,14 @@ const checkAdmin = (req, res, next) => { /** @type {RequestHandler} */ const fakeshibbo = (req, res, next) => { - const test_users = { - student: { - employeenumber: '', - mail: '', - hypersonstudentid: '112345701', - uid: 'johnsmith', - givenname: 'John', - sn: 'Smith', - }, - instructor: { - employeenumber: '', - mail: '', - hypersonstudentid: '112345699', - uid: 'olliohj', - givenname: 'Olli', - sn: 'Ohjaaja', - }, - admin: { - employeenumber: '', - mail: '', - hypersonstudentid: '011120775', - uid: 'mluukkai', - givenname: 'Matti', - sn: 'Luukkainen', - }, - } + const user = test_user.test_user - // select one of the following: student, instructor, admin - const test_user = test_users.admin - - req.headers.employeenumber = test_user.employeenumber - req.headers.mail = test_user.mail - req.headers.hypersonstudentid = test_user.hypersonstudentid - req.headers.uid = test_user.uid - req.headers.givenname = test_user.givenname - req.headers.sn = test_user.sn + req.headers.employeenumber = user.employeenumber + req.headers.mail = user.mail + req.headers.hypersonstudentid = user.hypersonstudentid + req.headers.uid = user.uid + req.headers.givenname = user.givenname + req.headers.sn = user.sn next() }