4 Commits

Author SHA1 Message Date
Adrian Zuercher
5b905bac24 lift version 2025-06-29 21:26:56 +02:00
Adrian Zuercher
e320156a47 add automatic localhost and local ip for allowOrigin 2025-06-29 21:26:16 +02:00
Adrian Zuercher
c58dbf34d0 add icon as asset, add refresh button 2025-06-29 20:27:18 +02:00
zuadi
472a446d3a Rename okDialog.vue to OkDialog.vue 2025-06-27 11:07:52 +02:00
7 changed files with 57 additions and 8 deletions

View File

@@ -48,6 +48,10 @@ func main() {
Debug: *debug,
TerminalOut: true,
})
if err != nil {
logger.Error("main new logger", err.Error())
panic(err)
}
//new login manager
loginManager, err := login.NewLoginManager(".")
@@ -62,8 +66,20 @@ func main() {
// new server
s := server.NewServer()
//get local ip
origins := []string{"http://localhost:9000"}
origins = append(origins, "http://localhost:9500")
localIP, err := utils.GetLocalIP()
if err != nil {
logger.Error("main", fmt.Sprintf("get local ip : %s", err.Error()))
} else {
origins = append(origins, fmt.Sprintf("http://%s:9000", localIP))
origins = append(origins, fmt.Sprintf("http://%s:9500", localIP))
}
fmt.Println(123, origins)
s.Routes.Use(cors.New(cors.Config{
AllowOrigins: []string{"http://localhost:9000"},
AllowOrigins: origins,
AllowMethods: []string{"POST", "GET", "DELETE", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Type"},
AllowCredentials: true,
@@ -104,7 +120,6 @@ func main() {
logger.Error("main", fmt.Sprintf("starting browser error : %s", err.Error()))
}
}()
fmt.Println(3, *ip, *port)
// start http server
logger.Info("main", fmt.Sprintf("http listen on ip: %s port: %d", *ip, *port))
if err := s.ServeHttp(*ip, *port); err != nil {

22
backend/utils/ip.go Normal file
View File

@@ -0,0 +1,22 @@
package utils
import (
"fmt"
"net"
)
func GetLocalIP() (string, error) {
addrs, err := net.InterfaceAddrs()
if err != nil {
return "", err
}
for _, addr := range addrs {
if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
if ipNet.IP.To4() != nil {
return ipNet.IP.String(), nil
}
}
}
return "", fmt.Errorf("no local IP address found")
}

View File

@@ -1,6 +1,6 @@
{
"name": "lightcontrol",
"version": "0.0.15",
"version": "0.0.17",
"description": "A Tecamino App",
"productName": "Light Control",
"author": "A. Zuercher",

View File

@@ -4,8 +4,8 @@ import { initWebSocket } from 'src/services/websocket';
export default boot(({ app }) => {
const $q = app.config.globalProperties.$q as QVueGlobals;
const host = window.location.hostname; // gets current domain or IP
const port = 8100; // your WebSocket port
const host = window.location.hostname;
const port = 8100;
const randomId = Math.floor(Math.random() * 10001); // random number from 0 to 10000
const ws = initWebSocket(`ws://${host}:${port}/ws?id=q${randomId}`, $q);

View File

@@ -133,9 +133,12 @@ const newScene = reactive<Scene>({
});
const scenes = ref<Scene[]>([]);
const host = window.location.hostname;
const port = 9500;
const baseURL = `http://${host}:${port}`;
const quasarApi = axios.create({
baseURL: `http://localhost:9500`,
baseURL: baseURL,
timeout: 10000,
headers: {
'Content-Type': 'application/json',
@@ -150,7 +153,9 @@ onMounted(() => {
scenes.value = resp.data;
}
})
.catch((err) => NotifyResponse($q, err.response.data.error, 'error'));
.catch((err) => {
NotifyResponse($q, err.response.data.error, 'error');
});
});
function removeScene(name: string) {

View File

@@ -3,15 +3,17 @@
<q-header elevated>
<q-toolbar>
<q-img
src="src/assets/LOGO_CF-ICON_color.svg"
:src="logo"
alt="Logo"
style="width: 40px; height: 40px; background-color: var(--q-primary)"
class="q-mr-sm"
/>
<q-btn flat dense round icon="menu" aria-label="Menu" @click="toggleLeftDrawer" />
<q-toolbar-title> Light Control </q-toolbar-title>
<div>Version {{ version }}</div>
<q-btn dense icon="refresh" square class="q-px-md q-ml-md" @click="refresh" />
</q-toolbar>
</q-header>
@@ -35,6 +37,7 @@
</template>
<script setup lang="ts">
import logo from 'src/assets/LOGO_CF-ICON_color.svg';
import { ref } from 'vue';
import { version } from '../..//package.json';
@@ -47,4 +50,8 @@ function toggleLeftDrawer() {
function closeDrawer() {
leftDrawerOpen.value = false;
}
function refresh() {
window.location.reload();
}
</script>