Browse Source

add types, fix wrong error message

pull/1250/head
Bernd Storath 12 months ago
parent
commit
2d9717a8ce
  1. 3
      package.json
  2. 39
      src/app.vue
  3. 2
      src/package.json
  4. 3
      src/server/api/lang.ts
  5. 3
      src/server/api/release.ts
  6. 3
      src/server/api/ui-chart-type.ts
  7. 3
      src/server/api/ui-traffic-stats.ts
  8. 24
      src/utils/api.ts

3
package.json

@ -6,6 +6,5 @@
"serve": "docker compose -f docker-compose.yml -f docker-compose.dev.yml up", "serve": "docker compose -f docker-compose.yml -f docker-compose.dev.yml up",
"sudostart": "sudo docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy", "sudostart": "sudo docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy",
"start": "docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy" "start": "docker run --env WG_HOST=0.0.0.0 --name wg-easy --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl=\"net.ipv4.conf.all.src_valid_mark=1\" --mount type=bind,source=\"$(pwd)\"/config,target=/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp wg-easy"
}, }
"packageManager": "pnpm@8.15.4+sha1.c85a4305534f76d461407b59277b954bac97b5c4"
} }

39
src/app.vue

@ -617,12 +617,12 @@ const CHART_COLORS = {
gradient: { light: ['rgba(0,0,0,1.0)', 'rgba(0,0,0,1.0)'], dark: ['rgba(128,128,128,0)', 'rgba(128,128,128,0)'] }, gradient: { light: ['rgba(0,0,0,1.0)', 'rgba(0,0,0,1.0)'], dark: ['rgba(128,128,128,0)', 'rgba(128,128,128,0)'] },
}; };
const authenticated = ref(null); const authenticated = ref<null|boolean>(null);
const authenticating = ref(false); const authenticating = ref(false);
const password = ref(null); const password = ref<null|string>(null);
const requiresPassword = ref(null); const requiresPassword = ref<null|boolean>(null);
const clients = ref(null); const clients = ref<null|unknown[]>(null);
const clientsPersist = ref({}); const clientsPersist = ref({});
const clientDelete = ref(null); const clientDelete = ref(null);
const clientCreate = ref(null); const clientCreate = ref(null);
@ -745,8 +745,8 @@ async function refresh({
} = {}) { } = {}) {
if (!authenticated) return; if (!authenticated) return;
const clients = await api.getClients(); const _clients = await api.getClients();
clients.value = clients.map((client) => { clients.value = _clients.map((client) => {
if (client.name.includes('@') && client.name.includes('.')) { if (client.name.includes('@') && client.name.includes('.')) {
client.avatar = `https://gravatar.com/avatar/${sha256(client.name.toLowerCase().trim())}.jpg`; client.avatar = `https://gravatar.com/avatar/${sha256(client.name.toLowerCase().trim())}.jpg`;
} }
@ -813,7 +813,7 @@ function login(e) {
authenticating.value = true; authenticating.value = true;
api.createSession({ api.createSession({
password: password, password: password.value,
}) })
.then(async () => { .then(async () => {
const session = await api.getSession(); const session = await api.getSession();
@ -822,6 +822,7 @@ function login(e) {
return refresh(); return refresh();
}) })
.catch((err) => { .catch((err) => {
console.log(err)
alert(err.message || err.toString()); alert(err.message || err.toString());
}) })
.finally(() => { .finally(() => {
@ -843,7 +844,7 @@ function logout(e) {
}); });
} }
function createClient() { function createClient() {
const name = clientCreateName; const name = clientCreateName.value;
if (!name) return; if (!name) return;
api.createClient({ name }) api.createClient({ name })
@ -865,12 +866,12 @@ function disableClient(client) {
.catch((err) => alert(err.message || err.toString())) .catch((err) => alert(err.message || err.toString()))
.finally(() => refresh().catch(console.error)); .finally(() => refresh().catch(console.error));
} }
function updateClientName(client, name) { function updateClientName(client, name: string) {
api.updateClientName({ clientId: client.id, name }) api.updateClientName({ clientId: client.id, name })
.catch((err) => alert(err.message || err.toString())) .catch((err) => alert(err.message || err.toString()))
.finally(() => refresh().catch(console.error)); .finally(() => refresh().catch(console.error));
} }
function updateClientAddress(client, address) { function updateClientAddress(client, address: string) {
api.updateClientAddress({ clientId: client.id, address }) api.updateClientAddress({ clientId: client.id, address })
.catch((err) => alert(err.message || err.toString())) .catch((err) => alert(err.message || err.toString()))
.finally(() => refresh().catch(console.error)); .finally(() => refresh().catch(console.error));
@ -904,7 +905,7 @@ function setTheme(theme) {
const shouldAddDarkClass = theme === 'dark' || (theme === 'auto' && prefersDarkScheme?.matches); const shouldAddDarkClass = theme === 'dark' || (theme === 'auto' && prefersDarkScheme?.matches);
classList.toggle('dark', shouldAddDarkClass); classList.toggle('dark', shouldAddDarkClass);
} }
function handlePrefersChange(e) { function handlePrefersChange(e: MediaQueryListEventMap["change"]) {
if (getItem('theme') === 'auto') { if (getItem('theme') === 'auto') {
setTheme(e.matches ? 'dark' : 'light'); setTheme(e.matches ? 'dark' : 'light');
} }
@ -916,9 +917,23 @@ function toggleCharts() {
const {availableLocales, locale} = useI18n(); const {availableLocales, locale} = useI18n();
onMounted(() => { onMounted(() => {
prefersDarkScheme?.addListener(handlePrefersChange); prefersDarkScheme?.addEventListener("change", handlePrefersChange);
setTheme(uiTheme.value); setTheme(uiTheme.value);
api.getSession()
.then((session) => {
authenticated.value = session.authenticated;
requiresPassword.value = session.requiresPassword;
refresh({
updateCharts: updateCharts.value,
}).catch((err) => {
alert(err.message || err.toString());
});
})
.catch((err) => {
alert(err.message || err.toString());
});
setInterval(() => { setInterval(() => {
refresh({ refresh({
updateCharts: updateCharts.value, updateCharts: updateCharts.value,

2
src/package.json

@ -31,7 +31,7 @@
"@types/qrcode": "^1.5.5", "@types/qrcode": "^1.5.5",
"eslint": "^9.8.0", "eslint": "^9.8.0",
"typescript": "^5.5.4", "typescript": "^5.5.4",
"vue-tsc": "^2" "vue-tsc": "^2.0.29"
}, },
"packageManager": "pnpm@8.15.4+sha1.c85a4305534f76d461407b59277b954bac97b5c4" "packageManager": "pnpm@8.15.4+sha1.c85a4305534f76d461407b59277b954bac97b5c4"
} }

3
src/server/api/lang.ts

@ -1,6 +1,7 @@
import { LANG } from "~/utils/config";
export default defineEventHandler((event) => { export default defineEventHandler((event) => {
assertMethod(event, "GET"); assertMethod(event, "GET");
const {LANG} = useRuntimeConfig();
setHeader(event, 'Content-Type', 'application/json'); setHeader(event, 'Content-Type', 'application/json');
return `"${LANG}"`; return `"${LANG}"`;
}) })

3
src/server/api/release.ts

@ -1,6 +1,7 @@
import { RELEASE } from "~/utils/config";
export default defineEventHandler((event) => { export default defineEventHandler((event) => {
assertMethod(event, "GET"); assertMethod(event, "GET");
const {RELEASE} = useRuntimeConfig();
setHeader(event, 'Content-Type', 'application/json'); setHeader(event, 'Content-Type', 'application/json');
return RELEASE; return RELEASE;
}) })

3
src/server/api/ui-chart-type.ts

@ -1,6 +1,7 @@
import { UI_CHART_TYPE } from "~/utils/config";
export default defineEventHandler((event) => { export default defineEventHandler((event) => {
assertMethod(event, "GET"); assertMethod(event, "GET");
const {UI_CHART_TYPE} = useRuntimeConfig();
setHeader(event, 'Content-Type', 'application/json'); setHeader(event, 'Content-Type', 'application/json');
return `"${UI_CHART_TYPE}"`; return `"${UI_CHART_TYPE}"`;
}) })

3
src/server/api/ui-traffic-stats.ts

@ -1,6 +1,7 @@
import { UI_TRAFFIC_STATS } from "~/utils/config";
export default defineEventHandler((event) => { export default defineEventHandler((event) => {
assertMethod(event, "GET"); assertMethod(event, "GET");
const {UI_TRAFFIC_STATS} = useRuntimeConfig();
setHeader(event, 'Content-Type', 'application/json'); setHeader(event, 'Content-Type', 'application/json');
return `"${UI_TRAFFIC_STATS}"`; return `"${UI_TRAFFIC_STATS}"`;
}) })

24
src/utils/api.ts

@ -3,7 +3,11 @@
class API { class API {
async call({ method, path, body }) { async call({ method, path, body }: {
method: string,
path: string,
body?: Record<string, unknown>
}) {
const res = await fetch(`./api${path}`, { const res = await fetch(`./api${path}`, {
method, method,
headers: { headers: {
@ -21,7 +25,7 @@ class API {
const json = await res.json(); const json = await res.json();
if (!res.ok) { if (!res.ok) {
throw new Error(json.error || res.statusText); throw new Error(json.message || res.statusText);
} }
return json; return json;
@ -62,7 +66,7 @@ class API {
}); });
} }
async createSession({ password }) { async createSession({ password }: {password: string}) {
return this.call({ return this.call({
method: 'post', method: 'post',
path: '/session', path: '/session',
@ -91,7 +95,7 @@ class API {
}))); })));
} }
async createClient({ name }) { async createClient({ name }: {name: string}) {
return this.call({ return this.call({
method: 'post', method: 'post',
path: '/wireguard/client', path: '/wireguard/client',
@ -99,28 +103,28 @@ class API {
}); });
} }
async deleteClient({ clientId }) { async deleteClient({ clientId }: {clientId: string}) {
return this.call({ return this.call({
method: 'delete', method: 'delete',
path: `/wireguard/client/${clientId}`, path: `/wireguard/client/${clientId}`,
}); });
} }
async enableClient({ clientId }) { async enableClient({ clientId }: {clientId: string}) {
return this.call({ return this.call({
method: 'post', method: 'post',
path: `/wireguard/client/${clientId}/enable`, path: `/wireguard/client/${clientId}/enable`,
}); });
} }
async disableClient({ clientId }) { async disableClient({ clientId }: {clientId: string}) {
return this.call({ return this.call({
method: 'post', method: 'post',
path: `/wireguard/client/${clientId}/disable`, path: `/wireguard/client/${clientId}/disable`,
}); });
} }
async updateClientName({ clientId, name }) { async updateClientName({ clientId, name }: {clientId: string, name: string}) {
return this.call({ return this.call({
method: 'put', method: 'put',
path: `/wireguard/client/${clientId}/name/`, path: `/wireguard/client/${clientId}/name/`,
@ -128,7 +132,7 @@ class API {
}); });
} }
async updateClientAddress({ clientId, address }) { async updateClientAddress({ clientId, address }: {clientId: string, address: string}) {
return this.call({ return this.call({
method: 'put', method: 'put',
path: `/wireguard/client/${clientId}/address/`, path: `/wireguard/client/${clientId}/address/`,
@ -136,7 +140,7 @@ class API {
}); });
} }
async restoreConfiguration(file) { async restoreConfiguration(file: string) {
return this.call({ return this.call({
method: 'put', method: 'put',
path: '/wireguard/restore', path: '/wireguard/restore',

Loading…
Cancel
Save