mirror of https://github.com/Requarks/wiki.git
10 changed files with 224 additions and 244 deletions
Split View
Diff Options
-
27config.sample.yml
-
28controllers/pages.js
-
5gulpfile.js
-
20models/db.js
-
9models/db/user.js
-
110models/entries.js
-
243models/git.js
-
7models/localdata.js
-
6package.json
-
13server.js
@ -1,9 +0,0 @@ |
|||
"use strict"; |
|||
|
|||
var bcrypt = require('bcryptjs-then'); |
|||
var Promise = require('bluebird'); |
|||
var _ = require('lodash'); |
|||
|
|||
module.exports = { |
|||
|
|||
}; |
@ -0,0 +1,110 @@ |
|||
"use strict"; |
|||
|
|||
var Promise = require('bluebird'), |
|||
path = require('path'), |
|||
fs = Promise.promisifyAll(require("fs")), |
|||
_ = require('lodash'), |
|||
farmhash = require('farmhash'), |
|||
msgpack = require('msgpack5')(); |
|||
|
|||
/** |
|||
* Entries Model |
|||
*/ |
|||
module.exports = { |
|||
|
|||
_repoPath: 'repo', |
|||
_cachePath: 'data/cache', |
|||
|
|||
/** |
|||
* Initialize Entries model |
|||
* |
|||
* @param {Object} appconfig The application config |
|||
* @return {Object} Entries model instance |
|||
*/ |
|||
init(appconfig) { |
|||
|
|||
let self = this; |
|||
|
|||
self._repoPath = appconfig.datadir.repo; |
|||
self._cachePath = path.join(appconfig.datadir.db, 'cache'); |
|||
|
|||
return self; |
|||
|
|||
}, |
|||
|
|||
fetch(entryPath) { |
|||
|
|||
let self = this; |
|||
|
|||
let fpath = path.join(self._repoPath, entryPath + '.md'); |
|||
let cpath = path.join(self._cachePath, farmhash.fingerprint32(entryPath) + '.bin'); |
|||
|
|||
return fs.statAsync(cpath).then((st) => { |
|||
return st.isFile(); |
|||
}).catch((err) => { |
|||
return false; |
|||
}).then((isCache) => { |
|||
|
|||
if(isCache) { |
|||
|
|||
console.log('from cache!'); |
|||
|
|||
return fs.readFileAsync(cpath, 'utf8').then((contents) => { |
|||
return msgpack.decode(contents); |
|||
}).catch((err) => { |
|||
winston.error('Corrupted cache file. Deleting it...'); |
|||
fs.unlinkSync(cpath); |
|||
return false; |
|||
}); |
|||
|
|||
} else { |
|||
|
|||
console.log('original!'); |
|||
|
|||
// Parse original and cache it
|
|||
|
|||
return fs.statAsync(fpath).then((st) => { |
|||
if(st.isFile()) { |
|||
return fs.readFileAsync(fpath, 'utf8').then((contents) => { |
|||
let pageData = mark.parse(contents); |
|||
if(!pageData.meta.title) { |
|||
pageData.meta.title = entryPath; |
|||
} |
|||
let cacheData = msgpack.encode(pageData); |
|||
return fs.writeFileAsync(cpath, cacheData, { encoding: 'utf8' }).then(() => { |
|||
return pageData; |
|||
}).catch((err) => { |
|||
winston.error('Unable to write to cache! Performance may be affected.'); |
|||
return pageData; |
|||
}); |
|||
}); |
|||
} else { |
|||
return false; |
|||
} |
|||
}); |
|||
|
|||
} |
|||
|
|||
}); |
|||
|
|||
|
|||
|
|||
}, |
|||
|
|||
parsePath(urlPath) { |
|||
|
|||
let wlist = new RegExp('[^a-z0-9/\-]','g'); |
|||
|
|||
urlPath = _.toLower(urlPath).replace(wlist, ''); |
|||
|
|||
if(urlPath === '/') { |
|||
urlPath = 'home'; |
|||
} |
|||
|
|||
let urlParts = _.filter(_.split(urlPath, '/'), (p) => { return !_.isEmpty(p); }); |
|||
|
|||
return _.join(urlParts, '/'); |
|||
|
|||
} |
|||
|
|||
}; |
Write
Preview
Loading…
Cancel
Save