mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-10-31 19:39:20 +08:00 
			
		
		
		
	Merge branch 'master' into feature/#2365-allow-markdown-in-status-page-footer
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/auto-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/auto-test.yml
									
									
									
									
										vendored
									
									
								
							| @@ -18,7 +18,7 @@ jobs: | |||||||
|     strategy: |     strategy: | ||||||
|       matrix: |       matrix: | ||||||
|         os: [macos-latest, ubuntu-latest, windows-latest] |         os: [macos-latest, ubuntu-latest, windows-latest] | ||||||
|         node: [ 14, 16, 17, 18 ] |         node: [ 14, 16, 18, 19 ] | ||||||
|         # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ |         # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ | ||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| # Project Info | # Project Info | ||||||
|  |  | ||||||
| First of all, thank you everyone who made pull requests for Uptime Kuma, I never thought GitHub Community can be that nice! And also because of this, I also never thought other people actually read my code and edit my code. It is not structured and commented so well, lol. Sorry about that. | First of all, I want to thank everyone who made pull requests for Uptime Kuma. I never thought the GitHub Community would be so nice! Because of this, I also never thought that other people would actually read and edit my code. It is not very well structured or commented, sorry about that. | ||||||
|  |  | ||||||
| The project was created with vite.js (vue3). Then I created a subdirectory called "server" for server part. Both frontend and backend share the same package.json. | The project was created with vite.js (vue3). Then I created a subdirectory called "server" for server part. Both frontend and backend share the same package.json. | ||||||
|  |  | ||||||
| @@ -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? | ## 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 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. | 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 have a discussion first**. Especially for a large pull request or you don't know it will be merged or not. | ||||||
|  |  | ||||||
| Here are some references: | Here are some references: | ||||||
|  |  | ||||||
| @@ -51,6 +51,10 @@ Here are some references: | |||||||
| - Convert existing code into other programming languages | - Convert existing code into other programming languages | ||||||
| - Unnecessary large code changes (Hard to review, causes code conflicts to other pull requests) | - Unnecessary large code changes (Hard to review, causes code conflicts to other pull requests) | ||||||
|  |  | ||||||
|  | The above cases cannot cover all situations. | ||||||
|  |  | ||||||
|  | I (@louislam) have the final say. If your pull request does not meet my expectations, I will reject it, no matter how much time you spend on it. Therefore, it is essential to have a discussion beforehand. | ||||||
|  |  | ||||||
| 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. | 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. | ||||||
|  |  | ||||||
| Also, please don't rush or ask for ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests. | Also, please don't rush or ask for ETA, because I have to understand the pull request, make sure it is no breaking changes and stick to my vision of this project, especially for large pull requests. | ||||||
| @@ -73,9 +77,9 @@ Before deep into coding, discussion first is preferred. Creating an empty pull r | |||||||
|  |  | ||||||
| ## Project Styles | ## Project Styles | ||||||
|  |  | ||||||
| I personally do not like something need to learn so much and need to config so much before you can finally start the app. | I personally do not like it when something requires so much learning and configuration before you can finally start the app. | ||||||
|  |  | ||||||
| - Easy to install for non-Docker users, no native build dependency is needed (at least for x86_64), no extra config, no extra effort to get it run | - Easy to install for non-Docker users, no native build dependency is needed (at least for x86_64), no extra config, no extra effort required to get it running | ||||||
| - Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go | - Single container for Docker users, no very complex docker-compose file. Just map the volume and expose the port, then good to go | ||||||
| - Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`. | - Settings should be configurable in the frontend. Environment variable is not encouraged, unless it is related to startup such as `DATA_DIR`. | ||||||
| - Easy to use | - Easy to use | ||||||
| @@ -173,15 +177,11 @@ The data and socket logic are in `src/mixins/socket.js`. | |||||||
|  |  | ||||||
| ## Unit Test | ## Unit Test | ||||||
|  |  | ||||||
| It is an end-to-end testing. It is using Jest and Puppeteer. |  | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| npm run build | npm run build | ||||||
| npm test | npm test | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| By default, the Chromium window will be shown up during the test. Specifying `HEADLESS_TEST=1` for terminal environments. |  | ||||||
|  |  | ||||||
| ## Dependencies | ## Dependencies | ||||||
|  |  | ||||||
| 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: | 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: | ||||||
|   | |||||||
							
								
								
									
										16
									
								
								docker/builder-go.dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker/builder-go.dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | ############################################ | ||||||
|  | # Build in Golang | ||||||
|  | # Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck | ||||||
|  | ############################################ | ||||||
|  | FROM golang:1.19.4-buster | ||||||
|  | WORKDIR /app | ||||||
|  | ARG TARGETPLATFORM | ||||||
|  | COPY ./extra/ ./extra/ | ||||||
|  |  | ||||||
|  | # Compile healthcheck.go | ||||||
|  | RUN apt update && \ | ||||||
|  |     apt --yes --no-install-recommends install curl && \ | ||||||
|  |     curl -sL https://deb.nodesource.com/setup_18.x | bash && \ | ||||||
|  |     apt --yes --no-install-recommends install nodejs && \ | ||||||
|  |     node ./extra/build-healthcheck.js $TARGETPLATFORM && \ | ||||||
|  |     apt --yes remove nodejs | ||||||
| @@ -1,19 +1,9 @@ | |||||||
| ############################################ | ############################################ | ||||||
| # Build in Golang | # Build in Golang | ||||||
| # Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck | # Run npm run build-healthcheck-armv7 in the host first, another it will be super slow where it is building the armv7 healthcheck | ||||||
|  | # Check file: builder-go.dockerfile | ||||||
| ############################################ | ############################################ | ||||||
| FROM golang:1.19.4-buster AS build_healthcheck | FROM louislam/uptime-kuma:builder-go AS build_healthcheck | ||||||
| WORKDIR /app |  | ||||||
| ARG TARGETPLATFORM |  | ||||||
| COPY ./extra/ ./extra/ |  | ||||||
|  |  | ||||||
| # Compile healthcheck.go |  | ||||||
| RUN apt update |  | ||||||
| RUN apt --yes --no-install-recommends install curl |  | ||||||
| RUN curl -sL https://deb.nodesource.com/setup_18.x | bash |  | ||||||
| RUN apt --yes --no-install-recommends install nodejs |  | ||||||
| RUN node -v |  | ||||||
| RUN node ./extra/build-healthcheck.js $TARGETPLATFORM |  | ||||||
|  |  | ||||||
| ############################################ | ############################################ | ||||||
| # Build in Node.js | # Build in Node.js | ||||||
| @@ -22,10 +12,13 @@ FROM louislam/uptime-kuma:base-debian AS build | |||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  |  | ||||||
| ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 | ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 | ||||||
|  | COPY .npmrc .npmrc | ||||||
|  | COPY package.json package.json | ||||||
|  | COPY package-lock.json package-lock.json | ||||||
|  | RUN npm ci --omit=dev | ||||||
| COPY . . | COPY . . | ||||||
| COPY --from=build_healthcheck /app/extra/healthcheck /app/extra/healthcheck | COPY --from=build_healthcheck /app/extra/healthcheck /app/extra/healthcheck | ||||||
| RUN npm ci --production && \ | RUN chmod +x /app/extra/entrypoint.sh | ||||||
|     chmod +x /app/extra/entrypoint.sh |  | ||||||
|  |  | ||||||
| ############################################ | ############################################ | ||||||
| # ⭐ Main Image | # ⭐ Main Image | ||||||
|   | |||||||
| @@ -3,10 +3,12 @@ WORKDIR /app | |||||||
|  |  | ||||||
| ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 | ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 | ||||||
|  |  | ||||||
|  | COPY .npmrc .npmrc | ||||||
|  | COPY package.json package.json | ||||||
|  | COPY package-lock.json package-lock.json | ||||||
|  | RUN npm ci --omit=dev | ||||||
| COPY . . | COPY . . | ||||||
| RUN npm ci --production && \ | RUN chmod +x /app/extra/entrypoint.sh | ||||||
|     chmod +x /app/extra/entrypoint.sh |  | ||||||
|  |  | ||||||
|  |  | ||||||
| FROM louislam/uptime-kuma:base-alpine AS release | FROM louislam/uptime-kuma:base-alpine AS release | ||||||
| WORKDIR /app | WORKDIR /app | ||||||
|   | |||||||
| @@ -1,3 +1,7 @@ | |||||||
|  | /* | ||||||
|  |  * If changed, have to run `npm run build-docker-builder-go`. | ||||||
|  |  * This script should be run after a period of time (180s), because the server may need some time to prepare. | ||||||
|  |  */ | ||||||
| package main | package main | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "uptime-kuma", |     "name": "uptime-kuma", | ||||||
|     "version": "1.19.3", |     "version": "1.19.4", | ||||||
|     "license": "MIT", |     "license": "MIT", | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
| @@ -31,6 +31,7 @@ | |||||||
|         "build-docker": "npm run build && npm run build-docker-debian && npm run build-docker-alpine", |         "build-docker": "npm run build && npm run build-docker-debian && npm run build-docker-alpine", | ||||||
|         "build-docker-alpine-base": "docker buildx build -f docker/alpine-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-alpine . --push", |         "build-docker-alpine-base": "docker buildx build -f docker/alpine-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-alpine . --push", | ||||||
|         "build-docker-debian-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-debian . --push", |         "build-docker-debian-base": "docker buildx build -f docker/debian-base.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:base-debian . --push", | ||||||
|  |         "build-docker-builder-go": "docker buildx build -f docker/builder-go.dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:builder-go . --push", | ||||||
|         "build-docker-alpine": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:$VERSION-alpine --target release . --push", |         "build-docker-alpine": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile-alpine --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:$VERSION-alpine --target release . --push", | ||||||
|         "build-docker-debian": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:$VERSION-debian --target release . --push", |         "build-docker-debian": "node ./extra/env2arg.js docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:$VERSION -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:$VERSION-debian --target release . --push", | ||||||
|         "build-docker-nightly": "npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", |         "build-docker-nightly": "npm run build && docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", | ||||||
| @@ -38,7 +39,7 @@ | |||||||
|         "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", |         "build-docker-nightly-amd64": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", | ||||||
|         "build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push", |         "build-docker-pr-test": "docker buildx build -f docker/dockerfile --platform linux/amd64,linux/arm64 -t louislam/uptime-kuma:pr-test --target pr-test . --push", | ||||||
|         "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", |         "upload-artifacts": "docker buildx build -f docker/dockerfile --platform linux/amd64 -t louislam/uptime-kuma:upload-artifact --build-arg VERSION --build-arg GITHUB_TOKEN --target upload-artifact . --progress plain", | ||||||
|         "setup": "git checkout 1.19.3 && npm ci --production && npm run download-dist", |         "setup": "git checkout 1.19.4 && npm ci --production && npm run download-dist", | ||||||
|         "download-dist": "node extra/download-dist.js", |         "download-dist": "node extra/download-dist.js", | ||||||
|         "mark-as-nightly": "node extra/mark-as-nightly.js", |         "mark-as-nightly": "node extra/mark-as-nightly.js", | ||||||
|         "reset-password": "node extra/reset-password.js", |         "reset-password": "node extra/reset-password.js", | ||||||
|   | |||||||
| @@ -25,15 +25,20 @@ const DEFAULT_KEEP_PERIOD = 180; | |||||||
|         parsedPeriod = DEFAULT_KEEP_PERIOD; |         parsedPeriod = DEFAULT_KEEP_PERIOD; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     log(`Clearing Data older than ${parsedPeriod} days...`); |     if (parsedPeriod < 1) { | ||||||
|  |         log(`Data deletion has been disabled as period is less than 1. Period is ${parsedPeriod} days.`); | ||||||
|  |     } else { | ||||||
|  |  | ||||||
|     try { |         log(`Clearing Data older than ${parsedPeriod} days...`); | ||||||
|         await R.exec( |  | ||||||
|             "DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ", |         try { | ||||||
|             [ parsedPeriod ] |             await R.exec( | ||||||
|         ); |                 "DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ", | ||||||
|     } catch (e) { |                 [ parsedPeriod ] | ||||||
|         log(`Failed to clear old data: ${e.message}`); |             ); | ||||||
|  |         } catch (e) { | ||||||
|  |             log(`Failed to clear old data: ${e.message}`); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     exit(); |     exit(); | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ class Pushover extends NotificationProvider { | |||||||
|         let pushoverlink = "https://api.pushover.net/1/messages.json"; |         let pushoverlink = "https://api.pushover.net/1/messages.json"; | ||||||
|  |  | ||||||
|         let data = { |         let data = { | ||||||
|             "message": "<b>Uptime Kuma Alert</b>\n\n<b>Message</b>:" + msg, |             "message": "<b>Message</b>:" + msg, | ||||||
|             "user": notification.pushoveruserkey, |             "user": notification.pushoveruserkey, | ||||||
|             "token": notification.pushoverapptoken, |             "token": notification.pushoverapptoken, | ||||||
|             "sound": notification.pushoversounds, |             "sound": notification.pushoversounds, | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ | |||||||
|                         settings.keepDataPeriodDays, |                         settings.keepDataPeriodDays, | ||||||
|                     ]) |                     ]) | ||||||
|                 }} |                 }} | ||||||
|  |                 {{ $t("infiniteRetention") }} | ||||||
|             </label> |             </label> | ||||||
|             <input |             <input | ||||||
|                 id="keepDataPeriodDays" |                 id="keepDataPeriodDays" | ||||||
| @@ -14,9 +15,12 @@ | |||||||
|                 type="number" |                 type="number" | ||||||
|                 class="form-control" |                 class="form-control" | ||||||
|                 required |                 required | ||||||
|                 min="1" |                 min="0" | ||||||
|                 step="1" |                 step="1" | ||||||
|             /> |             /> | ||||||
|  |             <div v-if="settings.keepDataPeriodDays < 0" class="form-text"> | ||||||
|  |                 {{ $t("dataRetentionTimeError") }} | ||||||
|  |             </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="my-4"> |         <div class="my-4"> | ||||||
|             <button class="btn btn-primary" type="button" @click="saveSettings()"> |             <button class="btn btn-primary" type="button" @click="saveSettings()"> | ||||||
|   | |||||||
| @@ -669,4 +669,10 @@ export default { | |||||||
|     "General Monitor Type": "Общ тип монитор", |     "General Monitor Type": "Общ тип монитор", | ||||||
|     "Passive Monitor Type": "Пасивет тип монитор", |     "Passive Monitor Type": "Пасивет тип монитор", | ||||||
|     "Specific Monitor Type": "Специфичен тип монитор", |     "Specific Monitor Type": "Специфичен тип монитор", | ||||||
|  |     ZohoCliq: "ZohoCliq", | ||||||
|  |     wayToGetZohoCliqURL: "Можете да научите как се създава URL адрес за уеб кука {0}.", | ||||||
|  |     Kook: "Kook", | ||||||
|  |     wayToGetKookBotToken: "Създайте приложение и вземете вашия бот токен на {0}", | ||||||
|  |     wayToGetKookGuildID: "Превключете в 'Developer Mode' в 'Kook' настройките, след което десен клик върху 'guild' за да вземете неговото 'ID'", | ||||||
|  |     "Guild ID": "Guild ID", | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -676,4 +676,6 @@ export default { | |||||||
|     "Passive Monitor Type": "Passive Monitor Type", |     "Passive Monitor Type": "Passive Monitor Type", | ||||||
|     "Specific Monitor Type": "Specific Monitor Type", |     "Specific Monitor Type": "Specific Monitor Type", | ||||||
|     markdownSupported: "Markdown syntax supported", |     markdownSupported: "Markdown syntax supported", | ||||||
|  |     dataRetentionTimeError: "Retention period must be 0 or greater", | ||||||
|  |     infiniteRetention: "Set to 0 for infinite retention.", | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -209,6 +209,7 @@ export default { | |||||||
|     here: "ici", |     here: "ici", | ||||||
|     Required: "Requis", |     Required: "Requis", | ||||||
|     telegram: "Telegram", |     telegram: "Telegram", | ||||||
|  |     "ZohoCliq": "ZohoCliq", | ||||||
|     "Bot Token": "Jeton du robot", |     "Bot Token": "Jeton du robot", | ||||||
|     wayToGetTelegramToken: "Vous pouvez obtenir un token depuis {0}.", |     wayToGetTelegramToken: "Vous pouvez obtenir un token depuis {0}.", | ||||||
|     "Chat ID": "Chat ID", |     "Chat ID": "Chat ID", | ||||||
| @@ -240,7 +241,8 @@ export default { | |||||||
|     "Hello @everyone is...": "Bonjour {'@'}everyone il...", |     "Hello @everyone is...": "Bonjour {'@'}everyone il...", | ||||||
|     teams: "Microsoft Teams", |     teams: "Microsoft Teams", | ||||||
|     "Webhook URL": "URL vers le webhook", |     "Webhook URL": "URL vers le webhook", | ||||||
|     wayToGetTeamsURL: "Vous pouvez apprendre comment créer un Webhook {0}.", |     wayToGetTeamsURL: "Vous pouvez apprendre comment créer une URL Webhook {0}.", | ||||||
|  |     wayToGetZohoCliqURL: "Vous pouvez apprendre comment créer une URL Webhook {0}.", | ||||||
|     signal: "Signal", |     signal: "Signal", | ||||||
|     Number: "Numéro", |     Number: "Numéro", | ||||||
|     Recipients: "Destinataires", |     Recipients: "Destinataires", | ||||||
| @@ -270,6 +272,10 @@ export default { | |||||||
|     apprise: "Apprise (prend en charge plus de 50 services de notification)", |     apprise: "Apprise (prend en charge plus de 50 services de notification)", | ||||||
|     GoogleChat: "Google Chat (Google Workspace uniquement)", |     GoogleChat: "Google Chat (Google Workspace uniquement)", | ||||||
|     pushbullet: "Pushbullet", |     pushbullet: "Pushbullet", | ||||||
|  |     Kook: "Kook", | ||||||
|  |     wayToGetKookBotToken: "Créez une application et récupérer le jeton de robot à l'addresse {0}", | ||||||
|  |     wayToGetKookGuildID: "Passez en « mode développeur » dans les paramètres de Kook, et cliquez droit sur le Guild pour obtenir son identifiant", | ||||||
|  |     "Guild ID": "Identifiant de Guild", | ||||||
|     line: "Line Messenger", |     line: "Line Messenger", | ||||||
|     mattermost: "Mattermost", |     mattermost: "Mattermost", | ||||||
|     "User Key": "Clé d'utilisateur", |     "User Key": "Clé d'utilisateur", | ||||||
|   | |||||||
| @@ -189,14 +189,36 @@ export default { | |||||||
|          * @param {string} [currentPassword] Only need for disableAuth to true |          * @param {string} [currentPassword] Only need for disableAuth to true | ||||||
|          */ |          */ | ||||||
|         saveSettings(callback, currentPassword) { |         saveSettings(callback, currentPassword) { | ||||||
|             this.$root.getSocket().emit("setSettings", this.settings, currentPassword, (res) => { |             let valid = this.validateSettings(); | ||||||
|                 this.$root.toastRes(res); |             if (valid.success) { | ||||||
|                 this.loadSettings(); |                 this.$root.getSocket().emit("setSettings", this.settings, currentPassword, (res) => { | ||||||
|  |                     this.$root.toastRes(res); | ||||||
|  |                     this.loadSettings(); | ||||||
|  |  | ||||||
|                 if (callback) { |                     if (callback) { | ||||||
|                     callback(); |                         callback(); | ||||||
|                 } |                     } | ||||||
|             }); |                 }); | ||||||
|  |             } else { | ||||||
|  |                 this.$root.toastError(valid.msg); | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Ensure settings are valid | ||||||
|  |          * @returns {Object} Contains success state and error msg | ||||||
|  |          */ | ||||||
|  |         validateSettings() { | ||||||
|  |             if (this.settings.keepDataPeriodDays < 0) { | ||||||
|  |                 return { | ||||||
|  |                     success: false, | ||||||
|  |                     msg: this.$t("dataRetentionTimeError"), | ||||||
|  |                 }; | ||||||
|  |             } | ||||||
|  |             return { | ||||||
|  |                 success: true, | ||||||
|  |                 msg: "", | ||||||
|  |             }; | ||||||
|         }, |         }, | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user