[www] + Config model; config updated; using remote config; server refactoring

This commit is contained in:
Roman Timashev committed 2017-09-19 13:45:06 +03:00
1 parent 18a0b36a09
commit 5ad321ec0e
7 files changed
+85 -69

No files matched your search

+15 -6
View File
@@ -5,17 +5,18 @@ export const configFile = process.env['PRIVATE'] || 'private.json'
const privateData = JSON.parse(fs.readFileSync(configFile, 'utf-8'))
const indexFile = process.env['INDEX'] || 'templates/main.html'
const port = process.env['PORT'] || 1800
export const port = process.env['PORT'] || 1800
const value = (name, def) => name in privateData
? privateData[name]
: def
const config = {
port: port,
pub: './',
db: {
uri: 'mongodb://localhost:27017/hudozka'
},
}
export const dbUri = value('dbUri', 'mongodb://localhost:27017/hudozka')
export default Object.keys(privateData)
.reduce((config, key) => {
config[key] = privateData[key]
@@ -46,3 +47,11 @@ export const instagramToken = privateData['instagramToken']
export const viewMain = path.join(__dirname, 'views/main.hbs')
export const view404 = path.join(__dirname, 'views/404.hbs')
export const sessionConfig = {
key: 'sid', /** (string) cookie key */
maxAge: 86400000, /** (number) maxAge in ms */
overwrite: false, /** (boolean) can overwrite or not */
httpOnly: false, /** (boolean) httpOnly or not */
signed: true, /** (boolean) signed or not */
}
+29
View File
@@ -0,0 +1,29 @@
const Data = require('./Data')
const {findOne} = require('../lib/store')
class Config {
static get store() {
return Data.getStore(Config)
}
static async findById(id) {
const data = await findOne(Config.store, {id})
if (!data) return null
return new Config(data)
}
constructor({hash, file, ...data}) {
this.hash = hash
this.file = file
this.server = data.server
this.articlesPerPage = data.articlesPerPage || 5
this.collectiveOrder = data.collectiveOrder || []
this.redirect = new Map(Object
.entries(data.redirect)
)
}
}
module.exports = Config
+2
View File
@@ -3,6 +3,7 @@ const Album = require('./Album')
const Teacher = require('./Teacher')
const Document = require('./Document')
const Image = require('./Image')
const Settings = require('./Config')
const {MongoClient, ObjectId} = require('mongodb')
@@ -32,6 +33,7 @@ function init(db) {
Data.setStore(Image, db.collection('images'))
Data.setStore(Teacher, db.collection('collective'))
Data.setStore(Document, db.collection('documents'))
Data.setStore(Settings, db.collection('settings'))
return db
}
+11 -16
View File
@@ -1,36 +1,31 @@
import 'babel-polyfill'
import config, {name, privateFile} from './config'
import {connect, collection} from './core/db'
import {dbUri, port, name, configFile} from './config'
import {connect} from './core/db'
import server from './server'
import DataManager from 'hudozka-data'
function main() {
async function loop() {
const dbUri = config.db.uri
await connect(dbUri)
const Config = require('./core/Config')
const config = await Config.findById('settings')
try {
let data = new DataManager({
timeline: collection('timeline'),
schedules: collection('schedules'),
documents: collection('documents'),
})
let app = server(config)
let app = server(data)
app.listen(config.port)
app.listen(port)
} catch (e) {
console.error(e.stack)
return
}
console.log(`Using node ${process.version}`)
console.log(`Config file: ${privateFile}`)
console.log(`App ${name} started`)
console.log(`Listening ${config.port}`)
console.log(`DB Address ${dbUri}`)
console.log(`Server: ${config.server}`)
console.log(`Config file: ${configFile}`)
console.log(`DB Address: ${dbUri}`)
console.log(`Listening ${port}`)
}
return loop()
+20
View File
@@ -0,0 +1,20 @@
/**
*
* @param redirectMap
* [{String url, String redirect}, ...]
* @returns {*}
*/
function redirect(redirectMap) {
return async (ctx, next) => {
const path = ctx.request.path
if (redirectMap.has(path)) {
const url = redirectMap.get(path)
ctx.redirect(url)
} else {
await next()
}
}
}
module.exports = redirect
-19
View File
@@ -1,19 +0,0 @@
/**
*
* @param redirectionTable
* [{String url, String redirect}, ...]
* @returns {*}
*/
export function redirect(redirectionTable) {
return function *(next) {
let path = this.request.path;
let record = redirectionTable.find(i => i.url === path);
if(record){
this.redirect(record.redirect);
return;
}
yield next;
};
}
+8 -28
View File
@@ -7,20 +7,17 @@ import convert from 'koa-convert'
import conditional from 'koa-conditional-get'
import etag from 'koa-etag'
import helmet from 'koa-helmet'
import mount from 'koa-mount'
import cookie from 'koa-cookie'
import session from 'koa-session'
import bodyParser from 'koa-bodyparser'
import {redirectionTable} from './config'
import {queryObject} from './routes'
import {redirect} from './routes/redirect'
import {services as serviceKeys, authChecker} from './core/service'
import handlebars from 'handlebars'
const config = require('./config')
const {sessionConfig, view404} = require('./config')
const error = require('./middlewares/error')
const redirectFragment = require('./middlewares/redirectFragment')
const redirect = require('./middlewares/redirect')
const home = require('./routes/home')
const article = require('./routes/articles')
const albums = require('./routes/albums')
@@ -36,24 +33,7 @@ const dirPublic = path.join(__dirname, '../public')
handlebars.registerHelper('raw-helper', options => options.fn())
const collectiveOrder = [
'mg-timasheva',
'va-sarzhin',
'od-gogoleva',
'my-valkova',
'vv-voronova',
'nv-andreeva',
]
const sessionConfig = {
key: 'sid', /** (string) cookie key */
maxAge: 86400000, /** (number) maxAge in ms */
overwrite: false, /** (boolean) can overwrite or not */
httpOnly: false, /** (boolean) httpOnly or not */
signed: true, /** (boolean) signed or not */
}
export default function (store) {
export default function (config) {
const $ = convert
const app = new Koa()
@@ -71,7 +51,7 @@ export default function (store) {
app.use($(conditional()))
app.use($(etag()))
app.use(serve(dirPublic))
app.use($(redirect(redirectionTable)))
app.use(redirect(config.redirect))
app.use($(helmet()))
app.use(queryObject())
@@ -83,16 +63,16 @@ export default function (store) {
await next()
})
app.use(error.notFound(config.view404))
app.use(error.notFound(view404))
app.use(sitemap())
app.use(redirectFragment())
app.use(home.getHome(5))
app.use(home.getHome(config.articlesPerPage))
app.use(gallery.getGallery())
app.use(article.getArticles(5))
app.use(article.getArticles(config.articlesPerPage))
app.use(article.getArticle())
app.use(albums.getAlbum())
app.use(teachers.getCollective(collectiveOrder))
app.use(teachers.getCollective(config.collectiveOrder))
app.use(teachers.getTeacher())
app.use(documents.getDocuments())
app.use(document.getDocument())