server: migrate getDirectoryList to TypeScript

This commit is contained in:
Jesse Chan
2020-10-07 19:46:24 +08:00
parent 16465f4239
commit dbde60b35e
5 changed files with 70 additions and 85 deletions
-45
View File
@@ -1,45 +0,0 @@
import fs from 'fs';
import os from 'os';
import path from 'path';
import fileUtil from '../util/fileUtil';
const getDirectoryList = (options, callback) => {
const sourcePath = (options.path || '/').replace(/^~/, os.homedir());
const resolvedPath = fileUtil.sanitizePath(sourcePath);
if (!fileUtil.isAllowedPath(resolvedPath)) {
callback(null, fileUtil.accessDeniedError());
return;
}
try {
const directories = [];
const files = [];
fs.readdirSync(resolvedPath).forEach((item) => {
const joinedPath = path.join(resolvedPath, item);
if (fs.existsSync(joinedPath)) {
if (fs.statSync(joinedPath).isDirectory()) {
directories.push(item);
} else {
files.push(item);
}
}
});
const hasParent = /^.{0,}:?(\/|\\){1,1}\S{1,}/.test(resolvedPath);
callback({
directories,
files,
hasParent,
path: resolvedPath,
separator: path.sep,
});
} catch (error) {
callback(null, error);
}
};
export default {getDirectoryList};
+9 -9
View File
@@ -4,10 +4,10 @@ import sanitize from 'sanitize-filename';
import {series} from 'async';
import tar from 'tar-stream';
import {accessDeniedError, createDirectory, isAllowedPath, sanitizePath} from '../util/fileUtil';
import ClientRequest from './ClientRequest';
import clientResponseUtil from '../util/clientResponseUtil';
import {clientSettingsBiMap} from '../../shared/constants/clientSettingsMap';
import fileUtil from '../util/fileUtil';
import settings from './settings';
import torrentFilePropsMap from '../../shared/constants/torrentFilePropsMap';
import torrentPeerPropsMap from '../../shared/constants/torrentPeerPropsMap';
@@ -18,13 +18,13 @@ const client = {
addFiles(user, services, options, callback) {
const {destination: destinationPath, files, isBasePath, start, tags} = options;
const resolvedPath = fileUtil.sanitizePath(destinationPath);
if (!fileUtil.isAllowedPath(resolvedPath)) {
callback(null, fileUtil.accessDeniedError());
const resolvedPath = sanitizePath(destinationPath);
if (!isAllowedPath(resolvedPath)) {
callback(null, accessDeniedError());
return;
}
fileUtil.createDirectory({path: resolvedPath});
createDirectory({path: resolvedPath});
// Each torrent is sent individually because rTorrent accepts a total
// filesize of 524 kilobytes or less. This allows the user to send many
@@ -56,12 +56,12 @@ const client = {
addUrls(user, services, data, callback) {
const {urls, destination, isBasePath, start, tags} = data;
const request = new ClientRequest(user, services);
const resolvedPath = fileUtil.sanitizePath(destination);
if (!fileUtil.isAllowedPath(resolvedPath)) {
callback(null, fileUtil.accessDeniedError());
const resolvedPath = sanitizePath(destination);
if (!isAllowedPath(resolvedPath)) {
callback(null, accessDeniedError());
return;
}
fileUtil.createDirectory({path: resolvedPath});
createDirectory({path: resolvedPath});
request.addURLs({
urls,
path: resolvedPath,