@sync-in/server
Version:
The secure, open-source platform for file storage, sharing, collaboration, and sync
143 lines (142 loc) • 4.52 kB
JavaScript
/*
* Copyright (C) 2012-2025 Johan Legrand <johan.legrand@sync-in.com>
* This file is part of Sync-in | The open source file sync and share solution
* See the LICENSE file for licensing details
*/ /* THIS FILE IS SHARED WITH THE FRONTEND PACKAGE */ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get APP_URL () {
return APP_URL;
},
get SERVER_NAME () {
return SERVER_NAME;
},
get capitalizeString () {
return capitalizeString;
},
get createLightSlug () {
return createLightSlug;
},
get createSlug () {
return createSlug;
},
get currentDate () {
return currentDate;
},
get currentTimeStamp () {
return currentTimeStamp;
},
get decodeUrl () {
return decodeUrl;
},
get encodeUrl () {
return encodeUrl;
},
get forbiddenChars () {
return forbiddenChars;
},
get genPassword () {
return genPassword;
},
get intersectPermissions () {
return intersectPermissions;
},
get isValidFileName () {
return isValidFileName;
},
get objectPropertyFromString () {
return objectPropertyFromString;
},
get popFromObject () {
return popFromObject;
},
get regExpInvalidFileName () {
return regExpInvalidFileName;
},
get regExpNumberSuffix () {
return regExpNumberSuffix;
},
get regExpPreventPathTraversal () {
return regExpPreventPathTraversal;
}
});
const _spaces = require("../applications/spaces/constants/spaces");
const SERVER_NAME = 'Sync-in';
const APP_URL = {
WEBSITE: 'https://sync-in.com',
RELEASES: 'https://github.com/Sync-in/server/releases',
SERVER_VERSION_MANIFEST: 'https://releases.sync-in.org/sync-in-server/latest.json'
};
const regExpInvalidFileName = /^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$|[<>:"/\\|?*\x00-\x1f\x80-\x9f]/;
const regExpPreventPathTraversal = /^(\.\.(\/|\\|$))+/;
const regExpNumberSuffix = /-\d+$/;
const forbiddenChars = '\\ / : * ? " < > |';
function isValidFileName(fileName) {
if (regExpInvalidFileName.test(fileName)) {
throw new Error('Forbidden characters');
}
}
function currentTimeStamp(date, ms = false) {
return Math.floor((date ? date : new Date()).getTime() / (ms ? 1 : 1000));
}
function currentDate(value) {
return new Date((value ? value : new Date().toISOString()).split('T')[0]);
}
function createSlug(input, replaceCount = false) {
const r = input.toLowerCase().trim().replace(/[\s_-]+/g, '-').replace(/^-+|-+$/g, '').normalize('NFD').replace(/[\u0300-\u036f]/g, '');
if (replaceCount) return r.replace(regExpNumberSuffix, '');
return r;
}
function createLightSlug(input) {
return input.toLowerCase().trim().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
}
function genPassword(length = 12) {
const chars = '0123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let password = '';
for(let i = 0; i <= length; i++){
const randomNumber = Math.floor(Math.random() * chars.length);
password += chars.substring(randomNumber, randomNumber + 1);
}
return password;
}
function popFromObject(key, object) {
const item = object[key];
delete object[key];
return item;
}
function encodeUrl(url) {
return url.split('/').map((e)=>encodeURIComponent(e)).join('/');
}
function decodeUrl(url) {
return url.split('/').map((e)=>decodeURIComponent(e)).join('/');
}
function objectPropertyFromString(obj, property) {
const a = property.split('.');
let o = obj;
for(let i = 0, n = a.length; i < n; i++){
const k = a[i];
if (k in o) {
o = o[k];
} else {
return null;
}
}
return o;
}
function capitalizeString(value) {
return value.charAt(0).toUpperCase() + value.slice(1);
}
function intersectPermissions(aPermissions, bPermissions, permissionsSeparator = _spaces.SPACE_PERMS_SEP) {
const aPerms = aPermissions.split(permissionsSeparator);
const bPerms = bPermissions.split(permissionsSeparator);
return aPerms.filter((p)=>p !== '' && p !== 'null' && bPerms.indexOf(p) > -1).sort().join(permissionsSeparator);
}
//# sourceMappingURL=shared.js.map