From 9fdb8d863348874eae0ceda738d557544298f968 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Sat, 24 Jun 2023 01:35:25 +0200 Subject: [PATCH] peer config and qr code --- .../src/components/InterfaceViewModal.vue | 2 +- frontend/src/components/PeerEditModal.vue | 7 +- frontend/src/components/PeerViewModal.vue | 75 ++++++------- frontend/src/helpers/encoding.js | 7 ++ frontend/src/helpers/fetch-wrapper.js | 9 ++ frontend/src/lang/translations/de.json | 3 +- frontend/src/lang/translations/en.json | 3 +- frontend/src/stores/interfaces.js | 25 ++--- frontend/src/stores/peers.js | 32 ++++-- frontend/src/stores/profile.js | 5 +- frontend/src/stores/users.js | 7 +- frontend/src/views/InterfaceView.vue | 8 +- go.mod | 7 ++ go.sum | 14 +++ internal/adapters/database.go | 2 +- .../assets/ProfileView-332dbb61.js | 1 + .../assets/ProfileView-4434312c.js | 1 - .../frontend-dist/assets/UserView-6cdfb1f6.js | 1 + .../frontend-dist/assets/UserView-9a6bf435.js | 1 - .../{index-2321088d.js => index-8f53e6dd.js} | 100 +++++++----------- .../app/api/core/frontend-dist/index.html | 2 +- internal/app/api/v0/handlers/encoding.go | 15 +++ .../api/v0/handlers/endpoint_interfaces.go | 14 +-- .../app/api/v0/handlers/endpoint_peers.go | 97 +++++++++++++++-- .../app/api/v0/handlers/endpoint_users.go | 16 +-- internal/app/filetemplate/manager.go | 41 +++++++ .../filetemplate/tpl_files/wg_interface.tpl | 41 ++++--- .../app/filetemplate/tpl_files/wg_peer.tpl | 27 +++-- internal/app/repos.go | 1 + 29 files changed, 379 insertions(+), 185 deletions(-) create mode 100644 frontend/src/helpers/encoding.js create mode 100644 internal/app/api/core/frontend-dist/assets/ProfileView-332dbb61.js delete mode 100644 internal/app/api/core/frontend-dist/assets/ProfileView-4434312c.js create mode 100644 internal/app/api/core/frontend-dist/assets/UserView-6cdfb1f6.js delete mode 100644 internal/app/api/core/frontend-dist/assets/UserView-9a6bf435.js rename internal/app/api/core/frontend-dist/assets/{index-2321088d.js => index-8f53e6dd.js} (80%) create mode 100644 internal/app/api/v0/handlers/encoding.go diff --git a/frontend/src/components/InterfaceViewModal.vue b/frontend/src/components/InterfaceViewModal.vue index 2fd8b94..378e0ed 100644 --- a/frontend/src/components/InterfaceViewModal.vue +++ b/frontend/src/components/InterfaceViewModal.vue @@ -36,7 +36,7 @@ const title = computed(() => { watch(() => props.visible, async (newValue, oldValue) => { if (oldValue === false && newValue === true) { // if modal is shown console.log(selectedInterface.value) - await interfaces.InterfaceConfig(selectedInterface.value.Identifier) + await interfaces.LoadInterfaceConfig(selectedInterface.value.Identifier) configString.value = interfaces.configuration } } diff --git a/frontend/src/components/PeerEditModal.vue b/frontend/src/components/PeerEditModal.vue index 04b8d13..b787eca 100644 --- a/frontend/src/components/PeerEditModal.vue +++ b/frontend/src/components/PeerEditModal.vue @@ -9,7 +9,7 @@ import Vue3TagsInput from "vue3-tags-input"; import { validateCIDR, validateIP, validateDomain } from '@/helpers/validators'; import isCidr from "is-cidr"; import {isIP} from 'is-ip'; -import { freshPeer } from '@/helpers/models'; +import { freshPeer, freshInterface } from '@/helpers/models'; const { t } = useI18n() @@ -31,10 +31,7 @@ const selectedInterface = computed(() => { let i = interfaces.GetSelected; if (!i) { - i = { // dummy interface to avoid 'undefined' exceptions - Identifier: "none", - Mode: "server" - } + i = freshInterface() // dummy interface to avoid 'undefined' exceptions } return i diff --git a/frontend/src/components/PeerViewModal.vue b/frontend/src/components/PeerViewModal.vue index 1b6139d..905df4c 100644 --- a/frontend/src/components/PeerViewModal.vue +++ b/frontend/src/components/PeerViewModal.vue @@ -2,7 +2,12 @@ import Modal from "./Modal.vue"; import {peerStore} from "@/stores/peers"; import {interfaceStore} from "@/stores/interfaces"; -import {computed} from "vue"; +import {computed, ref, watch} from "vue"; +import {useI18n} from "vue-i18n"; +import { freshInterface, freshPeer } from '@/helpers/models'; +import Prism from "vue-prism-component"; + +const { t } = useI18n() const peers = peerStore() const interfaces = interfaceStore() @@ -18,30 +23,49 @@ function close() { emit('close') } +const configString = ref("") + const selectedPeer = computed(() => { - return peers.Find(props.peerId) + let p = peers.Find(props.peerId) + + if (!p) { + p = freshPeer() // dummy peer to avoid 'undefined' exceptions + } + + return p }) const selectedInterface = computed(() => { let i = interfaces.GetSelected; if (!i) { - i = { // dummy interface to avoid 'undefined' exceptions - Identifier: "none", - Mode: "server" - } + i = freshInterface() // dummy interface to avoid 'undefined' exceptions } return i }) const title = computed(() => { - if (selectedPeer.value) { - return "Peer: " + selectedPeer.value.Name + if (!props.visible) { + return "" // otherwise interfaces.GetSelected will die... + } + if (selectedInterface.value.Mode === "server") { + return t("interfaces.peer.view") + ": " + selectedPeer.value.DisplayName + } else { + return t("interfaces.endpoint.view") + ": " + selectedPeer.value.DisplayName } - return "" }) +watch(() => props.visible, async (newValue, oldValue) => { + if (oldValue === false && newValue === true) { // if modal is shown + console.log(selectedInterface.value) + console.log(selectedPeer.value) + await peers.LoadPeerConfig(selectedPeer.value.Identifier) + configString.value = peers.configuration + } + } +) +