mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-06-06 13:12:33 +02:00
Merge remote-tracking branch 'upstream/master'
# Conflicts: # docker-compose.yml # dockerfile # package-lock.json # package.json # server/notification.js # server/server.js # src/assets/vars.scss
This commit is contained in:
commit
7cabafebaf
13 changed files with 148 additions and 146 deletions
|
@ -13,3 +13,6 @@ trim_trailing_whitespace = false
|
|||
|
||||
[*.yaml]
|
||||
indent_size = 2
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
|
|
BIN
db/kuma.db
BIN
db/kuma.db
Binary file not shown.
BIN
public/icon.png
Normal file
BIN
public/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -52,22 +52,6 @@ class Notification {
|
|||
} else if (notification.type === "smtp") {
|
||||
return await Notification.smtp(notification, msg)
|
||||
|
||||
} else if (notification.type === "signal") {
|
||||
try {
|
||||
let data = {
|
||||
"message": msg,
|
||||
"number": notification.signalNumber,
|
||||
"recipients": notification.signalRecipients.replace(/\s/g, '').split(",")
|
||||
};
|
||||
let config = {};
|
||||
|
||||
let res = await axios.post(notification.signalURL, data, config)
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
return false;
|
||||
}
|
||||
|
||||
} else if (notification.type === "discord") {
|
||||
try {
|
||||
// If heartbeatJSON is null, assume we're testing.
|
||||
|
@ -108,6 +92,24 @@ class Notification {
|
|||
console.log(error)
|
||||
return false;
|
||||
}
|
||||
return await Notification.discord(notification, msg)
|
||||
|
||||
} else if (notification.type === "signal") {
|
||||
try {
|
||||
let data = {
|
||||
"message": msg,
|
||||
"number": notification.signalNumber,
|
||||
"recipients": notification.signalRecipients.replace(/\s/g, '').split(",")
|
||||
};
|
||||
let config = {};
|
||||
|
||||
let res = await axios.post(notification.signalURL, data, config)
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
return false;
|
||||
}
|
||||
|
||||
} else {
|
||||
throw new Error("Notification type is not supported")
|
||||
}
|
||||
|
@ -171,6 +173,18 @@ class Notification {
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
static async discord(notification, msg) {
|
||||
const client = new Discord.Client();
|
||||
await client.login(notification.discordToken)
|
||||
|
||||
const channel = await client.channels.fetch(notification.discordChannelID);
|
||||
await channel.send(msg);
|
||||
|
||||
client.destroy()
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
|
@ -14,11 +14,9 @@ const { getSettings } = require("./util-server");
|
|||
const {Notification} = require("./notification")
|
||||
const args = require('args-parser')(process.argv);
|
||||
|
||||
console.log("args:")
|
||||
console.log(args)
|
||||
|
||||
const version = require('../package.json').version;
|
||||
const hostname = args.host || "0.0.0.0"
|
||||
const port = args.port || 50013
|
||||
const port = args.port || 3001
|
||||
|
||||
app.use(express.json())
|
||||
|
||||
|
@ -32,18 +30,16 @@ let needSetup = false;
|
|||
|
||||
app.use('/', express.static("dist"));
|
||||
|
||||
app.post('/test-webhook', function (request, response, next) {
|
||||
console.log("Test Webhook (application/json only)")
|
||||
console.log("Content-Type: " + request.header("Content-Type"))
|
||||
console.log(request.body)
|
||||
response.end();
|
||||
});
|
||||
|
||||
app.get('*', function(request, response, next) {
|
||||
response.sendFile(process.cwd() + '/dist/index.html');
|
||||
});
|
||||
|
||||
io.on('connection', async (socket) => {
|
||||
|
||||
socket.emit("info", {
|
||||
version,
|
||||
})
|
||||
|
||||
console.log('a user connected');
|
||||
totalClient++;
|
||||
|
||||
|
|
|
@ -1,46 +1,16 @@
|
|||
@import "vars.scss";
|
||||
@import "node_modules/bootstrap/scss/bootstrap";
|
||||
|
||||
html,
|
||||
body,
|
||||
input,
|
||||
.modal-content {
|
||||
background: var(--page-background);
|
||||
color: var(--main-font-color);
|
||||
}
|
||||
a,
|
||||
.table,
|
||||
.nav-link {
|
||||
color: var(--main-font-color);
|
||||
}
|
||||
.nav-pills .nav-link.active,
|
||||
.nav-pills .show > .nav-link {
|
||||
color: #0a0a0a;
|
||||
}
|
||||
|
||||
.nav-link:hover,
|
||||
.nav-link:focus {
|
||||
color: #5cdd8b;
|
||||
}
|
||||
|
||||
.form-control,
|
||||
.form-control:focus,
|
||||
.form-select,
|
||||
.form-select:focus {
|
||||
color: var(--main-font-color);
|
||||
background-color: var(--background-4);
|
||||
}
|
||||
|
||||
#app {
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
||||
segoe ui, Roboto, helvetica neue, Arial, noto sans, sans-serif,
|
||||
apple color emoji, segoe ui emoji, segoe ui symbol, noto color emoji;
|
||||
font-family: ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;
|
||||
}
|
||||
|
||||
.shadow-box {
|
||||
overflow: hidden;
|
||||
box-shadow: 0 15px 70px rgba(0, 0, 0, 0.1);
|
||||
box-shadow: 0 15px 70px rgba(0, 0, 0, .1);
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
|
||||
&.big-padding {
|
||||
padding: 20px;
|
||||
}
|
||||
|
@ -52,14 +22,10 @@ a,
|
|||
}
|
||||
|
||||
.btn-primary {
|
||||
// color: white;
|
||||
color: #0a0a0a;
|
||||
color: white;
|
||||
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus,
|
||||
&.active {
|
||||
color: #0a0a0a;
|
||||
&:hover, &:active, &:focus, &.active {
|
||||
color: white;
|
||||
background-color: $highlight;
|
||||
border-color: $highlight;
|
||||
}
|
||||
|
@ -70,8 +36,3 @@ a,
|
|||
backdrop-filter: blur(3px);
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
a:hover {
|
||||
color: #7ce8a4;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -159,7 +159,7 @@ export default {
|
|||
border-radius: 50rem;
|
||||
|
||||
&.empty {
|
||||
background-color: var(--background-ternary);
|
||||
background-color: aliceblue;
|
||||
}
|
||||
|
||||
&.down {
|
||||
|
|
|
@ -36,7 +36,4 @@ export default {
|
|||
span {
|
||||
width: 45px;
|
||||
}
|
||||
.badge {
|
||||
color: #0a0a0a;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -57,7 +57,5 @@ export default {
|
|||
</script>
|
||||
|
||||
<style scoped>
|
||||
.badge{
|
||||
color: #0a0a0a;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<!-- Desktop header -->
|
||||
<header class="d-flex flex-wrap justify-content-center py-3 mb-3 border-bottom" v-if="! $root.isMobile">
|
||||
<router-link to="/dashboard" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-decoration-none">
|
||||
<router-link to="/dashboard" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none">
|
||||
<object class="bi me-2 ms-4" width="40" height="40" data="/icon.svg"></object>
|
||||
<span class="fs-4 title">Uptime Kuma</span>
|
||||
</router-link>
|
||||
|
@ -21,7 +21,7 @@
|
|||
|
||||
<!-- Mobile header -->
|
||||
<header class="d-flex flex-wrap justify-content-center mt-3 mb-3" v-else>
|
||||
<router-link to="/dashboard" class="d-flex align-items-center text-decoration-none">
|
||||
<router-link to="/dashboard" class="d-flex align-items-center text-dark text-decoration-none">
|
||||
<object class="bi" width="40" height="40" data="/icon.svg"></object>
|
||||
<span class="fs-4 title ms-2">Uptime Kuma</span>
|
||||
</router-link>
|
||||
|
@ -33,6 +33,14 @@
|
|||
<Login v-if="! $root.loggedIn && $root.allowLoginDialog" />
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container-fluid">
|
||||
Uptime Kuma -
|
||||
Version: {{ $root.info.version }} -
|
||||
<a href="https://github.com/louislam/uptime-kuma/releases" target="_blank">Check Update On GitHub</a>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<!-- Mobile Only -->
|
||||
<div style="width: 100%;height: 60px;" v-if="$root.isMobile"></div>
|
||||
<nav class="bottom-nav" v-if="$root.isMobile">
|
||||
|
@ -87,7 +95,7 @@ export default {
|
|||
height: 60px;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
background-color: var(--background-secondary);
|
||||
background-color: #fff;
|
||||
box-shadow: 0 15px 47px 0 rgba(0, 0, 0, 0.05), 0 5px 14px 0 rgba(0, 0, 0, 0.05);
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
|
@ -130,6 +138,14 @@ export default {
|
|||
}
|
||||
|
||||
main {
|
||||
margin-bottom: 30px;
|
||||
|
||||
}
|
||||
|
||||
footer {
|
||||
color: #AAA;
|
||||
font-size: 13px;
|
||||
margin-bottom: 30px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -9,6 +9,7 @@ export default {
|
|||
|
||||
data() {
|
||||
return {
|
||||
info: { },
|
||||
socket: {
|
||||
token: null,
|
||||
firstConnect: true,
|
||||
|
@ -39,6 +40,10 @@ export default {
|
|||
transports: ['websocket']
|
||||
});
|
||||
|
||||
socket.on('info', (info) => {
|
||||
this.info = info;
|
||||
});
|
||||
|
||||
socket.on('setup', (monitorID, data) => {
|
||||
this.$router.push("/setup")
|
||||
});
|
||||
|
@ -275,6 +280,13 @@ export default {
|
|||
|
||||
watch: {
|
||||
|
||||
// Reload the SPA if the server version is changed.
|
||||
"info.version"(to, from) {
|
||||
if (from && from !== to) {
|
||||
window.location.reload()
|
||||
}
|
||||
},
|
||||
|
||||
remember() {
|
||||
localStorage.remember = (this.remember) ? "1" : "0"
|
||||
}
|
||||
|
|
|
@ -129,19 +129,17 @@ export default {
|
|||
}
|
||||
|
||||
&:hover {
|
||||
color: var(--main-font-color);
|
||||
background-color: var(--background-4);
|
||||
background-color: $highlight-white;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: var(--background-secondary);
|
||||
background-color: #cdf8f4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.badge {
|
||||
min-width: 58px;
|
||||
color: #0a0a0a;
|
||||
}
|
||||
|
||||
.small-padding {
|
||||
|
|
|
@ -362,15 +362,17 @@ const aryIannaTimeZones = [
|
|||
'Pacific/Efate',
|
||||
'Pacific/Wallis',
|
||||
'Pacific/Apia',
|
||||
'Africa/Johannesburg'
|
||||
'Africa/Johannesburg',
|
||||
];
|
||||
|
||||
|
||||
export function timezoneList() {
|
||||
|
||||
let result = [];
|
||||
|
||||
for (let timezone of aryIannaTimeZones) {
|
||||
|
||||
try {
|
||||
let display = dayjs().tz(timezone).format("Z");
|
||||
|
||||
result.push({
|
||||
|
@ -378,6 +380,11 @@ export function timezoneList() {
|
|||
value: timezone,
|
||||
time: getTimezoneOffset(timezone),
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e.message);
|
||||
console.log("Skip this timezone")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
result.sort((a, b) => {
|
||||
|
|
Loading…
Add table
Reference in a new issue