forked from kaotika/node-file-manager
-
Notifications
You must be signed in to change notification settings - Fork 10
/
index.mjs
60 lines (46 loc) · 1.56 KB
/
index.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* make the app mountable
*
* @author Nabil Redmann 2018/2020/2022
*
* @example
* import fm from 'app-filemanager-esm';
* var appFm = fm('/uploadpath', 'zip|txt|mp4').app;
* mainApp.use(mount('/fm', appFm));
**/
import Koa from 'koa';
import path from 'path';
import koaStatic from 'koa-static';
import Tools from './lib/tools';
import IndexRouter from './lib/routes';
let __dir_name = (typeof __dirname !== 'undefined') ? __dirname : '';
if (!__dir_name) {
const im = import.meta; // fix node module -- fucks up babel
__dir_name = path.resolve(path.dirname(decodeURI(new url.URL(im.url).pathname)));
}
const package_json = JSON.parse(await fs.readFile(__dir_name + '/../package.json', 'utf-8'));
// factory
const fm = function init(pathToWatch, filefilter, mimefilter, maxsize, appname) {
global.NODEFILEMANAGER = {
BASEPATH: __dirname,
DATA_ROOT: pathToWatch || __dirname,
FILEFILTER: filefilter || 'zip|tar.gz|7z|7zip|tar|gz|tgz|tbz|tar.bz2|tar.bz|txt|jpg|png|avi|mp4',
MIMEFILTER: mimefilter || 'video/*|audio/*|image/*',
MAXSIZE: (maxsize || 300) * 1024 * 1024,
VERSION: package_json.version,
APPNAME: appname || package_json.config.name
};
var app = new Koa();
app.proxy = true;
app.on('error', Tools.handleAppError);
app.use(Tools.logTraffic);
app.use(Tools.handelError);
app.use(Tools.realIp);
app.use(IndexRouter)
app.use(koaStatic(path.join(__dir_name, './lib/public/')));
fm.app = app;
return fm;
}
fm.app = null; // init property
// export factory to be used in any Koa app
export default fm;