Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
WebsiteProject/index.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
159 lines (132 sloc)
4.32 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env node | |
//Routes File | |
'use strict' | |
/* MODULE IMPORTS */ | |
const Koa = require('koa') | |
const Router = require('koa-router') | |
const views = require('koa-views') | |
const staticDir = require('koa-static') | |
const bodyParser = require('koa-bodyparser') | |
const koaBody = require('koa-body')({multipart: true, uploadDir: '.'}) | |
const session = require('koa-session') | |
//const jimp = require('jimp') | |
/* IMPORT CUSTOM MODULES */ | |
const User = require('./modules/user') | |
const Article = require('./modules/article') | |
/* IMPORT ROUTE MODULES */ | |
const editPost = require('./routes/edit.post') | |
const categoriesTagGet = require('./routes/categories.tag.get') | |
const uploadPost = require('./routes/upload.post') | |
const releasePost = require('./routes/release.post') | |
const get = require('./routes/get') | |
const loginGetPost = require('./routes/login.get.post') | |
const registerPost = require('./routes/register.post') | |
const app = new Koa() | |
const router = new Router() | |
/* CONFIGURING THE MIDDLEWARE */ | |
app.keys = ['darkSecret'] | |
app.use(staticDir('public')) | |
app.use(bodyParser()) | |
app.use(session(app)) | |
app.use(views(`${__dirname}/views`, { extension: 'handlebars' }, {map: { handlebars: 'handlebars' }})) | |
const defaultPort = 8080 | |
const port = process.env.PORT || defaultPort | |
const dbName = 'database.db' | |
router.get('/', async ctx => await get(ctx, dbName)) | |
router.get('/articles/:id', async ctx => { | |
try { | |
const id = ctx.params.id | |
const article = await new Article(dbName) | |
const data = await article.get(id) | |
const loggedIn = true | |
if(ctx.session.authorised) await ctx.render('articlepage', {article: data, loggedIn: loggedIn}) | |
else await ctx.render('articlepage', data) | |
} catch(err) { | |
ctx.body = err.message | |
console.log(err) | |
} | |
}) | |
router.get('/edit/:id', async ctx => { | |
try { | |
const id = ctx.params.id | |
const article = await new Article(dbName) | |
const data = await article.get(id) | |
await ctx.render('editarticle', data) | |
} catch(err) { | |
ctx.body = err.message | |
console.log(err) | |
} | |
}) | |
router.post('/edit', koaBody, async ctx => await editPost(ctx, dbName)) | |
router.get('/categories/:tag', async ctx => await categoriesTagGet(ctx, dbName)) | |
/** | |
* The user registration page. | |
* | |
* @name Register Page | |
* @route {GET} /register | |
*/ | |
router.get('/register', async ctx => { | |
const data = {} | |
if(ctx.query.msg) data.msg = ctx.query.msg | |
await ctx.render('loginpage') | |
}) | |
/** | |
* The script to process new user registrations. | |
* | |
* @name Register Script | |
* @route {POST} /register | |
*/ | |
router.post('/register', koaBody, async ctx => await registerPost(ctx, dbName)) | |
router.get('/login', async ctx => { | |
const data = {} | |
if(ctx.query.msg) data.msg = ctx.query.msg | |
if(ctx.query.user) data.user = ctx.query.user | |
await ctx.render('loginpage', data) | |
}) | |
router.post('/login', async ctx => await loginGetPost(ctx, dbName)) | |
router.get('/logout', async ctx => { | |
ctx.session.authorised = null | |
ctx.redirect('/?msg=you are now logged out') | |
}) | |
router.get('/account', async ctx => { | |
const user = await new User(dbName) | |
if(ctx.session.authorised === true) { | |
const data = await user.getUser(ctx.session.user) | |
console.log(data) | |
await ctx.render('accountpage', {account: data}) | |
} else await ctx.render('accountpage') | |
}) | |
router.post('/account', koaBody, async ctx => { | |
try{ | |
const body = ctx.request.body | |
console.log(body) | |
const user = await new User(dbName) | |
if(body.email !== undefined) await user.addEmail(ctx.session.user, body.email) | |
if(body.location !== undefined) await user.addLocation(ctx.session.user, body.location) | |
ctx.redirect('/account') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.get('/upload', async ctx => await ctx.render('articleUpload')) | |
router.post('/upload', koaBody, async ctx => await uploadPost(ctx, dbName)) | |
router.get('/admin', async ctx => { | |
try { | |
const article = await new Article(dbName) | |
const data = await article.getUnreleased() | |
await ctx.render('adminHome', {articles: data}) | |
} catch(err) { | |
console.error(err.message) | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
router.post('/release', koaBody, async ctx => await releasePost(ctx, dbName)) | |
router.post('/login', async ctx => { | |
try { | |
return ctx.redirect('/upload') | |
} catch(err) { | |
await ctx.render('error', {message: err.message}) | |
} | |
}) | |
app.use(router.routes()) | |
module.exports = app.listen(port, async() => console.log(`listening on port ${port}`)) |