Skip to content
Permalink
master
Switch branches/tags

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?
Go to file
 
 
Cannot retrieve contributors at this time
#!/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}`))