DocSpace-client/common/ASC.SsoAuth/app/fileManager.js
2021-05-31 11:35:42 +03:00

163 lines
4.3 KiB
JavaScript

/*
*
* (c) Copyright Ascensio System Limited 2010-2021
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
"use strict";
const fs = require('fs'),
path = require('path'),
co = require("co"),
request = require("request");
const config = require('../config');
const appDataDirPath = path.join(__dirname, config.get("web:data"));
function getDataDirPath(subdir = "", createIfNotExist = true) {
var fullPath = path.join(appDataDirPath, subdir);
if (!createIfNotExist) return fullPath;
return co(function* () {
yield createDir(appDataDirPath);
return createDir(fullPath);
});
}
function createDir(pathToDir) {
return co(function* () {
const exist = yield checkDirExist(pathToDir);
if (exist) {
return pathToDir;
}
return new Promise((resolve, reject) => {
fs.mkdir(pathToDir,
(err) => {
if (err) {
reject(err);
return;
}
resolve(pathToDir);
});
});
}).catch((err) => {
log.error("Create App_Data error", err);
});
}
function checkDirExist(pathToDir) {
return new Promise((resolve, reject) => {
fs.stat(pathToDir,
function (err, stats) {
if (err) {
if (err.code === 'ENOENT') {
resolve(false);
} else {
reject(err);
}
return;
}
resolve(stats.isDirectory());
});
});
}
function checkFileExist(pathToFile) {
return new Promise((resolve, reject) => {
fs.stat(pathToFile,
function (err, stats) {
if (err) {
if (err.code === 'ENOENT') {
resolve(false);
} else {
reject(err);
}
return;
}
resolve(stats.isFile());
});
});
}
function copyFile(source, target, append = false) {
return new Promise(function (resolve, reject) {
var rd = fs.createReadStream(source);
rd.on('error', rejectCleanup);
const writeOptions = { flags: append ? 'a' : 'w' };
var wr = fs.createWriteStream(target, writeOptions);
wr.on('error', rejectCleanup);
function rejectCleanup(err) {
rd.destroy();
wr.end();
reject(err);
}
wr.on('finish', resolve);
rd.pipe(wr);
});
}
function moveFile(from, to) {
return co(function* () {
const isExist = yield checkFileExist(from);
if (!isExist) return;
return new Promise((resolve, reject) => {
fs.rename(from, to, () => { resolve(); });
});
})
.catch((error) => {
throw error;
});
}
function deleteFile(pathToFile) {
return co(function* () {
const isExist = yield checkFileExist(pathToFile);
if (!isExist) return;
return new Promise((resolve, reject) => {
fs.unlink(pathToFile, () => { resolve(); });
});
})
.catch((error) => {
throw error;
});
}
function downloadFile(uri, filePath) {
return new Promise((resolve, reject) => {
const data = request
.get(uri, { rejectUnauthorized: false })
.on('error', (err) => {
reject(err);
})
.pipe(fs.createWriteStream(filePath))
.on('error', (err) => {
reject(err);
})
.on('finish', () => {
resolve(filePath);
});
});
}
module.exports = { checkFileExist, createDir, copyFile, moveFile, deleteFile, getDataDirPath, downloadFile };