-
Notifications
You must be signed in to change notification settings - Fork 105
Expand file tree
/
Copy pathutils.js
More file actions
124 lines (99 loc) · 2.7 KB
/
Copy pathutils.js
File metadata and controls
124 lines (99 loc) · 2.7 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var path = require('path');
var fs = require('fs');
exports.param = function(req, name, def) {
var result = req.query[name];
if (result == null) result = req.body[name];
if (result == null) result = (def == null ? null : def);
return result;
}
exports.getRootCacheName = function(app) {
return path.join(app.locals.config.dirs.cachedir, 'rootcache');
};
exports.filenameFromUri = function(req) {
var path = req.path;
if (!path || path.length == 0 || path[0] != '/') {
return path;
}
return path.substring(1);
};
exports.errorExit = errorExit;
function errorExit(msg) {
// console.log('ERROREXIT: ' + msg);
throw new ImmediateReturnError(msg, {'error': msg});
}
exports.ImmediateReturnError = ImmediateReturnError;
function ImmediateReturnError(message, jsonObj) {
this.name = 'ImmediateReturnError';
this.message = message;
this.jsonObj = jsonObj;
}
ImmediateReturnError.prototype = Error.prototype;
//
// Return user key directory where password is stored.
//
exports.getKeyDir = function(user, app) {
return path.resolve(
path.join(app.locals.config.dirs.datadir, user, '.key'));
};
//
// Check if filename is present and is a file (or a dir)
//
exports.isPresent = function(filename, fileordir) {
var statObj = null;
try {
statObj = fs.statSync(filename);
}
catch (e) {
return false;
}
if (fileordir == 'file' && statObj.isFile()) {
return true;
}
if (fileordir == 'dir' && statObj.isDirectory()) {
return true;
}
return false;
};
//
// Return user home dir
//
exports.getUserHomeDir = function(user, app) {
return path.resolve(path.join(app.locals.config.dirs.datadir, user));
};
//
// Validate user name
//
exports.validateUserName = function(user) {
if (user && !/^[A-Za-z]\w{2,}$/.test(user)) {
errorExit('Bad username ' + user);
}
};
//
// Validate filename
//
exports.isFileNameValid = function(filename, needone) {
var pattern = (needone) ?
/^(?:[\w][\w\.\-]*)(?:\/[\w][\w\.\-]*)+\/?$/ :
/^(?:[\w][\w\.\-]*)(?:\/[\w][\w\.\-]*)*\/?$/;
if (!pattern.test(filename)) {
return false;
}
return true;
};
exports.makeAbsolute = makeAbsolute;
function makeAbsolute(filename, app) {
var absfile = path.join(app.locals.config.dirs.datadir, filename);
if (absfile.indexOf(app.locals.config.dirs.datadir) != 0) {
errorExit('Illegal filename ' + filename);
}
return path.resolve(absfile);
};
var THUMB_DIR = '.thumb/';
exports.getAbsThumbPath = function(filename, app) {
return makeAbsolute(makeThumbPath(filename), app);
}
exports.makeThumbPath = makeThumbPath;
function makeThumbPath(filename) {
return path.join(path.dirname(filename), THUMB_DIR,
path.basename(filename) + '.png');
}