Merge remote-tracking branch 'origin/master' into squadcast-notification-support
# Conflicts: # src/languages/en.js
This commit is contained in:
commit
3e85893bdd
|
@ -27,7 +27,7 @@ The frontend code build into "dist" directory. The server (express.js) exposes t
|
|||
|
||||
## Can I create a pull request for Uptime Kuma?
|
||||
|
||||
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create empty draft pull request or open an issue, so we can discuss first**. Especially for a large pull request or you don't know it will be merged or not.
|
||||
Yes or no, it depends on what you will try to do. Since I don't want to waste your time, be sure to **create an empty draft pull request or open an issue, so we can discuss first**. Especially for a large pull request or you don't know it will be merged or not.
|
||||
|
||||
Here are some references:
|
||||
|
||||
|
@ -48,7 +48,7 @@ Here are some references:
|
|||
- UI/UX is not close to Uptime Kuma
|
||||
- Existing logic is completely modified or deleted for no reason
|
||||
- A function that is completely out of scope
|
||||
- Unnesscary large code changes (Hard to review, casuse code conflicts to other pull requests)
|
||||
- Unnecessary large code changes (Hard to review, causes code conflicts to other pull requests)
|
||||
|
||||
I will mark your pull request in the [milestones](https://github.com/louislam/uptime-kuma/milestones), if I am plan to review and merge it.
|
||||
|
||||
|
@ -183,7 +183,7 @@ By default, the Chromium window will be shown up during the test. Specifying `HE
|
|||
|
||||
## Dependencies
|
||||
|
||||
Both frontend and backend share the same package.json. However, the frontend dependencies are eventually not be used in production environment, because it is usually also baked into dist files. So:
|
||||
Both frontend and backend share the same package.json. However, the frontend dependencies are eventually not used in the production environment, because it is usually also baked into dist files. So:
|
||||
|
||||
- Frontend dependencies = "devDependencies"
|
||||
- Examples: vue, chart.js
|
||||
|
|
|
@ -8,12 +8,19 @@ class Ntfy extends NotificationProvider {
|
|||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
|
||||
let okMsg = "Sent Successfully.";
|
||||
try {
|
||||
await axios.post(`${notification.ntfyserverurl}`, {
|
||||
let headers = {};
|
||||
if (notification.ntfyusername.length > 0) {
|
||||
headers = {
|
||||
"Authorization": "Basic " + Buffer.from(notification.ntfyusername + ":" + notification.ntfypassword).toString("base64"),
|
||||
};
|
||||
}
|
||||
let data = {
|
||||
"topic": notification.ntfytopic,
|
||||
"message": msg,
|
||||
"priority": notification.ntfyPriority || 4,
|
||||
"title": "Uptime-Kuma",
|
||||
});
|
||||
};
|
||||
await axios.post(`${notification.ntfyserverurl}`, data, { headers: headers });
|
||||
|
||||
return okMsg;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ class Octopush extends NotificationProvider {
|
|||
|
||||
try {
|
||||
// Default - V2
|
||||
if (notification.octopushVersion === 2 || !notification.octopushVersion) {
|
||||
if (notification.octopushVersion === "2" || !notification.octopushVersion) {
|
||||
let config = {
|
||||
headers: {
|
||||
"api-key": notification.octopushAPIKey,
|
||||
|
@ -31,7 +31,7 @@ class Octopush extends NotificationProvider {
|
|||
"sender": notification.octopushSenderName
|
||||
};
|
||||
await axios.post("https://api.octopush.com/v1/public/sms-campaign/send", data, config);
|
||||
} else if (notification.octopushVersion === 1) {
|
||||
} else if (notification.octopushVersion === "1") {
|
||||
let data = {
|
||||
"user_login": notification.octopushDMLogin,
|
||||
"api_key": notification.octopushDMAPIKey,
|
||||
|
@ -49,7 +49,15 @@ class Octopush extends NotificationProvider {
|
|||
},
|
||||
params: data
|
||||
};
|
||||
await axios.post("https://www.octopush-dm.com/api/sms/json", {}, config);
|
||||
|
||||
// V1 API returns 200 even on error so we must check
|
||||
// response data
|
||||
let response = await axios.post("https://www.octopush-dm.com/api/sms/json", {}, config);
|
||||
if ("error_code" in response.data) {
|
||||
if (response.data.error_code !== "000") {
|
||||
this.throwGeneralAxiosError(`Octopush error ${JSON.stringify(response.data)}`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw new Error("Unknown Octopush version!");
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ class Teams extends NotificationProvider {
|
|||
});
|
||||
}
|
||||
|
||||
if (monitorUrl) {
|
||||
if (monitorUrl && monitorUrl !== "https://") {
|
||||
facts.push({
|
||||
name: "URL",
|
||||
value: monitorUrl,
|
||||
|
@ -127,13 +127,17 @@ class Teams extends NotificationProvider {
|
|||
|
||||
let url;
|
||||
|
||||
if (monitorJSON["type"] === "port") {
|
||||
url = monitorJSON["hostname"];
|
||||
if (monitorJSON["port"]) {
|
||||
url += ":" + monitorJSON["port"];
|
||||
}
|
||||
} else {
|
||||
url = monitorJSON["url"];
|
||||
switch (monitorJSON["type"]) {
|
||||
case "http":
|
||||
case "keywork":
|
||||
url = monitorJSON["url"];
|
||||
break;
|
||||
case "docker":
|
||||
url = monitorJSON["docker_host"];
|
||||
break;
|
||||
default:
|
||||
url = monitorJSON["hostname"];
|
||||
break;
|
||||
}
|
||||
|
||||
const payload = this._notificationPayloadFactory({
|
||||
|
|
|
@ -11,15 +11,31 @@
|
|||
<input id="ntfy-server-url" v-model="$parent.notification.ntfyserverurl" type="text" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="ntfy-priority" class="form-label">{{ $t("Priority") }}</label>
|
||||
<input id="ntfy-priority" v-model="$parent.notification.ntfyPriority" type="number" class="form-control" required min="1" max="5" step="1">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="ntfy-username" class="form-label">{{ $t("Username") }} ({{ $t("Optional") }})</label>
|
||||
<div class="input-group mb-3">
|
||||
<input id="ntfy-username" v-model="$parent.notification.ntfyusername" type="text" class="form-control" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="ntfy-password" class="form-label">{{ $t("Password") }} ({{ $t("Optional") }})</label>
|
||||
<div class="input-group mb-3">
|
||||
<HiddenInput id="ntfy-password" v-model="$parent.notification.ntfypassword" autocomplete="new-password"></HiddenInput>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import HiddenInput from "../HiddenInput.vue";
|
||||
|
||||
export default {
|
||||
components: {
|
||||
HiddenInput,
|
||||
},
|
||||
mounted() {
|
||||
if (typeof this.$parent.notification.ntfyPriority === "undefined") {
|
||||
this.$parent.notification.ntfyserverurl = "https://ntfy.sh";
|
||||
|
|
|
@ -562,4 +562,24 @@ export default {
|
|||
"Docker Host": "Docker хост",
|
||||
"Docker Hosts": "Docker хостове",
|
||||
trustProxyDescription: "Trust 'X-Forwarded-*' headers. Ако искате да получавате правилния IP адрес на клиента, а Uptime Kuma е зад системи като Nginx или Apache, трябва да разрешите тази опция.",
|
||||
Examples: "Примери",
|
||||
"Home Assistant URL": "Home Assistant URL адрес",
|
||||
"Long-Lived Access Token": "Long-Lived Access Token",
|
||||
"Long-Lived Access Token can be created by clicking on your profile name (bottom left) and scrolling to the bottom then click Create Token. ": "Long-Lived Access Token можете да създадете, като кликнете върху името на профила си (долу ляво) и превъртите до най-долу, след това кликнете върху Създаване на токен. ",
|
||||
"Notification Service": "Услуга за известяване",
|
||||
"default: notify all devices": "по подразбиране: извести всички устройства",
|
||||
"A list of Notification Services can be found in Home Assistant under \"Developer Tools > Services\" search for \"notification\" to find your device/phone name.": "Списък с услугите за известяване може да бъде намерен в Home Assistant под \"Developer Tools > Services\", там потърсете \"notification\", за да намерите името на вашето устройство/телефон.",
|
||||
"Automations can optionally be triggered in Home Assistant:": "Автоматизациите могат да се задействат при нужда в Home Assistant:",
|
||||
"Trigger type:": "Задействане тип:",
|
||||
"Event type:": "Събитие тип:",
|
||||
"Event data:": "Събитие данни:",
|
||||
"Then choose an action, for example switch the scene to where an RGB light is red.": "След което изберете действие, например да превключите сцената, където RGB светлината е червена.",
|
||||
"Frontend Version": "Фронтенд версия",
|
||||
"Frontend Version do not match backend version!": "Фронтенд версията не съвпада с Бекенд версията!",
|
||||
"Base URL": "Базов URL адрес",
|
||||
goAlertInfo: "GoAlert е приложение с отворен код за планиране на повиквания, автоматизирани ескалации и известия (като SMS или гласови повиквания). Автоматично ангажирайте точния човек, по точния начин и в точното време! {0}",
|
||||
goAlertIntegrationKeyInfo: "Вземете общ API интеграционен ключ за услугата във формат \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\" обикновено стойността на параметъра token на копирания URL адрес.",
|
||||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Отпаднало: Тъй като са добавени много функции, тази опция за архивиране не е достатъчно поддържана и не може да генерира или възстанови пълен архив.",
|
||||
backupRecommend: "Моля, архивирайте дяла или папката (./data/) директно вместо това.",
|
||||
};
|
||||
|
|
|
@ -68,7 +68,7 @@ export default {
|
|||
Timezone: "Zeitzone",
|
||||
"Search Engine Visibility": "Sichtbarkeit für Suchmaschinen",
|
||||
"Allow indexing": "Indizierung zulassen",
|
||||
"Discourage search engines from indexing site": "Halte Suchmaschinen von der Indexierung der Seite ab",
|
||||
"Discourage search engines from indexing site": "Suchmaschinen darum bitten, die Seite nicht zu indizieren",
|
||||
"Change Password": "Passwort ändern",
|
||||
"Current Password": "Aktuelles Passwort",
|
||||
"New Password": "Neues Passwort",
|
||||
|
@ -78,7 +78,7 @@ export default {
|
|||
"Disable Auth": "Authentifizierung deaktivieren",
|
||||
"Enable Auth": "Authentifizierung aktivieren",
|
||||
"disableauth.message1": "Bist du sicher das du die <strong>Authentifizierung deaktivieren</strong> möchtest?",
|
||||
"disableauth.message2": "Es ist für <strong>jemanden der eine externe Authentifizierung</strong> vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access.",
|
||||
"disableauth.message2": "Dies ist für Szenarien gedacht, <strong>in denen man eine externe Authentifizierung</strong> vor Uptime Kuma geschaltet hat, wie z.B. Cloudflare Access, Authelia oder andere Authentifizierungsmechanismen.",
|
||||
"Please use this option carefully!": "Bitte mit Vorsicht nutzen.",
|
||||
Logout: "Ausloggen",
|
||||
notificationDescription: "Benachrichtigungen müssen einem Monitor zugewiesen werden, damit diese funktionieren.",
|
||||
|
@ -559,7 +559,7 @@ export default {
|
|||
"ntfy Topic": "ntfy Thema",
|
||||
Domain: "Domain",
|
||||
Workstation: "Workstation",
|
||||
disableCloudflaredNoAuthMsg: "Du bist im nicht-authentifizieren modus, ein Passwort wird nicht benötigt.",
|
||||
disableCloudflaredNoAuthMsg: "Du bist im nicht-authentifizieren Modus, ein Passwort wird nicht benötigt.",
|
||||
trustProxyDescription: "Vertraue 'X-Forwarded-*' headern. Wenn man die richtige client IP haben möchte und Uptime Kuma hinter einem Proxy wie Nginx or Apache läuft, wollte dies aktiviert werden.",
|
||||
wayToGetLineNotifyToken: "Du kannst hier ein Token erhalten: {0}",
|
||||
Examples: "Beispiele",
|
||||
|
|
|
@ -582,5 +582,6 @@ export default {
|
|||
goAlert: "GoAlert",
|
||||
backupOutdatedWarning: "Deprecated: Since a lot of features added and this backup feature is a bit unmaintained, it cannot generate or restore a complete backup.",
|
||||
backupRecommend: "Please backup the volume or the data folder (./data/) directly instead.",
|
||||
"Optional": "Optional",
|
||||
squadcast: "Squadcast",
|
||||
};
|
||||
|
|
|
@ -130,7 +130,7 @@ export default {
|
|||
"Repeat Password": "Ulangi Sandi",
|
||||
"Import Backup": "Impor Cadangan",
|
||||
"Export Backup": "Expor Cadangan",
|
||||
Export: "Expor",
|
||||
Export: "Ekspor",
|
||||
Import: "Impor",
|
||||
respTime: "Tanggapan. Waktu (milidetik)",
|
||||
notAvailableShort: "N/A",
|
||||
|
@ -192,7 +192,7 @@ export default {
|
|||
"Status Pages": "Halaman Status",
|
||||
defaultNotificationName: "{notification} saya Peringatan ({number})",
|
||||
here: "di sini",
|
||||
Required: "Dibutuhkan",
|
||||
Required: "Wajib",
|
||||
telegram: "Telegram",
|
||||
"Bot Token": "Bot Token",
|
||||
wayToGetTelegramToken: "Anda dapat mendapatkan token dari {0}.",
|
||||
|
@ -210,9 +210,9 @@ export default {
|
|||
secureOptionNone: "None / STARTTLS (25, 587)",
|
||||
secureOptionTLS: "TLS (465)",
|
||||
"Ignore TLS Error": "Abaikan Kesalahan TLS",
|
||||
"From Email": "Dari Surel",
|
||||
"From Email": "Dari Email",
|
||||
emailCustomSubject: "Subjek",
|
||||
"To Email": "Ke Surel",
|
||||
"To Email": "Ke Email",
|
||||
smtpCC: "CC",
|
||||
smtpBCC: "BCC",
|
||||
discord: "Discord",
|
||||
|
@ -232,7 +232,7 @@ export default {
|
|||
signalImportant: "PENTING: Anda tidak dapat mencampur grup dan nomor di penerima!",
|
||||
gotify: "Gotify",
|
||||
"Application Token": "Token Aplikasi",
|
||||
"Server URL": "URL Peladen",
|
||||
"Server URL": "URL Server",
|
||||
Priority: "Prioritas",
|
||||
slack: "Slack",
|
||||
"Icon Emoji": "Ikon Emoji",
|
||||
|
@ -274,9 +274,9 @@ export default {
|
|||
"LunaSea Device ID": "LunaSea Device ID",
|
||||
"Apprise URL": "Apprise URL",
|
||||
"Example:": "Contoh: {0}",
|
||||
"Read more:": "Baca lebih lajut: {0}",
|
||||
"Read more:": "Baca lebih lanjut: {0}",
|
||||
"Status:": "Status: {0}",
|
||||
"Read more": "Baca lebih lajut",
|
||||
"Read more": "Baca lebih lanjut",
|
||||
appriseInstalled: "Apprise diinstall.",
|
||||
appriseNotInstalled: "Apprise tidak diinstall. {0}",
|
||||
"Access Token": "Token Akses",
|
||||
|
@ -310,7 +310,7 @@ export default {
|
|||
BodyInvalidFormat: "Request Body memiliki format JSON yang tidak sesuai: ",
|
||||
"Monitor History": "Riyawat Monitor",
|
||||
clearDataOlderThan: "Simpan data riwayat monitoring selama {0} hari.",
|
||||
PasswordsDoNotMatch: "Passwords tidak sama.",
|
||||
PasswordsDoNotMatch: "Password tidak sama.",
|
||||
records: "catatan",
|
||||
"One record": "Satu catatan",
|
||||
steamApiKeyDescription: "Untuk monitoring Steam Game Server Anda membutuhkan kunci Steam Web-API. Anda dapat mendaftarkan Kunci API Anda melalui: ",
|
||||
|
@ -322,7 +322,7 @@ export default {
|
|||
recent: "Baru saja",
|
||||
Done: "Selesai",
|
||||
Info: "Info",
|
||||
Security: "Keamaan",
|
||||
Security: "Keamanan",
|
||||
"Steam API Key": "Steam API Key",
|
||||
"Shrink Database": "Shrink Database",
|
||||
"Pick a RR-Type...": "Pilih RR-Type...",
|
||||
|
@ -393,7 +393,7 @@ export default {
|
|||
alertaAlertState: "Status Siaga",
|
||||
alertaRecoverState: "Status Pemulihan",
|
||||
deleteStatusPageMsg: "Apakah Anda yakin untuk menghapus halaman status berikut?",
|
||||
Proxies: "Proxies",
|
||||
Proxies: "Proxy",
|
||||
default: "Bawaan",
|
||||
enabled: "Diaktifkan",
|
||||
setAsDefault: "Tetapkan sebagai bawaan",
|
||||
|
@ -403,7 +403,7 @@ export default {
|
|||
setAsDefaultProxyDescription: "Proxy berikut akan diaktifkan sebagai bawaan untuk monitor baru. Anda masih dapat menonaktifkan proxy secara terpisah untuk setiap monitor.",
|
||||
"Certificate Chain": "Certificate Chain",
|
||||
Valid: "Sahih",
|
||||
Invalid: "Tidak Sahih",
|
||||
Invalid: "Tidak Valid",
|
||||
AccessKeyId: "AccessKey ID",
|
||||
SecretAccessKey: "AccessKey Secret",
|
||||
PhoneNumbers: "Nomor Telepon",
|
||||
|
@ -433,7 +433,7 @@ export default {
|
|||
Installed: "Terpasang",
|
||||
"Not installed": "Tidak terpasang",
|
||||
Running: "Berlari",
|
||||
"Not running": "Tidak berlari",
|
||||
"Not running": "Tidak berjalan",
|
||||
"Remove Token": "Hapus Token",
|
||||
Start: "Mulai",
|
||||
Stop: "Berhenti",
|
||||
|
@ -444,7 +444,7 @@ export default {
|
|||
startOrEndWithOnly: "Mulai atau akhiri hanya dengan {0}",
|
||||
"No consecutive dashes": "Tanda hubung tidak berurutan",
|
||||
Next: "Selanjutnya",
|
||||
"The slug is already taken. Please choose another slug.": "Slug is telah digunakan. Silakan pilih slug lain.",
|
||||
"The slug is already taken. Please choose another slug.": "Slug telah digunakan. Silakan pilih slug lain.",
|
||||
"No Proxy": "TIdak ada Proxy",
|
||||
Authentication: "Autentikasi",
|
||||
"HTTP Basic Auth": "HTTP Basic Auth",
|
||||
|
|
|
@ -224,7 +224,7 @@ export default {
|
|||
teams: "Microsoft Teams",
|
||||
"Webhook URL": "Webhook URL",
|
||||
wayToGetTeamsURL: "Bir webhook URL'sinin nasıl oluşturulacağını öğrenebilirsiniz {0}.",
|
||||
signal: "Signal",
|
||||
signal: "Sinyal",
|
||||
Number: "Numara",
|
||||
Recipients: "Alıcılar",
|
||||
needSignalAPI: "REST API ile bir signal istemciniz olması gerekiyor.",
|
||||
|
@ -552,14 +552,14 @@ export default {
|
|||
deleteDockerHostMsg: "Bu docker ana bilgisayarını tüm monitörler için silmek istediğinizden emin misiniz?",
|
||||
socket: "Soket",
|
||||
tcp: "TCP / HTTP",
|
||||
"Docker Container": "Docker Konteyneri",
|
||||
"Docker Container": "Docker Konteyner",
|
||||
"Container Name / ID": "Konteyner Adı / Kimliği",
|
||||
"Docker Host": "Docker Ana Bilgisayarı",
|
||||
"Docker Hosts": "Docker Ana Bilgisayarları",
|
||||
"ntfy Topic": "ntfy Konu",
|
||||
Domain: "Domain",
|
||||
Workstation: "İş İstasyonu",
|
||||
disableCloudflaredNoAuthMsg: "Yetki Yok modundasınız, şifre gerekli değil.",
|
||||
disableCloudflaredNoAuthMsg: "Yetki yok modundasınız, şifre gerekli değil.",
|
||||
trustProxyDescription: "'X-Forwarded-*' başlıklarına güvenin. Doğru istemci IP'sini almak istiyorsanız ve Uptime Kuma'nız Nginx veya Apache'nin arkasındaysa, bunu etkinleştirmelisiniz.",
|
||||
wayToGetLineNotifyToken: "{0} adresinden bir erişim jetonu alabilirsiniz.",
|
||||
Examples: "Örnekler",
|
||||
|
|
Loading…
Reference in New Issue