filefive
Version:
SFTP/FTP/Amazon S3 client and dual-panel file manager for macOS and Linux
94 lines (93 loc) • 3.35 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.explorerSettings = explorerSettings;
exports.default = default_1;
const node_fs_1 = require("node:fs");
const path_1 = require("path");
const types_1 = require("../types");
const Local_1 = require("../fs/Local");
const URI_1 = require("../utils/URI");
const Connection_1 = __importDefault(require("../Connection"));
const Password_1 = __importDefault(require("../Password"));
const Session_1 = __importDefault(require("../Session"));
const ramda_1 = require("ramda");
function explorerSettings(attributes, config) {
return {
columns: config ? [
...config.columns
.map(({ name, width }) => {
const attribute = attributes.find((0, ramda_1.whereEq)({ name }));
return attribute ? { ...attribute, visible: true, width } : null;
})
.filter(ramda_1.isNotNil),
...attributes
.filter(({ name }) => !config.columns.find(c => name == c.name))
.map(a => ({ ...a, visible: false, width: 250 }))
] : attributes.map(a => ({ ...a, visible: true, width: 250 })),
...({
sort: config?.sort ?? ['name', types_1.SortOrder.Asc],
history: config?.history ?? [],
filter: config?.filter ?? null
})
};
}
async function default_1(file, onError) {
const stat = (0, node_fs_1.statSync)(file);
if (!stat.isFile() && !stat.isSymbolicLink()) {
return false;
}
let config;
try {
config = JSON.parse((0, node_fs_1.readFileSync)(file).toString());
}
catch (e) {
throw new Error(`Invalid connection file ${file}`);
}
if (!(0, ramda_1.where)({
scheme: ramda_1.isNotEmpty,
user: ramda_1.isNotEmpty,
host: ramda_1.isNotEmpty,
port: ramda_1.isNotEmpty
}, config)) {
throw new Error(`Invalid connection file ${file}`);
}
const id = (0, URI_1.connectionID)(config.scheme, config.user, config.host, config.port);
let password = '';
if (!config.privatekey) {
try {
password = await Password_1.default.get(id);
}
catch (e) {
return false;
}
if (!password) {
return false;
}
}
try {
const attributes = await Connection_1.default.open(config.scheme, config.user, config.host, config.port, password, config.privatekey);
const pwd = await Connection_1.default.get(id).pwd();
const settings = {
name: (0, path_1.parse)(file).name,
attributes,
pwd,
theme: config.theme ?? 'black',
local: explorerSettings(Local_1.ATTRIBUTES, config.local),
remote: explorerSettings(attributes, config.remote),
path: {
local: config.path?.local,
remote: config.path?.remote ?? pwd
},
sync: config.sync ?? null
};
return { id, sid: Session_1.default.create(), settings };
}
catch (e) {
Password_1.default.delete(id, false);
onError(id, e);
return false;
}
}