22
src/app/components/Header/Insecure.vue
Normal file
22
src/app/components/Header/Insecure.vue
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
v-if="!globalStore.information?.insecure && !https"
|
||||||
|
class="container mx-auto w-fit rounded-md bg-red-800 p-4 text-white shadow-lg dark:bg-red-100 dark:text-red-600"
|
||||||
|
>
|
||||||
|
<p class="text-center">{{ $t('login.insecure') }}</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
const globalStore = useGlobalStore();
|
||||||
|
|
||||||
|
const https = ref(false);
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (window.location.protocol === 'https:') {
|
||||||
|
https.value = true;
|
||||||
|
} else {
|
||||||
|
https.value = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
v-if="
|
v-if="
|
||||||
globalStore.release?.updateAvailable &&
|
globalStore.information?.updateAvailable &&
|
||||||
authStore.userData &&
|
authStore.userData &&
|
||||||
hasPermissions(authStore.userData, 'admin', 'any')
|
hasPermissions(authStore.userData, 'admin', 'any')
|
||||||
"
|
"
|
||||||
class="font-small mb-10 rounded-md bg-red-800 p-4 text-sm text-white shadow-lg dark:bg-red-100 dark:text-red-600"
|
class="font-small mb-10 rounded-md bg-red-800 p-4 text-sm text-white shadow-lg dark:bg-red-100 dark:text-red-600"
|
||||||
:title="`v${globalStore.release.currentRelease} → v${globalStore.release.latestRelease.version}`"
|
:title="`v${globalStore.information.currentRelease} → v${globalStore.information.latestRelease.version}`"
|
||||||
>
|
>
|
||||||
<div class="container mx-auto flex flex-auto flex-row items-center">
|
<div class="container mx-auto flex flex-auto flex-row items-center">
|
||||||
<div class="flex-grow">
|
<div class="flex-grow">
|
||||||
<p class="font-bold">{{ $t('update.updateAvailable') }}</p>
|
<p class="font-bold">{{ $t('update.updateAvailable') }}</p>
|
||||||
<p>{{ globalStore.release.latestRelease.changelog }}</p>
|
<p>{{ globalStore.information.latestRelease.changelog }}</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
:href="`https://github.com/wg-easy/wg-easy/releases/tag/${globalStore.release.latestRelease.version}`"
|
:href="`https://github.com/wg-easy/wg-easy/releases/tag/${globalStore.information.latestRelease.version}`"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
class="font-sm float-right flex-shrink-0 rounded-md border-2 border-red-800 bg-white p-3 font-semibold text-red-800 transition-all hover:border-white hover:bg-red-800 hover:text-white dark:border-red-600 dark:bg-red-100 dark:text-red-600 dark:hover:border-red-600 dark:hover:bg-red-600 dark:hover:text-red-100"
|
class="font-sm float-right flex-shrink-0 rounded-md border-2 border-red-800 bg-white p-3 font-semibold text-red-800 transition-all hover:border-white hover:bg-red-800 hover:text-white dark:border-red-600 dark:bg-red-100 dark:text-red-600 dark:hover:border-red-600 dark:hover:bg-red-600 dark:hover:text-red-100"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
href="https://github.com/wg-easy/wg-easy"
|
href="https://github.com/wg-easy/wg-easy"
|
||||||
>WireGuard Easy</a
|
>WireGuard Easy</a
|
||||||
>
|
>
|
||||||
({{ globalStore.release?.currentRelease }}) © 2021-2025 by
|
({{ globalStore.information?.currentRelease }}) © 2021-2025 by
|
||||||
<a
|
<a
|
||||||
class="hover:underline"
|
class="hover:underline"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<main>
|
<main>
|
||||||
<UiBanner />
|
<UiBanner />
|
||||||
|
<HeaderInsecure />
|
||||||
<form
|
<form
|
||||||
class="mx-auto mt-10 flex w-64 flex-col gap-5 overflow-hidden rounded-md bg-white p-5 text-gray-700 shadow dark:bg-neutral-700 dark:text-neutral-200"
|
class="mx-auto mt-10 flex w-64 flex-col gap-5 overflow-hidden rounded-md bg-white p-5 text-gray-700 shadow dark:bg-neutral-700 dark:text-neutral-200"
|
||||||
@submit.prevent="submit"
|
@submit.prevent="submit"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
export const useGlobalStore = defineStore('Global', () => {
|
export const useGlobalStore = defineStore('Global', () => {
|
||||||
const { data: release } = useFetch('/api/release', {
|
const { data: information } = useFetch('/api/information', {
|
||||||
method: 'get',
|
method: 'get',
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ export const useGlobalStore = defineStore('Global', () => {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
sortClient,
|
sortClient,
|
||||||
release,
|
information,
|
||||||
uiShowCharts,
|
uiShowCharts,
|
||||||
toggleCharts,
|
toggleCharts,
|
||||||
uiChartType,
|
uiChartType,
|
||||||
|
|||||||
@@ -65,7 +65,8 @@
|
|||||||
"login": {
|
"login": {
|
||||||
"signIn": "Sign In",
|
"signIn": "Sign In",
|
||||||
"rememberMe": "Remember me",
|
"rememberMe": "Remember me",
|
||||||
"rememberMeDesc": "Stay logged after closing the browser"
|
"rememberMeDesc": "Stay logged after closing the browser",
|
||||||
|
"insecure": "You can't log in with an insecure connection. Use HTTPS."
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"clear": "Clear",
|
"clear": "Clear",
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ import { gt } from 'semver';
|
|||||||
export default defineEventHandler(async () => {
|
export default defineEventHandler(async () => {
|
||||||
const latestRelease = await cachedFetchLatestRelease();
|
const latestRelease = await cachedFetchLatestRelease();
|
||||||
const updateAvailable = gt(latestRelease.version, RELEASE);
|
const updateAvailable = gt(latestRelease.version, RELEASE);
|
||||||
|
const insecure = WG_ENV.INSECURE;
|
||||||
return {
|
return {
|
||||||
currentRelease: RELEASE,
|
currentRelease: RELEASE,
|
||||||
latestRelease: latestRelease,
|
latestRelease: latestRelease,
|
||||||
updateAvailable,
|
updateAvailable,
|
||||||
|
insecure,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user