init
This commit is contained in:
70
back/cmd/serve.go
Normal file
70
back/cmd/serve.go
Normal file
@@ -0,0 +1,70 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"embed"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"port-knocker/internal"
|
||||
|
||||
"github.com/gin-contrib/cors"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
//go:embed public/*
|
||||
var embeddedFS embed.FS
|
||||
|
||||
var serveCmd = &cobra.Command{
|
||||
Use: "serve",
|
||||
Short: "Запуск встроенного веб-сервера с GUI и REST API",
|
||||
RunE: runServe,
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(serveCmd)
|
||||
}
|
||||
|
||||
func runServe(cmd *cobra.Command, args []string) error {
|
||||
pass := os.Getenv("GO_KNOCKER_SERVE_PASS")
|
||||
if strings.TrimSpace(pass) == "" {
|
||||
return fmt.Errorf("GO_KNOCKER_SERVE_PASS не задан — задайте пароль для доступа к GUI/API")
|
||||
}
|
||||
|
||||
// Хеш, который будем использовать как ключ шифрования (совместимо с internal)
|
||||
passHash := sha256.Sum256([]byte(pass))
|
||||
// Пробрасываем пароль; internal сам выполнит sha256 от значения env
|
||||
os.Setenv(internal.EncryptionKeyEnvVar, pass)
|
||||
|
||||
port := os.Getenv("GO_KNOCKER_SERVE_PORT")
|
||||
if strings.TrimSpace(port) == "" {
|
||||
port = "8888"
|
||||
}
|
||||
|
||||
r := gin.Default()
|
||||
|
||||
// CORS: разрешаем для локальной разработки
|
||||
r.Use(cors.New(cors.Config{
|
||||
AllowOrigins: []string{"http://localhost:4200", "http://127.0.0.1:8888", "http://localhost:8888"},
|
||||
AllowMethods: []string{"GET", "POST", "OPTIONS"},
|
||||
AllowHeaders: []string{"Authorization", "Content-Type"},
|
||||
AllowCredentials: true,
|
||||
}))
|
||||
|
||||
// Применяем middleware для защиты HTML страниц
|
||||
r.Use(staticAuthMiddleware(pass))
|
||||
|
||||
// API роуты с авторизацией
|
||||
api := r.Group("/api/v1/knock-actions")
|
||||
api.Use(authMiddleware(pass))
|
||||
|
||||
// Настраиваем роуты
|
||||
setupKnockRoutes(api)
|
||||
setupCryptoRoutes(api, passHash)
|
||||
setupStaticRoutes(r, embeddedFS)
|
||||
|
||||
fmt.Printf("Serving on :%s\n", port)
|
||||
return r.Run(":" + port)
|
||||
}
|
Reference in New Issue
Block a user