Merge branch 'master' of https://github.com/Ylianst/MeshCentral
This commit is contained in:
commit
7a38b70506
|
@ -58,6 +58,7 @@ ENV CONFIG_FILE="config.json"
|
|||
ENV USE_MONGODB="false"
|
||||
ENV MONGO_INITDB_ROOT_USERNAME="root"
|
||||
ENV MONGO_INITDB_ROOT_PASSWORD="pass"
|
||||
ENV MONGO_URL=""
|
||||
ENV HOSTNAME="localhost"
|
||||
ENV ALLOW_NEW_ACCOUNTS="true"
|
||||
ENV ALLOWPLUGINS="false"
|
||||
|
|
|
@ -13,11 +13,15 @@
|
|||
# Templates
|
||||
|
||||
## .env
|
||||
You can place the `config.json` file directly under `./meshcentral/data/`, or use the following `.env` file instead.
|
||||
|
||||
```ini
|
||||
NODE_ENV=production
|
||||
|
||||
# initial mongodb-variables
|
||||
USE_MONGODB=false
|
||||
# set already exist mongo connection string url here
|
||||
MONGO_URL=
|
||||
# or set following init params for new mongodb, use it with docker-compose file with mongodb version
|
||||
MONGO_INITDB_ROOT_USERNAME=mongodbadmin
|
||||
MONGO_INITDB_ROOT_PASSWORD=mongodbpasswd
|
||||
|
||||
|
@ -26,8 +30,7 @@ MONGO_INITDB_ROOT_PASSWORD=mongodbpasswd
|
|||
|
||||
# your hostname
|
||||
HOSTNAME=my.domain.com
|
||||
USE_MONGODB=false
|
||||
# set to your reverse proxy IP if you want to put meshcentral behind a reverse proxy
|
||||
# set to your reverse proxy IP if you want to put meshcentral behind a reverse proxy
|
||||
REVERSE_PROXY=false
|
||||
REVERSE_PROXY_TLS_PORT=
|
||||
# set to true if you wish to enable iframe support
|
||||
|
|
|
@ -1,28 +1,34 @@
|
|||
#!/bin/bash
|
||||
|
||||
if [ -f "meshcentral-data/${CONFIG_FILE}" ]
|
||||
then
|
||||
node meshcentral/meshcentral --configfile ${CONFIG_FILE}
|
||||
else
|
||||
cp config.json.template meshcentral-data/${CONFIG_FILE}
|
||||
if ! [ -z "$USE_MONGODB" ] && [ "$USE_MONGODB" == "true" ]; then
|
||||
sed -i "s/\"_mongoDb\": null/\"mongoDb\": \"mongodb:\/\/$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@mongodb:27017\"/" meshcentral-data/${CONFIG_FILE}
|
||||
if [ -f "meshcentral-data/${CONFIG_FILE}" ]; then
|
||||
node meshcentral/meshcentral --configfile "${CONFIG_FILE}"
|
||||
else
|
||||
cp config.json.template meshcentral-data/"${CONFIG_FILE}"
|
||||
if [ -n "$USE_MONGODB" ] && [ "$USE_MONGODB" == "true" ]; then
|
||||
if [ -z "$MONGO_URL" ]; then
|
||||
prefix=""
|
||||
if [ -n "$MONGO_INITDB_ROOT_USERNAME" ] && [ -n "$MONGO_INITDB_ROOT_PASSWORD" ]; then
|
||||
prefix="$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@"
|
||||
fi
|
||||
MONGO_URL="${prefix}mongodb:27017"
|
||||
fi
|
||||
sed -i "s/\"cert\": \"myserver.mydomain.com\"/\"cert\": \"$HOSTNAME\"/" meshcentral-data/${CONFIG_FILE}
|
||||
sed -i "s/\"NewAccounts\": true/\"NewAccounts\": $ALLOW_NEW_ACCOUNTS/" meshcentral-data/${CONFIG_FILE}
|
||||
sed -i "s/\"enabled\": false/\"enabled\": $ALLOWPLUGINS/" meshcentral-data/${CONFIG_FILE}
|
||||
sed -i "s/\"localSessionRecording\": false/\"localSessionRecording\": $LOCALSESSIONRECORDING/" meshcentral-data/${CONFIG_FILE}
|
||||
sed -i "s/\"minify\": true/\"minify\": $MINIFY/" meshcentral-data/${CONFIG_FILE}
|
||||
sed -i "s/\"WebRTC\": false/\"WebRTC\": $WEBRTC/" meshcentral-data/${CONFIG_FILE}
|
||||
sed -i "s/\"AllowFraming\": false/\"AllowFraming\": $IFRAME/" meshcentral-data/${CONFIG_FILE}
|
||||
if [ -z "$SESSION_KEY" ]; then
|
||||
SESSION_KEY="$(cat /dev/urandom | tr -dc 'A-Za-z0-9!#$%&()*+,-./:;<=>?@[\]^_`{|}~' | fold -w 32 | head -n 1)";
|
||||
fi
|
||||
sed -i "s/\"_sessionKey\": \"MyReallySecretPassword1\"/\"sessionKey\": \"$SESSION_KEY\"/" meshcentral-data/${CONFIG_FILE}
|
||||
if [ "$REVERSE_PROXY" != "false" ]; then
|
||||
sed -i "s/\"_certUrl\": \"my\.reverse\.proxy\"/\"certUrl\": \"https:\/\/$REVERSE_PROXY:$REVERSE_PROXY_TLS_PORT\"/" meshcentral-data/${CONFIG_FILE}
|
||||
node meshcentral/meshcentral --configfile ${CONFIG_FILE}
|
||||
exit
|
||||
fi
|
||||
node meshcentral/meshcentral --configfile ${CONFIG_FILE} --cert "$HOSTNAME"
|
||||
sed -i "s/\"_mongoDb\": null/\"mongoDb\": \"mongodb:\/\/$MONGO_URL\"/" meshcentral-data/"${CONFIG_FILE}"
|
||||
fi
|
||||
sed -i "s/\"cert\": \"myserver.mydomain.com\"/\"cert\": \"$HOSTNAME\"/" meshcentral-data/"${CONFIG_FILE}"
|
||||
sed -i "s/\"NewAccounts\": true/\"NewAccounts\": $ALLOW_NEW_ACCOUNTS/" meshcentral-data/"${CONFIG_FILE}"
|
||||
sed -i "s/\"enabled\": false/\"enabled\": $ALLOWPLUGINS/" meshcentral-data/"${CONFIG_FILE}"
|
||||
sed -i "s/\"localSessionRecording\": false/\"localSessionRecording\": $LOCALSESSIONRECORDING/" meshcentral-data/"${CONFIG_FILE}"
|
||||
sed -i "s/\"minify\": true/\"minify\": $MINIFY/" meshcentral-data/"${CONFIG_FILE}"
|
||||
sed -i "s/\"WebRTC\": false/\"WebRTC\": $WEBRTC/" meshcentral-data/"${CONFIG_FILE}"
|
||||
sed -i "s/\"AllowFraming\": false/\"AllowFraming\": $IFRAME/" meshcentral-data/"${CONFIG_FILE}"
|
||||
if [ -z "$SESSION_KEY" ]; then
|
||||
SESSION_KEY="$(cat /dev/urandom | tr -dc 'A-Za-z0-9!#$%&()*+,-./:;<=>?@[\]^_`{|}~' | fold -w 32 | head -n 1)"
|
||||
fi
|
||||
sed -i "s/\"_sessionKey\": \"MyReallySecretPassword1\"/\"sessionKey\": \"$SESSION_KEY\"/" meshcentral-data/"${CONFIG_FILE}"
|
||||
if [ "$REVERSE_PROXY" != "false" ]; then
|
||||
sed -i "s/\"_certUrl\": \"my\.reverse\.proxy\"/\"certUrl\": \"https:\/\/$REVERSE_PROXY:$REVERSE_PROXY_TLS_PORT\"/" meshcentral-data/"${CONFIG_FILE}"
|
||||
node meshcentral/meshcentral --configfile "${CONFIG_FILE}"
|
||||
exit
|
||||
fi
|
||||
node meshcentral/meshcentral --configfile "${CONFIG_FILE}" --cert "$HOSTNAME"
|
||||
fi
|
||||
|
|
|
@ -20,11 +20,11 @@ For more information, [visit MeshCentral.com](https://www.meshcentral.com/).
|
|||
|
||||
## Documentation
|
||||
|
||||
The [User's Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO.
|
||||
The [User's Guide](https://meshcentral.com/info/docs/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO.
|
||||
|
||||
The [Installation Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD.
|
||||
The [Installation Guide](https://meshcentral.com/info/docs/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD.
|
||||
|
||||
The [Design and Architecture Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service.
|
||||
The [Design and Architecture Guide](https://meshcentral.com/info/docs/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service.
|
||||
|
||||
## Video Tutorials
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 101 KiB |
|
@ -7,3 +7,30 @@ The SSH terminal does support color. The issue is going to be the terminal confi
|
|||
```bash
|
||||
ls -al --color /tmp
|
||||
```
|
||||
|
||||
## Fancy config editing with VS Code
|
||||
|
||||
A common problem in the issues is an incorrect config.json. What makes a config incorrect? How can you verify your config is correct?
|
||||
|
||||
Easy! Use Visual Studio Code to edit your config.json and add the schema at the top.
|
||||
|
||||
If you haven't already, download VS code.
|
||||
Download or copy the config.json to your computer.
|
||||
Open config.json in code and add the schema as the top line. This schema is the raw JSON file in the MeshCentral repo.
|
||||
|
||||
```json
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json",
|
||||
"settings": {
|
||||
"your settings go here": "..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Now you have autocomplete, auto-format and validation for your config.json! If you start typing, Code will show the values that are valid for the location you are editing. Words with a red squiggle line are errors. Words with a orange squiggle line are warnings. Hover over both to see the error message and possible fixes. Code can even format your config.
|
||||
|
||||
While this is a huge step up, it's not perfect. If you notice, there are some invalid keys in the screenshot. This is perfectly valid JSON and MeshCentral will ignore them (maybe?). If you paste some configs into the wrong section, code will not tell you it's in the wrong section. Autocomplete will tell you what keys are valid and the type of the value (i.e. string, number, boolean).
|
||||
|
||||
Hopefully this will help verify your config is syntactically correct and prevent needless formatting errors, misspellings, etc.
|
||||
|
||||
![](images/2023-02-24vscodejsonediting.png)
|
|
@ -274,6 +274,7 @@ devicesharing
|
|||
devicepower
|
||||
indexagenterrorlog
|
||||
agentdownload
|
||||
report
|
||||
```
|
||||
|
||||
You can get this list by just running MeshCtrl without any argument and can get more information on each action by typing “meshctrl help [action]”
|
||||
|
|
|
@ -21,7 +21,7 @@ MeshCentral is a remote management web site that connects users to remote comput
|
|||
## Downloading
|
||||
|
||||
MeshCentral router is a Windows application that comes built-into the MeshCentral server or can
|
||||
be downloaded at: <http://info.meshcentral.com/downloads/MeshCentral2/MeshCentralRouter.exe>
|
||||
be downloaded at: <https://meshcentral.com/info/tools/MeshCentralRouter.exe>
|
||||
|
||||
It’s probably best to use the MeshCentral router that comes with your version of the MeshCentral
|
||||
server as the two will likely be most compatible. A given MeshCentral Router version may not
|
||||
|
|
66
meshctrl.js
66
meshctrl.js
|
@ -16,7 +16,7 @@ var settings = {};
|
|||
const crypto = require('crypto');
|
||||
const args = require('minimist')(process.argv.slice(2));
|
||||
const path = require('path');
|
||||
const possibleCommands = ['edituser', 'listusers', 'listusersessions', 'listdevicegroups', 'listdevices', 'listusersofdevicegroup', 'listevents', 'logintokens', 'serverinfo', 'userinfo', 'adduser', 'removeuser', 'adddevicegroup', 'removedevicegroup', 'editdevicegroup', 'broadcast', 'showevents', 'addusertodevicegroup', 'removeuserfromdevicegroup', 'addusertodevice', 'removeuserfromdevice', 'sendinviteemail', 'generateinvitelink', 'config', 'movetodevicegroup', 'deviceinfo', 'removedevice', 'editdevice', 'addusergroup', 'listusergroups', 'removeusergroup', 'runcommand', 'shell', 'upload', 'download', 'deviceopenurl', 'devicemessage', 'devicetoast', 'addtousergroup', 'removefromusergroup', 'removeallusersfromusergroup', 'devicesharing', 'devicepower', 'indexagenterrorlog', 'agentdownload'];
|
||||
const possibleCommands = ['edituser', 'listusers', 'listusersessions', 'listdevicegroups', 'listdevices', 'listusersofdevicegroup', 'listevents', 'logintokens', 'serverinfo', 'userinfo', 'adduser', 'removeuser', 'adddevicegroup', 'removedevicegroup', 'editdevicegroup', 'broadcast', 'showevents', 'addusertodevicegroup', 'removeuserfromdevicegroup', 'addusertodevice', 'removeuserfromdevice', 'sendinviteemail', 'generateinvitelink', 'config', 'movetodevicegroup', 'deviceinfo', 'removedevice', 'editdevice', 'addusergroup', 'listusergroups', 'removeusergroup', 'runcommand', 'shell', 'upload', 'download', 'deviceopenurl', 'devicemessage', 'devicetoast', 'addtousergroup', 'removefromusergroup', 'removeallusersfromusergroup', 'devicesharing', 'devicepower', 'indexagenterrorlog', 'agentdownload', 'report'];
|
||||
if (args.proxy != null) { try { require('https-proxy-agent'); } catch (ex) { console.log('Missing module "https-proxy-agent", type "npm install https-proxy-agent" to install it.'); return; } }
|
||||
|
||||
if (args['_'].length == 0) {
|
||||
|
@ -69,6 +69,7 @@ if (args['_'].length == 0) {
|
|||
console.log(" DevicePower - Perform wake/sleep/reset/off operations on remote devices.");
|
||||
console.log(" DeviceSharing - View, add and remove sharing links for a given device.");
|
||||
console.log(" AgentDownload - Download an agent of a specific type for a device group.");
|
||||
console.log(" Report - Create and show a CSV report.");
|
||||
console.log("\r\nSupported login arguments:");
|
||||
console.log(" --url [wss://server] - Server url, wss://localhost:443 is default.");
|
||||
console.log(" - Use wss://localhost:443?key=xxx if login key is required.");
|
||||
|
@ -275,6 +276,11 @@ if (args['_'].length == 0) {
|
|||
else { ok = true; }
|
||||
break;
|
||||
}
|
||||
case 'report': {
|
||||
if (args.type == null) { console.log(winRemoveSingleQuotes("Missing report type, use --type '[reporttype]'")); }
|
||||
else { ok = true; }
|
||||
break;
|
||||
}
|
||||
case 'help': {
|
||||
if (args['_'].length < 2) {
|
||||
console.log("Get help on an action. Type:\r\n\r\n help [action]\r\n\r\nPossible actions are: " + possibleCommands.join(', ') + '.');
|
||||
|
@ -961,6 +967,20 @@ if (args['_'].length == 0) {
|
|||
console.log(" --title [title] - Toast title, default is \"MeshCentral\".");
|
||||
break;
|
||||
}
|
||||
case 'report': {
|
||||
console.log("Generate a CSV report, Example usages:\r\n");
|
||||
console.log(" MeshCtrl Report --type sessions --devicegroup mesh//...");
|
||||
console.log(" MeshCtrl Report --type traffic --json");
|
||||
console.log(" MeshCtrl Report --type logins --groupby day");
|
||||
console.log(" MeshCtrl Report --type db");
|
||||
console.log("\r\nOptional arguments:\r\n");
|
||||
console.log(" --start [yyyy-mm-ddThh:mm:ss] - Filter the results starting at that date. Defaults to last 24h and last week when used with --groupby day. Usable with sessions, traffic and logins");
|
||||
console.log(" --end [yyyy-mm-ddThh:mm:ss] - Filter the results ending at that date. Defaults to now. Usable with sessions, traffic and logins");
|
||||
console.log(" --groupby [name] - How to group results. Options: user, day, device. Defaults to user. User and day usable in sessions and logins, device usable in sessions.");
|
||||
console.log(" --devicegroup [devicegroupid] - Filter the results by device group. Usable in sessions");
|
||||
console.log(" --showtraffic - Add traffic data in sessions report");
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
console.log("Get help on an action. Type:\r\n\r\n help [action]\r\n\r\nPossible actions are: " + possibleCommands.join(', ') + '.');
|
||||
}
|
||||
|
@ -1683,6 +1703,41 @@ function serverConnect() {
|
|||
ws.send(JSON.stringify({ action: 'toast', nodeids: [args.id], title: args.title ? args.title : "MeshCentral", msg: args.msg, responseid: 'meshctrl' }));
|
||||
break;
|
||||
}
|
||||
case 'report': {
|
||||
var reporttype = 1;
|
||||
switch(args.type) {
|
||||
case 'traffic':
|
||||
reporttype = 2;
|
||||
break;
|
||||
case 'logins':
|
||||
reporttype = 3;
|
||||
break;
|
||||
case 'db':
|
||||
reporttype = 4;
|
||||
break;
|
||||
}
|
||||
|
||||
var reportgroupby = 1;
|
||||
if(args.groupby){
|
||||
reportgroupby = args.groupby === 'device' ? 2 : args.groupby === 'day' ? 3: 1;
|
||||
}
|
||||
|
||||
var start = null, end = null;
|
||||
if (args.start) {
|
||||
start = Math.floor(Date.parse(args.start) / 1000);
|
||||
} else {
|
||||
start = reportgroupby === 3 ? Math.round(new Date().getTime() / 1000) - (168 * 3600) : Math.round(new Date().getTime() / 1000) - (24 * 3600);
|
||||
}
|
||||
if (args.end) {
|
||||
end = Math.floor(Date.parse(args.end) / 1000);
|
||||
} else {
|
||||
end = Math.round(new Date().getTime() / 1000);
|
||||
}
|
||||
if (end <= start) { console.log("End time must be ahead of start time."); process.exit(1); return; }
|
||||
|
||||
ws.send(JSON.stringify({ action: 'report', type: reporttype, groupBy: reportgroupby, devGroup: args.devicegroup || null, start, end, tz: Intl.DateTimeFormat().resolvedOptions().timeZone, tf: new Date().getTimezoneOffset(), showTraffic: args.hasOwnProperty('showtraffic'), l: 'en', responseid: 'meshctrl' }));
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -2249,6 +2304,15 @@ function serverConnect() {
|
|||
console.log(data.data);
|
||||
process.exit();
|
||||
}
|
||||
case 'report': {
|
||||
console.log('group,' + data.data.columns.flatMap(c => c.id).join(','));
|
||||
Object.keys(data.data.groups).forEach(gk => {
|
||||
data.data.groups[gk].entries.forEach(e => {
|
||||
console.log(gk + ',' + Object.values(e).join(','));
|
||||
});
|
||||
});
|
||||
process.exit();
|
||||
}
|
||||
default: { break; }
|
||||
}
|
||||
//console.log('Data', data);
|
||||
|
|
|
@ -23,11 +23,11 @@ For more information, [visit MeshCentral.com](https://www.meshcentral.com).
|
|||
[BlogSpot](https://meshcentral2.blogspot.com/)
|
||||
|
||||
## Documentation
|
||||
The [User's Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO.
|
||||
The [User's Guide](https://meshcentral.com/info/docs/MeshCentral2UserGuide.pdf) contains information every adminstrator should know including usage, the server configuration file, databases, TLS offloading, Lets Encrypt, IP Filtering, Email setup, embedding, server port aliasing, reverse proxy setup, multi factor authentication, branding & terms of use, HashiCorp Vault support, and SSO.
|
||||
|
||||
The [Installation Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD.
|
||||
The [Installation Guide](https://meshcentral.com/info/docs/MeshCentral2InstallGuide.pdf) has detailed instructions for installing the MeshCentral Server on Windows 8.1, Windows 10, Windows 2012 R2, Amazon Linux 2, Raspberry Pi, Microsoft Azure, Google Cloud, Ubuntu 18, Ubuntu 16 and OpenBSD.
|
||||
|
||||
The [Design and Architecture Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service.
|
||||
The [Design and Architecture Guide](https://meshcentral.com/info/docs/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service.
|
||||
|
||||
[New Searchable Documentation](https://ylianst.github.io/MeshCentral/)
|
||||
|
||||
|
@ -69,4 +69,4 @@ If you are having issues with the following other products, you should file a re
|
|||
[MeshRouter](https://github.com/Ylianst/MeshCentralRouter/issues)
|
||||
|
||||
## License
|
||||
This software is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0).
|
||||
This software is licensed under [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0).
|
||||
|
|
|
@ -9697,7 +9697,7 @@
|
|||
"ru": "Alt",
|
||||
"sv": "Alt",
|
||||
"tr": "Alt",
|
||||
"zh-chs": "替代",
|
||||
"zh-chs": "Alt",
|
||||
"zh-cht": "Alt",
|
||||
"hu": "Alt",
|
||||
"xloc": [
|
||||
|
@ -9727,8 +9727,8 @@
|
|||
"ru": "Альтернативная оболочка",
|
||||
"sv": "Alt Shell",
|
||||
"tr": "Alt Kabuk",
|
||||
"zh-chs": "替代壳",
|
||||
"zh-cht": "替代殼",
|
||||
"zh-chs": "替代Shell",
|
||||
"zh-cht": "替代Shell",
|
||||
"hu": "Alternatív Shell",
|
||||
"xloc": [
|
||||
"default.handlebars->47->1280"
|
||||
|
@ -20532,8 +20532,8 @@
|
|||
"ru": "Del",
|
||||
"sv": "Del",
|
||||
"tr": "del",
|
||||
"zh-chs": "德尔",
|
||||
"zh-cht": "德爾",
|
||||
"zh-chs": "Del",
|
||||
"zh-cht": "Del",
|
||||
"hu": "Del",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->11->422",
|
||||
|
@ -35303,7 +35303,7 @@
|
|||
"ru": "Если вы не инициировали этот запрос, игнорируйте это письмо.",
|
||||
"sv": "Om du inte initierade denna begäran, ignorerar du det här meddelandet.",
|
||||
"tr": "Bu isteği siz başlatmadıysanız, lütfen bu postayı dikkate almayın.",
|
||||
"zh-chs": "如果您没有发起此请求,请不理此邮件。",
|
||||
"zh-chs": "如果您没有发起此请求,请忽略此邮件。",
|
||||
"zh-cht": "如果你沒有發起此請求,請不理此電郵。",
|
||||
"hu": "Ha nem Ön kezdeményezte ezt a kérést, kérjük, hagyja figyelmen kívül ezt a levelet.",
|
||||
"xloc": [
|
||||
|
@ -41037,8 +41037,8 @@
|
|||
"ru": "Left",
|
||||
"sv": "Vänster",
|
||||
"tr": "Sol",
|
||||
"zh-chs": "剩下",
|
||||
"zh-cht": "剩下",
|
||||
"zh-chs": "左",
|
||||
"zh-cht": "左",
|
||||
"hu": "Bal",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->11->427",
|
||||
|
@ -61030,8 +61030,8 @@
|
|||
"ru": "Right",
|
||||
"sv": "Rätt",
|
||||
"tr": "Doğru",
|
||||
"zh-chs": "正确的",
|
||||
"zh-cht": "正確的",
|
||||
"zh-chs": "右",
|
||||
"zh-cht": "右",
|
||||
"hu": "Jobb",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->11->429",
|
||||
|
@ -66340,8 +66340,8 @@
|
|||
"ru": "Shift",
|
||||
"sv": "Flytta",
|
||||
"tr": "Vardiya",
|
||||
"zh-chs": "转移",
|
||||
"zh-cht": "轉移",
|
||||
"zh-chs": "Shift",
|
||||
"zh-cht": "Shift",
|
||||
"hu": "Shift",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->11->432",
|
||||
|
@ -70539,8 +70539,8 @@
|
|||
"ru": "TAB",
|
||||
"sv": "FLIK",
|
||||
"tr": "Sekme",
|
||||
"zh-chs": "标签",
|
||||
"zh-cht": "標籤",
|
||||
"zh-chs": "TAB",
|
||||
"zh-cht": "TAB",
|
||||
"hu": "TAB"
|
||||
},
|
||||
{
|
||||
|
@ -70812,8 +70812,8 @@
|
|||
"ru": "Tab",
|
||||
"sv": "Flik",
|
||||
"tr": "Sekme",
|
||||
"zh-chs": "标签",
|
||||
"zh-cht": "標籤",
|
||||
"zh-chs": "Tab",
|
||||
"zh-cht": "Tab",
|
||||
"hu": "Tab",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->11->417",
|
||||
|
@ -75590,8 +75590,8 @@
|
|||
"ru": "Up",
|
||||
"sv": "Upp",
|
||||
"tr": "Yukarı",
|
||||
"zh-chs": "返回",
|
||||
"zh-cht": "向上",
|
||||
"zh-chs": "上",
|
||||
"zh-cht": "上",
|
||||
"hu": "Fel",
|
||||
"xloc": [
|
||||
"default-mobile.handlebars->11->428",
|
||||
|
@ -81566,7 +81566,7 @@
|
|||
"ru": "[[0]] токен доступа: [[1]]",
|
||||
"sv": "[[0]] åtkomsttoken är: [[1]]",
|
||||
"tr": "[[0]] erişim anahtarı: [[1]]",
|
||||
"zh-chs": "[[0]]访问保安编码是:[[1]]",
|
||||
"zh-chs": "[[0]]访问令牌是:[[1]]",
|
||||
"zh-cht": "[[0]]訪問保安編碼是:[[1]]",
|
||||
"hu": "[[0]] hozzáférés token: [[1]]",
|
||||
"xloc": [
|
||||
|
@ -81926,7 +81926,7 @@
|
|||
"ru": "[[[SERVERNAME]]] - подтверждение по электронной почте",
|
||||
"sv": "[[[SERVERNAME]]] - E-postverifiering",
|
||||
"tr": "[[[SERVERNAME]]] - E-posta Doğrulaması",
|
||||
"zh-chs": "更改邮件地址",
|
||||
"zh-chs": "[[[SERVERNAME]]] - 邮件验证",
|
||||
"zh-cht": "[[[SERVERNAME]]] - 電郵驗證",
|
||||
"hu": "[[[SERVERNAME]]] - Email megerősítés",
|
||||
"xloc": [
|
||||
|
@ -84419,7 +84419,7 @@
|
|||
"ru": "time, type, action, user, message",
|
||||
"sv": "tid, typ, åtgärd, användare, meddelande",
|
||||
"tr": "zaman, tür, işlem, kullanıcı, mesaj",
|
||||
"zh-chs": "时间,类型,指令,用户,消息",
|
||||
"zh-chs": "时间,打字,指令,用户,消息",
|
||||
"zh-cht": "時間,類型,指令,用戶,消息",
|
||||
"hu": "time, type, action, user, message"
|
||||
},
|
||||
|
@ -84671,7 +84671,7 @@
|
|||
"ru": "utc, time, type, action, user, device, message",
|
||||
"sv": "utc, tid, typ, åtgärd, användare, enhet, meddelande",
|
||||
"tr": "utc, saat, tür, işlem, kullanıcı, cihaz, mesaj",
|
||||
"zh-chs": "utc,时间,类型,指令,用户,设备,消息",
|
||||
"zh-chs": "utc,时间,打字,指令,用户,设备,消息",
|
||||
"zh-cht": "utc,時間,類型,指令,用戶,裝置,消息",
|
||||
"hu": "utc, time, type, action, user, device, message",
|
||||
"xloc": [
|
||||
|
@ -86816,4 +86816,4 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4354,7 +4354,7 @@
|
|||
QH('deskButtonMenu', x);
|
||||
}
|
||||
|
||||
var keyStrings = { 8: "BackSpace", 9: "Tab", 13: "Enter", 27: "Escape", 44 : "Print Screen", 45: "Insert", 46: "Del", 36: "Home", 35: "End", 33: "Page Up", 34: "Page Down", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 0: "None" }
|
||||
var keyStrings = { 8 : "BackSpace", 9 : "Tab", 13 : "Enter", 27 : "Escape", 44 : "Print Screen", 45 : "Insert", 46 : "Del", 36 : "Home", 35 : "End", 32 : "Espace", 33 : "Page Up", 34 : "Page Down", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down", 0 : "None" }
|
||||
|
||||
function keyShortcutTotext(n) {
|
||||
var x = [];
|
||||
|
@ -6946,4 +6946,4 @@
|
|||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -1908,7 +1908,7 @@
|
|||
function p13zipFiles() {
|
||||
var inputFiles = [], checkboxes = document.getElementsByName('fd');
|
||||
for (var i = 0; i < checkboxes.length; i++) { if (checkboxes[i].checked) { inputFiles.push(p13filetree.dir[checkboxes[i].value].n); } }
|
||||
setDialogMode(2, "Zip Filename", 3, p13zipFilesEx, '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="" />', { action: 'zip', path: p13filetreelocation.join('/'), files: inputFiles });
|
||||
setDialogMode(2, "Zip Filename", 3, p13zipFilesEx, '<input type=text id=p13renameinput maxlength=64 onkeyup=p13fileNameCheck(event) style=width:100% value="" />', { action: 'zip -r', path: p13filetreelocation.join('/'), files: inputFiles });
|
||||
focusTextBox('p13renameinput');
|
||||
p13fileNameCheck();
|
||||
}
|
||||
|
@ -2289,4 +2289,4 @@
|
|||
start();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
|
Loading…
Reference in New Issue