From 79920b5f2c6777d020902b47571996efd91793f6 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Wed, 15 Sep 2021 20:52:39 +0200 Subject: [PATCH 01/19] Fix languages after https://github.com/louislam/uptime-kuma/commit/80322cbfe7cf88f6d128cff8627e53761b17d4b0 Fix ESLint deprecated warning. Update `README.md` for languages. Update `update-language-files` script --- .eslintrc.js | 1 + extra/update-language-files/index.js | 68 +++++++++++++++------------- package.json | 3 +- src/languages/README.md | 4 +- src/languages/de-DE.js | 8 +--- src/languages/en.js | 5 +- src/languages/it-IT.js | 1 - src/languages/nl-NL.js | 1 - src/languages/tr-TR.js | 2 +- src/languages/zh-CN.js | 1 - src/languages/zh-HK.js | 1 - 11 files changed, 47 insertions(+), 48 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 398d64c84..21fb56088 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,5 @@ module.exports = { + root: true, env: { browser: true, commonjs: true, diff --git a/extra/update-language-files/index.js b/extra/update-language-files/index.js index ee7c0b5ea..519d82e1b 100644 --- a/extra/update-language-files/index.js +++ b/extra/update-language-files/index.js @@ -1,4 +1,4 @@ -// Need to use es6 to read language files +// Need to use ES6 to read language files import fs from "fs"; import path from "path"; @@ -14,6 +14,7 @@ const copyRecursiveSync = function (src, dest) { let exists = fs.existsSync(src); let stats = exists && fs.statSync(src); let isDirectory = exists && stats.isDirectory(); + if (isDirectory) { fs.mkdirSync(dest); fs.readdirSync(src).forEach(function (childItemName) { @@ -24,8 +25,9 @@ const copyRecursiveSync = function (src, dest) { fs.copyFileSync(src, dest); } }; -console.log(process.argv) -const baseLangCode = process.argv[2] || "zh-HK"; + +console.log("Arguments: ", process.argv) +const baseLangCode = process.argv[2] || "en"; console.log("Base Lang: " + baseLangCode); fs.rmdirSync("./languages", { recursive: true }); copyRecursiveSync("../../src/languages", "./languages"); @@ -33,46 +35,50 @@ copyRecursiveSync("../../src/languages", "./languages"); const en = (await import("./languages/en.js")).default; const baseLang = (await import(`./languages/${baseLangCode}.js`)).default; const files = fs.readdirSync("./languages"); -console.log(files); +console.log("Files: ", files); + for (const file of files) { - if (file.endsWith(".js")) { - console.log("Processing " + file); - const lang = await import("./languages/" + file); + if (!file.endsWith(".js")) { + console.log("Skipping " + file) + continue; + } - let obj; + console.log("Processing " + file); + const lang = await import("./languages/" + file); - if (lang.default) { - console.log("is js module"); - obj = lang.default; - } else { - console.log("empty file"); - obj = { - languageName: "" - }; - } - - // En first - for (const key in en) { - if (! obj[key]) { - obj[key] = en[key]; - } + let obj; + + if (lang.default) { + obj = lang.default; + } else { + console.log("Empty file"); + obj = { + languageName: "" + }; + } + + // En first + for (const key in en) { + if (! obj[key]) { + obj[key] = en[key]; } + } + if (baseLang !== en) { // Base second for (const key in baseLang) { if (! obj[key]) { obj[key] = key; } } - - const code = "export default " + util.inspect(obj, { - depth: null, - }); - - fs.writeFileSync(`../../src/languages/${file}`, code); - } + + const code = "export default " + util.inspect(obj, { + depth: null, + }); + + fs.writeFileSync(`../../src/languages/${file}`, code); } fs.rmdirSync("./languages", { recursive: true }); -console.log("Done, fix the format by eslint now"); +console.log("Done. Fixing formatting by ESLint..."); diff --git a/package.json b/package.json index 8d9c88fc1..d768063a0 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "test-install-script-ubuntu": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu.dockerfile .", "test-install-script-ubuntu1604": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu1604.dockerfile .", "simple-dns-server": "node extra/simple-dns-server.js", - "update-language-files": "cd extra/update-language-files && node index.js %npm_config_base_lang% && eslint ../../src/languages/**.js --fix" + "update-language-files_old": "cd extra/update-language-files && node index.js %npm_config_base_lang% && eslint ../../src/languages/**.js --fix", + "update-language-files": "cd extra/update-language-files && node index.js && eslint ../../src/languages/**.js --fix" }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.36", diff --git a/src/languages/README.md b/src/languages/README.md index d27e0e7eb..7a3ed0602 100644 --- a/src/languages/README.md +++ b/src/languages/README.md @@ -1,8 +1,8 @@ # How to translate 1. Fork this repo. -2. Create a language file. (e.g. `zh-TW.js`) The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm -3. `npm run update-language-files --base-lang=de-DE` +2. Create a language file (e.g. `zh-TW.js`). The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm +3. `npm run update-language-files --base-lang=en` 4. Your language file should be filled in. You can translate now. 5. Translate `src/pages/Settings.vue` (search for a `Confirm` component with `rel="confirmDisableAuth"`). 6. Import your language file in `src/i18n.js` and add it to `languageList` constant. diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index 008dbbc5f..d3a46ab75 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -113,9 +113,6 @@ export default { "Create your admin account": "Erstelle dein Admin Konto", "Repeat Password": "Wiederhole das Passwort", "Resource Record Type": "Resource Record Type", - "Export": "Export", - "Import": "Import", - "Import/Export Backup": "Import/Export Backup", Export: "Export", Import: "Import", respTime: "Antw. Zeit (ms)", @@ -133,8 +130,8 @@ export default { "Clear all statistics": "Lösche alle Statistiken", importHandleDescription: "Wähle 'Vorhandene überspringen' aus, wenn jeder Monitor oder Benachrichtigung mit demselben Namen übersprungen werden soll. 'Überschreiben' löscht jeden vorhandenen Monitor sowie Benachrichtigungen.", "Skip existing": "Vorhandene überspringen", - "Overwrite": "Überschreiben", - "Options": "Optionen", + Overwrite: "Überschreiben", + Options: "Optionen", confirmImportMsg: "Möchtest du das Backup wirklich importieren? Bitte stelle sicher, dass die richtige Import Option ausgewählt ist.", "Keep both": "Beide behalten", twoFAVerifyLabel: "Bitte trage deinen Token ein um zu verifizieren das 2FA funktioniert", @@ -151,7 +148,6 @@ export default { Inactive: "Inaktiv", Token: "Token", "Show URI": "URI Anzeigen", - "Clear all statistics": "Lösche alle Statistiken", Tags: "Tags", "Add New below or Select...": "Füge neuen hinzu oder wähle aus...", "Tag with this name already exist.": "Ein Tag mit dem Namen existiert bereits.", diff --git a/src/languages/en.js b/src/languages/en.js index 025f002f0..1971f6f6d 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -139,8 +139,8 @@ export default { alertWrongFileType: "Please select a JSON file.", "Clear all statistics": "Clear all Statistics", "Skip existing": "Skip existing", - "Overwrite": "Overwrite", - "Options": "Options", + Overwrite: "Overwrite", + Options: "Options", "Keep both": "Keep both", "Verify Token": "Verify Token", "Setup 2FA": "Setup 2FA", @@ -152,7 +152,6 @@ export default { Inactive: "Inactive", Token: "Token", "Show URI": "Show URI", - "Clear all statistics": "Clear all Statistics", Tags: "Tags", "Add New below or Select...": "Add New below or Select...", "Tag with this name already exist.": "Tag with this name already exist.", diff --git a/src/languages/it-IT.js b/src/languages/it-IT.js index 6362f0143..bbd2d3ad1 100644 --- a/src/languages/it-IT.js +++ b/src/languages/it-IT.js @@ -115,7 +115,6 @@ export default { "Last Result": "Ultimo risultato", "Create your admin account": "Crea l'account amministratore", "Repeat Password": "Ripeti Password", - "Import/Export Backup": "Importa/Esporta Backup", Export: "Esporta", Import: "Importa", respTime: "Tempo di Risposta (ms)", diff --git a/src/languages/nl-NL.js b/src/languages/nl-NL.js index 00dc41501..546e6dbd4 100644 --- a/src/languages/nl-NL.js +++ b/src/languages/nl-NL.js @@ -115,7 +115,6 @@ export default { "Last Result": "Laatste resultaat", "Create your admin account": "Maak uw beheerdersaccount aan", "Repeat Password": "Herhaal wachtwoord", - "Import/Export Backup": "Backup importeren/exporteren", Export: "Exporteren", Import: "Importeren", respTime: "resp. tijd (ms)", diff --git a/src/languages/tr-TR.js b/src/languages/tr-TR.js index e05af23e3..b62e289fc 100644 --- a/src/languages/tr-TR.js +++ b/src/languages/tr-TR.js @@ -116,5 +116,5 @@ export default { "Clear Data": "Verileri Temizle", Events: "Olaylar", Heartbeats: "Sağlık Durumları", - "Auto Get": "Otomatik Al" + "Auto Get": "Otomatik Al", } diff --git a/src/languages/zh-CN.js b/src/languages/zh-CN.js index f3e55fc8c..c09a824da 100644 --- a/src/languages/zh-CN.js +++ b/src/languages/zh-CN.js @@ -120,7 +120,6 @@ export default { enableDefaultNotificationDescription: "新的监控项将默认启用,你也可以在每个监控项中分别设置", "Default enabled": "默认开启", "Also apply to existing monitors": "应用到所有监控项", - "Import/Export Backup": "导入/导出备份", Export: "导出", Import: "导入", backupDescription: "你可以将所有的监控项和消息通知备份到一个 JSON 文件中", diff --git a/src/languages/zh-HK.js b/src/languages/zh-HK.js index 50959ca87..1a4ae5a6c 100644 --- a/src/languages/zh-HK.js +++ b/src/languages/zh-HK.js @@ -120,7 +120,6 @@ export default { enableDefaultNotificationDescription: "新增監測器時這個通知會預設啟用,當然每個監測器亦可分別控制開關。", "Default enabled": "預設通知", "Also apply to existing monitors": "同時取用至目前所有監測器", - "Import/Export Backup": "匯入/匯出 備份", Export: "匯出", Import: "匯入", backupDescription: "您可以備份所有監測器及所有通知。", From a34b2623c8987d2a7fc7d686867c3b8b3d22cc22 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Wed, 15 Sep 2021 20:57:36 +0200 Subject: [PATCH 02/19] Remove double spaces in `console.log` output with multiple parameters --- extra/update-language-files/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extra/update-language-files/index.js b/extra/update-language-files/index.js index 519d82e1b..a90f9f363 100644 --- a/extra/update-language-files/index.js +++ b/extra/update-language-files/index.js @@ -26,7 +26,7 @@ const copyRecursiveSync = function (src, dest) { } }; -console.log("Arguments: ", process.argv) +console.log("Arguments:", process.argv) const baseLangCode = process.argv[2] || "en"; console.log("Base Lang: " + baseLangCode); fs.rmdirSync("./languages", { recursive: true }); @@ -35,7 +35,7 @@ copyRecursiveSync("../../src/languages", "./languages"); const en = (await import("./languages/en.js")).default; const baseLang = (await import(`./languages/${baseLangCode}.js`)).default; const files = fs.readdirSync("./languages"); -console.log("Files: ", files); +console.log("Files:", files); for (const file of files) { if (!file.endsWith(".js")) { From 8ba8de07ae657a2df72247c2f8c87ae217d8c3d4 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Wed, 15 Sep 2021 20:59:29 +0200 Subject: [PATCH 03/19] Missing this --- src/languages/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/README.md b/src/languages/README.md index 7a3ed0602..f97799176 100644 --- a/src/languages/README.md +++ b/src/languages/README.md @@ -2,7 +2,7 @@ 1. Fork this repo. 2. Create a language file (e.g. `zh-TW.js`). The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm -3. `npm run update-language-files --base-lang=en` +3. `npm run update-language-files` 4. Your language file should be filled in. You can translate now. 5. Translate `src/pages/Settings.vue` (search for a `Confirm` component with `rel="confirmDisableAuth"`). 6. Import your language file in `src/i18n.js` and add it to `languageList` constant. From ab229615382e16501be8bc3e5b172c904d3cad4c Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Wed, 15 Sep 2021 21:16:22 +0200 Subject: [PATCH 04/19] More info about `update-language-files` command --- src/languages/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/README.md b/src/languages/README.md index f97799176..6ba7d95eb 100644 --- a/src/languages/README.md +++ b/src/languages/README.md @@ -2,7 +2,7 @@ 1. Fork this repo. 2. Create a language file (e.g. `zh-TW.js`). The filename must be ISO language code: http://www.lingoes.net/en/translator/langcode.htm -3. `npm run update-language-files` +3. Run `npm run update-language-files`. You can also use this command to check if there are new strings to translate for your language. 4. Your language file should be filled in. You can translate now. 5. Translate `src/pages/Settings.vue` (search for a `Confirm` component with `rel="confirmDisableAuth"`). 6. Import your language file in `src/i18n.js` and add it to `languageList` constant. From 217637aa1f0640d66796c6f81869e2b26306bd58 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Wed, 15 Sep 2021 21:19:16 +0200 Subject: [PATCH 05/19] Add de-DE translation --- src/languages/de-DE.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index d3a46ab75..b5b0bc3bd 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -163,4 +163,8 @@ export default { Purple: "Lila", Pink: "Pink", "Search...": "Suchen...", + "Heartbeat Retry Interval": "Takt-Wiederholungsintervall", + retryCheckEverySecond: "Versuche alle {0} Sekunden", + "Import Backup": "Import Backup", + "Export Backup": "Export Backup", } From 4f4fe39c9b639f08771cff163ced7bb395cd367b Mon Sep 17 00:00:00 2001 From: Siim Ots Date: Thu, 16 Sep 2021 09:42:56 +0300 Subject: [PATCH 06/19] Simple "Add to Homescreen" manifest (PWA) (#411) * simple "add to homescreen" manifest * remove ?source=pwa Co-authored-by: Adam Stachowicz * run TinyPNG Co-authored-by: Adam Stachowicz Co-authored-by: LouisLam --- index.html | 1 + public/icon-192x192.png | Bin 0 -> 2707 bytes public/icon-512x512.png | Bin 0 -> 9739 bytes public/manifest.json | 19 +++++++++++++++++++ 4 files changed, 20 insertions(+) create mode 100644 public/icon-192x192.png create mode 100644 public/icon-512x512.png create mode 100644 public/manifest.json diff --git a/index.html b/index.html index 61d0f42b0..cd5da9360 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,7 @@ + Uptime Kuma diff --git a/public/icon-192x192.png b/public/icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..89d60d72b3d920ab6645d5637ab914d0a468ebda GIT binary patch literal 2707 zcmV;E3T*X>P)c{>1{IKf9yzI_r;FD_Lm2cshWZ#i&;g@pa zn_}OPVBU^(DAK&T6Rjh+LhBhc(0+cTb@H4@ju_LjvLv38`6w0_CtRq2~WD;J$>K|3F}8 zLTbcA0k?b$3gB~rN_Z{22;fYCrSC{#w!lJ!2+S7{*C3<@%oe}}1p%;2p#K>OjRO78 zNU&D`Z7dM_1?VdP>=yuf3IZ$}0$ID3Au{0wmnZ`#<2?O}DeG;tAB=PpVX@Kl;s_W1E&$m%2Zk zI>+hI*O!V7Qy_E#j6>}G6A2*PTDE<+7b-C&ViG0xUEebN2L_#h`#$akL?(dtRo$g> zP<~(-N2X0(0nR`sz<5l5A_3Irb)(UJ4Esaf)C@Q{%<5b_v>5vK}A z@FWoPGUbd;V9@XE@{^~Krc_;vBX|;UUl8vAk0gKqJEeeVETikALm@dMz{yyPz_f30O&kr~8)1K}}ksAb+F2nC1^mnKpB1b?Sfc^FL{nP%LA`dc;+8{WTk@}DRS*ECCz#(D) z&`R^VJ?-yM2Wn|C1K2+kfOEC&F^P1d%Il8*BHD5@K#Rge=Oded{Gn|$J((e zHrt!hq`y!nB7$fQI+e8lbup~IuzdS3Et}2uDm1Zwk);)pe4GYxmX_qTbASKV#{ia} z%-8e#R|sSJ7S%(fr-1qpLHh5$ijV$|!QZmp$;`KZi>BU!NDXRA!asRCqyD4+d||`O;3{^%uH})1jX|0_uqSAL)X_o$^JWX$MTqY0lMu*@h4N|xF3IF_y`CW|e-;p&uLWlSd?jULA{`>P`fK{Gf z#lP!ETJGImgaNv8qCmwbg#XHtZ*`{8|6v4uAUYJ>Ant#~ z3c?3ylZg}Xoc|&}itz!`REP@?Jp@4fDMnwR*niT0u~?O2)Zda39SS=F^d)MKaPg$S zCBLU0f7>Az+9CfXDh$z}0tZ07Og?xlP{-}@sc7j{#@uxZz zH~{qi2IaIr?tkEIbrcBtJ4E9@#Sk_?S5gf^{b_%TNgw@@Usc#4@X!CN^uJ=xf4cuT z!0KZ*KEP}y>aY%ZkI-*s&V;#57>L3RvH%Hk#|}2PA=vo;|G;WpceXM*kOeb+Gd+^Y zB;R|xI&7rmOgo0RKlAzr3-H>i^QXc(`z-JgB?vqgaGmjq)Y=y#D z%}+OtmjUOu~O=3aFxgK(T%lI~uUBV<8yW z&7VJ!9|i&PONzTy3?v67e;AEm0Qo`Y{sHax+mXuoqXCC$$j?9sO2(ai1A+W#pw$#0 z#c60|10fnv<`2^44+a=j6(CJ%xrzaHQ1ZhVaO4LApopsS2Ln&UYQTRM3U7)|uKlyW zDWFRJl-6q)AT(3*hf(nUW#LyF*k-AcKQ*jm+-obLc>&r9f<^qifbdmcxi#Aty zkS>3pbpS*RPgu45e>`kh6lCY|a%tQBO>Ns=F5~%>1rduWvMbgv6g_$wAo@{kJpq*b zeZLJ(ZwSFhfC{|o7huSbidT9`)@AcgU@_3u$wrbPe-tfr5X8p-?1t>2NNOHOevmnT`y@nspYcfraObz>k3(P;1BB26!Y`daiVj>$;Q5@pJ2>Xg?D?Ys zTm|$^;9&quV4r|)a?c;Tj9tPI_Sf|x&Q4Oh_uhmKbI_Zg9$F+2KxLT+CU3@yd6@HZiXCm*`zSf*5fGWPGl25tdfmVHwQbog2cepUq*ybg*UAIpAswxNadvr3p0t?=$m*bkwO(1?Ja+Ng8yH$YydQh_~FzGN!5|~2; z{IAt>_X;Qyl)2n1fc);_|3L+Qw|56A5W_GGMFraF{s$grCAt|pjUA_;cYxyLLzgjE z-zFI?;Q628YylFhc)iU{1$_VOG+01D$qA+k2sJcQfG8sl{Dp){++BbuCVzcL0W{FI z0u)-vV|Nyy&_--8Afc7mRlt|uOsp@kbuWs~z?uS{ej~A_z{vDIg9rJez)4GiBt9u{ z#_*RVQa1}258I2S`@67C8~w*BHRG4wu~Q8&;bj9yL_|bHL_|c~_W_}Nh=BemNuK}! N002ovPDHLkV1j>wKivQT literal 0 HcmV?d00001 diff --git a/public/icon-512x512.png b/public/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3ab7718da26bf86ef5bc6fe4fb2d0dd62bd527 GIT binary patch literal 9739 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 Date: Thu, 16 Sep 2021 09:10:13 +0200 Subject: [PATCH 07/19] updated translations --- src/languages/it-IT.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/languages/it-IT.js b/src/languages/it-IT.js index bbd2d3ad1..ad74b723a 100644 --- a/src/languages/it-IT.js +++ b/src/languages/it-IT.js @@ -1,6 +1,7 @@ export default { languageName: "Italiano (Italian)", checkEverySecond: "controlla ogni {0} secondi", + retryCheckEverySecond: "Riprova ogni {0} secondi.", "Avg.": "Media", retriesDescription: "Tentativi da fare prima che il servizio venga marcato come \"giù\" e che una notifica venga inviata.", ignoreTLSError: "Ignora gli errori TLS/SSL per i siti in HTTPS.", @@ -20,6 +21,8 @@ export default { clearEventsMsg: "Si è certi di voler eliminare tutti gli eventi per questo servizio?", clearHeartbeatsMsg: "Si è certi di voler eliminare tutti gli intervalli di controllo per questo servizio?", confirmClearStatisticsMsg: "Si è certi di voler eliminare TUTTE le statistiche?", + importHandleDescription: "Selezionare 'Ignora gli esistenti' si vuole ignorare l'importazione dei monitoraggi o delle notifiche con lo stesso nome. 'Sovrascrivi' eliminerà ogni monitoraggio e notifica esistente.", + confirmImportMsg: "Si è certi di voler importare il backup? Essere certi di aver selezionato l'opzione corretta di importazione.", twoFAVerifyLabel: "Scrivi il token per verificare che l'autenticazione a due fattori funzioni", tokenValidSettingsMsg: "Il token è valido! È ora possibile salvare le impostazioni.", confirmEnableTwoFAMsg: "Si è certi di voler abilitare l'autenticazione a due fattori?", @@ -68,6 +71,7 @@ export default { Port: "Porta", "Heartbeat Interval": "Intervallo di controllo", Retries: "Tentativi", + "Heartbeat Retry Interval": "Intervallo tra un tentativo di controllo e l'altro", Advanced: "Avanzate", "Upside Down Mode": "Modalità capovolta", "Max. Redirects": "Redirezionamenti massimi", @@ -115,6 +119,8 @@ export default { "Last Result": "Ultimo risultato", "Create your admin account": "Crea l'account amministratore", "Repeat Password": "Ripeti Password", + "Import Backup": "Importa Backup", + "Export Backup": "Esporta Backup", Export: "Esporta", Import: "Importa", respTime: "Tempo di Risposta (ms)", @@ -126,12 +132,16 @@ export default { Events: "Eventi", Heartbeats: "Controlli", "Auto Get": "Auto Get", - "Also apply to existing monitors": "Also apply to existing monitors", backupDescription: "È possibile fare il backup di tutti i monitoraggi e di tutte le notifiche in un file JSON.", backupDescription2: "P.S.: lo storico e i dati relativi agli eventi non saranno inclusi.", backupDescription3: "Dati sensibili come i token di autenticazione saranno inclusi nel backup, tenere quindi in un luogo sicuro.", alertNoFile: "Selezionare il file da importare.", alertWrongFileType: "Selezionare un file JSON.", + "Clear all statistics": "Pulisci tutte le statistiche", + "Skip existing": "Ignora gli esistenti", + Overwrite: "Sovrascrivi", + Options: "Opzioni", + "Keep both": "Mantieni entrambi", "Verify Token": "Verifica Token", "Setup 2FA": "Imposta l'autenticazione a due fattori", "Enable 2FA": "Abilita l'autenticazione a due fattori", @@ -142,7 +152,6 @@ export default { Inactive: "Disattivata", Token: "Token", "Show URI": "Mostra URI", - "Clear all statistics": "Pulisci tutte le statistiche", Tags: "Etichette", "Add New below or Select...": "Aggiungine una oppure scegli...", "Tag with this name already exist.": "Un'etichetta con questo nome già esiste.", From a04878fa8413ded68b92e5eae51448c04696d55c Mon Sep 17 00:00:00 2001 From: kry008 Date: Thu, 16 Sep 2021 16:49:24 +0200 Subject: [PATCH 08/19] Finishing the translation of PL (#422) --- src/languages/pl.js | 56 ++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index e76c2f30c..e6936a1c7 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -110,37 +110,37 @@ export default { respTime: "Czas odp. (ms)", notAvailableShort: "N/A", Create: "Stwórz", - clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearEventsMsg: "Jesteś pewien, że chcesz usunąć wszystkie monity dla tej strony?", clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", - confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", - "Clear Data": "Clear Data", - Events: "Events", + confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", + "Clear Data": "Usuń dane", + Events: "Wydarzenia", Heartbeats: "Heartbeats", "Auto Get": "Auto Get", - enableDefaultNotificationDescription: "For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.", - "Default enabled": "Default enabled", - "Also apply to existing monitors": "Also apply to existing monitors", - Export: "Export", + enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", + "Default enabled": "Domyślnie włączone", + "Also apply to existing monitors": "Również zastosuj do obecnych monitów", + Export: "Eksport", Import: "Import", - backupDescription: "You can backup all monitors and all notifications into a JSON file.", - backupDescription2: "PS: History and event data is not included.", - backupDescription3: "Sensitive data such as notification tokens is included in the export file, please keep it carefully.", - alertNoFile: "Please select a file to import.", - alertWrongFileType: "Please select a JSON file.", - twoFAVerifyLabel: "Please type in your token to verify that 2FA is working", - tokenValidSettingsMsg: "Token is valid! You can now save the 2FA settings.", - confirmEnableTwoFAMsg: "Are you sure you want to enable 2FA?", - confirmDisableTwoFAMsg: "Are you sure you want to disable 2FA?", - "Apply on all existing monitors": "Apply on all existing monitors", - "Verify Token": "Verify Token", - "Setup 2FA": "Setup 2FA", - "Enable 2FA": "Enable 2FA", - "Disable 2FA": "Disable 2FA", - "2FA Settings": "2FA Settings", - "Two Factor Authentication": "Two Factor Authentication", - Active: "Active", - Inactive: "Inactive", + backupDescription: "Możesz wykonać kopię zapasową wszystkich monitorów i wszystkich powiadomień w pliku JSON.", + backupDescription2: "PS: Historia i dane zdarzeń nie są uwzględniane.", + backupDescription3: "Poufne dane, takie jak tokeny powiadomień, są zawarte w pliku eksportu, prosimy o ostrożne przechowywanie.", + alertNoFile: "Proszę wybrać plik do importu.", + alertWrongFileType: "Proszę wybrać plik JSON.", + twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić go", + tokenValidSettingsMsg: "Token jest poprawny! Możesz teraz zapisać ustawienia 2FA.", + confirmEnableTwoFAMsg: "Jesteś prwien że chcesz włączyć 2FA?", + confirmDisableTwoFAMsg: "Jesteś prwien że chcesz wyłączyć 2FA?", + "Apply on all existing monitors": "Zastosuj do wszystki obecnych monitów", + "Verify Token": "Weryfikuj Token", + "Setup 2FA": "Ustaw 2FA", + "Enable 2FA": "Włącz 2FA", + "Disable 2FA": "Wyłącz 2FA", + "2FA Settings": "Ustawienia 2FA", + "Two Factor Authentication": "Podwójna weryfikacja", + Active: "Włączone", + Inactive: "Wyłączone", Token: "Token", - "Show URI": "Show URI", - "Clear all statistics": "Clear all Statistics", + "Show URI": "Pokaż URI", + "Clear all statistics": "Wyczyść wszystkie statystyki", } From 112d72da4777b7b959e5c99eb65a548f5c6f55b3 Mon Sep 17 00:00:00 2001 From: Louis Lam Date: Fri, 17 Sep 2021 00:48:04 +0800 Subject: [PATCH 09/19] update discussion --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bbb9b0024..ffcac83b1 100644 --- a/README.md +++ b/README.md @@ -107,11 +107,13 @@ If you love this project, please consider giving me a ⭐. ## 🗣️ Discussion -You can also discuss or ask for help in [Issues](https://github.com/louislam/uptime-kuma/issues). +### Issues Page +You can discuss or ask for help in [Issues](https://github.com/louislam/uptime-kuma/issues). -Alternatively, you can discuss in my original post on reddit: https://www.reddit.com/r/selfhosted/comments/oi7dc7/uptime_kuma_a_fancy_selfhosted_monitoring_tool_an/ - -I think the real "Discussion" tab is hard to use, as it is reddit-like flow, I always missed new comments. +### Subreddit +My Reddit account: louislamlam +You can mention me if you ask question on Reddit. +https://www.reddit.com/r/UptimeKuma/ ## Contribute From 8e49d84050cb021a27c3b871ff105c0ce471c728 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Thu, 16 Sep 2021 20:13:57 +0200 Subject: [PATCH 10/19] Fix polish translation and translate new keys --- src/components/TagsManager.vue | 2 +- src/languages/pl.js | 49 +++++++++++++++++++++++++--------- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/components/TagsManager.vue b/src/components/TagsManager.vue index 82025031c..7fc78a340 100644 --- a/src/components/TagsManager.vue +++ b/src/components/TagsManager.vue @@ -55,7 +55,7 @@
diff --git a/src/languages/pl.js b/src/languages/pl.js index e6936a1c7..f382a57aa 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -110,7 +110,7 @@ export default { respTime: "Czas odp. (ms)", notAvailableShort: "N/A", Create: "Stwórz", - clearEventsMsg: "Jesteś pewien, że chcesz usunąć wszystkie monity dla tej strony?", + clearEventsMsg: "Jesteś pewien, że chcesz usunąć wszystkie monitory dla tej strony?", clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", "Clear Data": "Usuń dane", @@ -119,28 +119,53 @@ export default { "Auto Get": "Auto Get", enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", "Default enabled": "Domyślnie włączone", - "Also apply to existing monitors": "Również zastosuj do obecnych monitów", - Export: "Eksport", - Import: "Import", - backupDescription: "Możesz wykonać kopię zapasową wszystkich monitorów i wszystkich powiadomień w pliku JSON.", + "Also apply to existing monitors": "Również zastosuj do obecnych monitorów", + Export: "Eksportuj", + Import: "Importuj", + backupDescription: "Możesz wykonać kopię zapasową wszystkich monitorów i wszystkich powiadomień do pliku JSON.", backupDescription2: "PS: Historia i dane zdarzeń nie są uwzględniane.", backupDescription3: "Poufne dane, takie jak tokeny powiadomień, są zawarte w pliku eksportu, prosimy o ostrożne przechowywanie.", alertNoFile: "Proszę wybrać plik do importu.", alertWrongFileType: "Proszę wybrać plik JSON.", - twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić go", + twoFAVerifyLabel: "Proszę podaj swój token 2FA, aby sprawdzić czy 2FA działa", tokenValidSettingsMsg: "Token jest poprawny! Możesz teraz zapisać ustawienia 2FA.", - confirmEnableTwoFAMsg: "Jesteś prwien że chcesz włączyć 2FA?", - confirmDisableTwoFAMsg: "Jesteś prwien że chcesz wyłączyć 2FA?", - "Apply on all existing monitors": "Zastosuj do wszystki obecnych monitów", - "Verify Token": "Weryfikuj Token", - "Setup 2FA": "Ustaw 2FA", + confirmEnableTwoFAMsg: "Jesteś pewien że chcesz włączyć 2FA?", + confirmDisableTwoFAMsg: "Jesteś pewien że chcesz wyłączyć 2FA?", + "Apply on all existing monitors": "Zastosuj do wszystki obecnych monitorów", + "Verify Token": "Weryfikuj token", + "Setup 2FA": "Konfiguracja 2FA", "Enable 2FA": "Włącz 2FA", "Disable 2FA": "Wyłącz 2FA", "2FA Settings": "Ustawienia 2FA", - "Two Factor Authentication": "Podwójna weryfikacja", + "Two Factor Authentication": "Uwierzytelnienie dwuskładnikowe", Active: "Włączone", Inactive: "Wyłączone", Token: "Token", "Show URI": "Pokaż URI", "Clear all statistics": "Wyczyść wszystkie statystyki", + retryCheckEverySecond: "Ponawiaj co {0} sekund.", + importHandleDescription: "Wybierz 'Pomiń istniejące', jeśli chcesz pominąć każdy monitor lub powiadomienie o tej samej nazwie. 'Nadpisz' spowoduje usunięcie każdego istniejącego monitora i powiadomienia.", + confirmImportMsg: "Czy na pewno chcesz zaimportować kopię zapasową? Upewnij się, że wybrałeś właściwą opcję importu.", + "Heartbeat Retry Interval": "Częstotliwość ponawiania bicia serca", + "Import Backup": "Importuj kopię zapasową", + "Export Backup": "Eksportuj kopię zapasową", + "Skip existing": "Pomiń istniejące", + Overwrite: "Nadpisz", + Options: "Opcje", + "Keep both": "Zachowaj oba", + Tags: "Tagi", + "Add New below or Select...": "Dodaj nowy poniżej lub wybierz...", + "Tag with this name already exist.": "Tag o tej nazwie już istnieje.", + "Tag with this value already exist.": "Tag o tej wartości już istnieje.", + color: "kolor", + "value (optional)": "wartość (opcjonalnie)", + Gray: "Szary", + Red: "Czerwony", + Orange: "Pomarańczowy", + Green: "Zielony", + Blue: "Niebieski", + Indigo: "Indygo", + Purple: "Fioletowy", + Pink: "Różowy", + "Search...": "Szukaj...", } From 250c2bdd6dff924db76d9bc09ecfab6f41467cf7 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Thu, 16 Sep 2021 20:17:25 +0200 Subject: [PATCH 11/19] Missing this --- src/languages/pl.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index f382a57aa..a07a70637 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -111,12 +111,12 @@ export default { notAvailableShort: "N/A", Create: "Stwórz", clearEventsMsg: "Jesteś pewien, że chcesz usunąć wszystkie monitory dla tej strony?", - clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + clearHeartbeatsMsg: "Jesteś pewien, że chcesz usunąć wszystkie bicia serca dla tego monitora?", confirmClearStatisticsMsg: "Jesteś pewien, że chcesz usunąć WSZYSTKIE statystyki?", "Clear Data": "Usuń dane", Events: "Wydarzenia", - Heartbeats: "Heartbeats", - "Auto Get": "Auto Get", + Heartbeats: "Bicia serca", + "Auto Get": "Pobierz automatycznie", enableDefaultNotificationDescription: "Dla każdego nowego monitora to powiadomienie będzie domyślnie włączone. Nadal możesz wyłączyć powiadomienia osobno dla każdego monitora.", "Default enabled": "Domyślnie włączone", "Also apply to existing monitors": "Również zastosuj do obecnych monitorów", From 6ec219908b829e609a7690bcf1cadf9325153438 Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 17 Sep 2021 15:19:19 +0800 Subject: [PATCH 12/19] test nodejs 16 --- package.json | 1 + test/ubuntu-nodejs16.dockerfile | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 test/ubuntu-nodejs16.dockerfile diff --git a/package.json b/package.json index d768063a0..0f7a71575 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "test-install-script-alpine3": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/alpine3.dockerfile .", "test-install-script-ubuntu": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu.dockerfile .", "test-install-script-ubuntu1604": "npm run compile-install-script && docker build --progress plain -f test/test_install_script/ubuntu1604.dockerfile .", + "test-nodejs16": "docker build --progress plain -f test/ubuntu-nodejs16.dockerfile .", "simple-dns-server": "node extra/simple-dns-server.js", "update-language-files_old": "cd extra/update-language-files && node index.js %npm_config_base_lang% && eslint ../../src/languages/**.js --fix", "update-language-files": "cd extra/update-language-files && node index.js && eslint ../../src/languages/**.js --fix" diff --git a/test/ubuntu-nodejs16.dockerfile b/test/ubuntu-nodejs16.dockerfile new file mode 100644 index 000000000..a2dd2ec86 --- /dev/null +++ b/test/ubuntu-nodejs16.dockerfile @@ -0,0 +1,10 @@ +FROM ubuntu +WORKDIR /app +RUN apt update && apt --yes install git curl +RUN curl -sL https://deb.nodesource.com/setup_16.x | bash - +RUN apt --yes install nodejs +RUN git clone https://github.com/louislam/uptime-kuma.git . +RUN npm run setup + +# Option 1. Try it +RUN node server/server.js From 3a0bc80016380a5b56617e15b496d0839b9c42bb Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Fri, 17 Sep 2021 16:02:20 +0200 Subject: [PATCH 13/19] Added regex to hostname input --- src/pages/EditMonitor.vue | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/EditMonitor.vue b/src/pages/EditMonitor.vue index 2b80880c0..6d8e58200 100644 --- a/src/pages/EditMonitor.vue +++ b/src/pages/EditMonitor.vue @@ -50,7 +50,7 @@
- +
@@ -235,6 +235,9 @@ export default { // Source: https://digitalfortress.tech/tips/top-15-commonly-used-regex/ // eslint-disable-next-line ipRegexPattern: "((^\s*((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))\s*$)|(^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$))", + // Source: https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address + // eslint-disable-next-line + hostnameRegexPattern: "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$" } }, From c3122a98076bd53957acb90adede332746743722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Sigueros=20Fern=C3=A1ndez?= Date: Fri, 17 Sep 2021 16:20:45 +0200 Subject: [PATCH 14/19] Update es-ES.js (#430) Simple but annoying language fix. --- src/languages/es-ES.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/es-ES.js b/src/languages/es-ES.js index cf6951a44..c34dbaf1c 100644 --- a/src/languages/es-ES.js +++ b/src/languages/es-ES.js @@ -32,7 +32,7 @@ export default { Up: "Funcional", Down: "Caído", Pending: "Pendiente", - Unknown: "Desconociso", + Unknown: "Desconocido", Pause: "Pausa", Name: "Nombre", Status: "Estado", From 9eaa4ab846b5eda676a92c1d9862db93ff81f1ba Mon Sep 17 00:00:00 2001 From: Michal Ciania Date: Fri, 17 Sep 2021 22:57:27 +0200 Subject: [PATCH 15/19] Docker entrypoint for running the application as non-root user --- dockerfile | 26 ++++++++++++++------------ dockerfile-alpine | 22 +++++++++++++--------- extra/entrypoint.sh | 13 +++++++++++++ 3 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 extra/entrypoint.sh diff --git a/dockerfile b/dockerfile index a10006369..891b03d5b 100644 --- a/dockerfile +++ b/dockerfile @@ -5,25 +5,26 @@ WORKDIR /app # split the sqlite install here, so that it can caches the arm prebuilt # do not modify it, since we don't want to re-compile the arm prebuilt again RUN apt update && \ - apt --yes install python3 python3-pip python3-dev git g++ make && \ - ln -s /usr/bin/python3 /usr/bin/python && \ - npm install mapbox/node-sqlite3#593c9d --build-from-source + apt --yes install python3 python3-pip python3-dev git g++ make && \ + ln -s /usr/bin/python3 /usr/bin/python && \ + npm install mapbox/node-sqlite3#593c9d --build-from-source COPY . . -RUN npm install --legacy-peer-deps && npm run build && npm prune --production +RUN npm install --legacy-peer-deps && \ + npm run build && \ + npm prune --production && \ + chmod +x /app/extra/entrypoint.sh + FROM node:14-bullseye-slim AS release WORKDIR /app -# Install Apprise, -# add sqlite3 cli for debugging in the future -# iputils-ping for ping +# Install Apprise, add sqlite3 cli for debugging in the future, iputils-ping for ping, util-linux for setpriv RUN apt update && \ - apt --yes install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib \ - sqlite3 \ - iputils-ping && \ - pip3 --no-cache-dir install apprise && \ - rm -rf /var/lib/apt/lists/* + apt --yes install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib \ + sqlite3 iputils-ping util-linux && \ + pip3 --no-cache-dir install apprise && \ + rm -rf /var/lib/apt/lists/* # Copy app files from build layer COPY --from=build /app /app @@ -31,6 +32,7 @@ COPY --from=build /app /app EXPOSE 3001 VOLUME ["/app/data"] HEALTHCHECK --interval=60s --timeout=30s --start-period=180s --retries=5 CMD node extra/healthcheck.js +ENTRYPOINT ["extra/entrypoint.sh"] CMD ["node", "server/server.js"] FROM release AS nightly diff --git a/dockerfile-alpine b/dockerfile-alpine index a9e85c37d..5e34d84a8 100644 --- a/dockerfile-alpine +++ b/dockerfile-alpine @@ -4,22 +4,25 @@ WORKDIR /app # split the sqlite install here, so that it can caches the arm prebuilt RUN apk add --no-cache --virtual .build-deps make g++ python3 python3-dev git && \ - ln -s /usr/bin/python3 /usr/bin/python && \ - npm install mapbox/node-sqlite3#593c9d && \ - apk del .build-deps && \ - rm -f /usr/bin/python + ln -s /usr/bin/python3 /usr/bin/python && \ + npm install mapbox/node-sqlite3#593c9d && \ + apk del .build-deps && \ + rm -f /usr/bin/python COPY . . -RUN npm install --legacy-peer-deps && npm run build && npm prune --production +RUN npm install --legacy-peer-deps && \ + npm run build && \ + npm prune --production && \ + chmod +x /app/extra/entrypoint.sh FROM node:14-alpine3.12 AS release WORKDIR /app -# Install apprise -RUN apk add --no-cache python3 py3-cryptography py3-pip py3-six py3-yaml py3-click py3-markdown py3-requests py3-requests-oauthlib && \ - pip3 --no-cache-dir install apprise && \ - rm -rf /root/.cache +# Install apprise, iputils for non-root ping, setpriv +RUN apk add --no-cache iputils setpriv python3 py3-cryptography py3-pip py3-six py3-yaml py3-click py3-markdown py3-requests py3-requests-oauthlib && \ + pip3 --no-cache-dir install apprise && \ + rm -rf /root/.cache # Copy app files from build layer COPY --from=build /app /app @@ -27,6 +30,7 @@ COPY --from=build /app /app EXPOSE 3001 VOLUME ["/app/data"] HEALTHCHECK --interval=60s --timeout=30s --start-period=180s --retries=5 CMD node extra/healthcheck.js +ENTRYPOINT ["extra/entrypoint.sh"] CMD ["node", "server/server.js"] FROM release AS nightly diff --git a/extra/entrypoint.sh b/extra/entrypoint.sh new file mode 100644 index 000000000..159b0c810 --- /dev/null +++ b/extra/entrypoint.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env sh + +set -e + +files_ownership () { + chown -hRc "${PUID=1000}":"${PGID=1000}" /app/data +} + +echo "==> Performing startup jobs and maintenance tasks" +files_ownership + +echo "==> Starting application with user ${PUID=1000} group ${PGID=1000}" +exec setpriv --reuid "${PUID=1000}" --regid "${PGID=1000}" --clear-groups "$@" From 7f78cc8d0febeb01308a42e05aea6bfab8d67633 Mon Sep 17 00:00:00 2001 From: Michal Ciania Date: Sat, 18 Sep 2021 11:33:25 +0200 Subject: [PATCH 16/19] Substitute default values only once --- extra/entrypoint.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/extra/entrypoint.sh b/extra/entrypoint.sh index 159b0c810..6dac6333c 100644 --- a/extra/entrypoint.sh +++ b/extra/entrypoint.sh @@ -1,13 +1,15 @@ #!/usr/bin/env sh set -e +PUID=${PUID=1000} +PGID=${PGID=1000} files_ownership () { - chown -hRc "${PUID=1000}":"${PGID=1000}" /app/data + chown -hRc "$PUID":"$PGID" /app/data } echo "==> Performing startup jobs and maintenance tasks" files_ownership -echo "==> Starting application with user ${PUID=1000} group ${PGID=1000}" -exec setpriv --reuid "${PUID=1000}" --regid "${PGID=1000}" --clear-groups "$@" +echo "==> Starting application with user $PUID group $PGID" +exec setpriv --reuid "$PUID" --regid "$PGID" --clear-groups "$@" From 9ef45a9c7eded34f23eed1ed8ce0dc2e3866f6bc Mon Sep 17 00:00:00 2001 From: DX37 Date: Sat, 18 Sep 2021 00:53:06 +0700 Subject: [PATCH 17/19] fresh translations to ru-RU.js and Settings.vue --- src/languages/ru-RU.js | 97 ++++++++++++++++++++++++++---------------- src/pages/Settings.vue | 6 +++ 2 files changed, 67 insertions(+), 36 deletions(-) diff --git a/src/languages/ru-RU.js b/src/languages/ru-RU.js index b25b5b122..fe12982ec 100644 --- a/src/languages/ru-RU.js +++ b/src/languages/ru-RU.js @@ -107,40 +107,65 @@ export default { "Last Result": "Последний результат", "Create your admin account": "Создайте аккаунт администратора", "Repeat Password": "Повторите пароль", - respTime: "Resp. Time (ms)", - notAvailableShort: "N/A", - Create: "Create", - clearEventsMsg: "Are you sure want to delete all events for this monitor?", - clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", - confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", - "Clear Data": "Clear Data", - Events: "Events", - Heartbeats: "Heartbeats", - "Auto Get": "Auto Get", - enableDefaultNotificationDescription: "For every new monitor this notification will be enabled by default. You can still disable the notification separately for each monitor.", - "Default enabled": "Default enabled", - "Also apply to existing monitors": "Also apply to existing monitors", - Export: "Export", - Import: "Import", - backupDescription: "You can backup all monitors and all notifications into a JSON file.", - backupDescription2: "PS: History and event data is not included.", - backupDescription3: "Sensitive data such as notification tokens is included in the export file, please keep it carefully.", - alertNoFile: "Please select a file to import.", - alertWrongFileType: "Please select a JSON file.", - twoFAVerifyLabel: "Please type in your token to verify that 2FA is working", - tokenValidSettingsMsg: "Token is valid! You can now save the 2FA settings.", - confirmEnableTwoFAMsg: "Are you sure you want to enable 2FA?", - confirmDisableTwoFAMsg: "Are you sure you want to disable 2FA?", - "Apply on all existing monitors": "Apply on all existing monitors", - "Verify Token": "Verify Token", - "Setup 2FA": "Setup 2FA", - "Enable 2FA": "Enable 2FA", - "Disable 2FA": "Disable 2FA", - "2FA Settings": "2FA Settings", - "Two Factor Authentication": "Two Factor Authentication", - Active: "Active", - Inactive: "Inactive", - Token: "Token", - "Show URI": "Show URI", - "Clear all statistics": "Clear all Statistics", + respTime: "Время ответа (мс)", + notAvailableShort: "Н/Д", + Create: "Создать", + clearEventsMsg: "Вы действительно хотите удалить всю статистику событий данного монитора?", + clearHeartbeatsMsg: "Вы действительно хотите удалить всю статистику опросов данного монитора?", + confirmClearStatisticsMsg: "Вы действительно хотите удалить ВСЮ статистику?", + "Clear Data": "Очистить статистику", + Events: "События", + Heartbeats: "Опросы", + "Auto Get": "Авто-получение", + enableDefaultNotificationDescription: "Для каждого нового монитора это уведомление будет включено по умолчанию. Вы всё ещё можете отключить уведомления в каждом мониторе отдельно.", + "Default enabled": "Использовать по умолчанию", + "Also apply to existing monitors": "Применить к существующим мониторам", + Export: "Экспорт", + Import: "Импорт", + backupDescription: "Вы можете сохранить резервную копию всех мониторов и уведомлений в виде JSON-файла", + backupDescription2: "P.S.: История и события сохранены не будут.", + backupDescription3: "Важные данные, такие как токены уведомлений, добавляются при экспорте, поэтому храните файлы в безопасном месте.", + alertNoFile: "Выберите файл для импорта.", + alertWrongFileType: "Выберите JSON-файл.", + twoFAVerifyLabel: "Пожалуйста, введите свой токен, чтобы проверить работу 2FA", + tokenValidSettingsMsg: "Токен действителен! Теперь вы можете сохранить настройки 2FA.", + confirmEnableTwoFAMsg: "Вы действительно хотите включить 2FA?", + confirmDisableTwoFAMsg: "Вы действительно хотите выключить 2FA?", + "Apply on all existing monitors": "Применить ко всем существующим мониторам", + "Verify Token": "Проверить токен", + "Setup 2FA": "Настройка 2FA", + "Enable 2FA": "Включить 2FA", + "Disable 2FA": "Выключить 2FA", + "2FA Settings": "Настройки 2FA", + "Two Factor Authentication": "Двухфакторная аутентификация", + Active: "Активно", + Inactive: "Неактивно", + Token: "Токен", + "Show URI": "Показать URI", + "Clear all statistics": "Очистить всю статистику", + retryCheckEverySecond: "Повторять каждые {0} секунд.", + importHandleDescription: "Выберите 'Пропустить существующие' если вы хотите пропустить каждый монитор или уведомление с таким же именем. 'Перезаписать' удалит каждый существующий монитор или уведомление.", + confirmImportMsg: "Вы действительно хотите восстановить резервную копию? Убедитесь, что вы выбрали подходящий вариант импорта.", + "Heartbeat Retry Interval": "Интервал повтора опроса", + "Import Backup": "Импорт резервной копии", + "Export Backup": "Экспорт резервной копии", + "Skip existing": "Пропустить существующие", + Overwrite: "Перезаписать", + Options: "Опции", + "Keep both": "Оставить оба", + Tags: "Теги", + "Add New below or Select...": "Добавить новое ниже или выбрать...", + "Tag with this name already exist.": "Такой тег уже существует.", + "Tag with this value already exist.": "Тег с таким значением уже существует.", + color: "цвет", + "value (optional)": "значение (опционально)", + Gray: "Серый", + Red: "Красный", + Orange: "Оранжевый", + Green: "Зелёный", + Blue: "Синий", + Indigo: "Индиго", + Purple: "Пурпурный", + Pink: "Розовый", + "Search...": "Поиск...", } diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue index 0d8862292..6ba047cdd 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -289,6 +289,12 @@

Utilizzare con attenzione.

+ +