This commit is contained in:
66 changed files with 19815 additions and 0 deletions

57
back/cmd/middleware.go Normal file
View File

@@ -0,0 +1,57 @@
package cmd
import (
"net/http"
"os"
"strings"
"github.com/gin-gonic/gin"
)
// isFileIOEnabled проверяет, разрешены ли файловые операции
// По умолчанию включено, отключается только при GO_KNOCKER_ENABLE_FILE_IO=0
func isFileIOEnabled() bool {
env := os.Getenv("GO_KNOCKER_ENABLE_FILE_IO")
return env != "0" && env != "false"
}
// authMiddleware - базовая авторизация: пользователь "knocker" + пароль
func authMiddleware(pass string) gin.HandlerFunc {
return func(c *gin.Context) {
user, providedPass, ok := c.Request.BasicAuth()
// Проверяем пользователя "knocker" и пароль
if !ok || (providedPass != pass || user != "knocker") {
c.Header("WWW-Authenticate", "Basic realm=Restricted")
c.AbortWithStatus(http.StatusUnauthorized)
return
}
c.Next()
}
}
// staticAuthMiddleware - защищает HTML страницы, но пропускает статические ресурсы
func staticAuthMiddleware(pass string) gin.HandlerFunc {
return func(c *gin.Context) {
path := c.Request.URL.Path
// Пропускаем статические ресурсы без авторизации
if strings.HasSuffix(path, ".js") ||
strings.HasSuffix(path, ".css") ||
strings.HasSuffix(path, ".ico") ||
strings.HasSuffix(path, ".png") ||
strings.HasSuffix(path, ".jpg") ||
strings.HasSuffix(path, ".svg") ||
strings.HasSuffix(path, ".woff") ||
strings.HasSuffix(path, ".woff2") ||
strings.HasSuffix(path, ".ttf") ||
strings.HasSuffix(path, ".eot") ||
strings.HasSuffix(path, ".webmanifest") ||
strings.HasPrefix(path, "/api/") {
c.Next()
return
}
// Для всех остальных путей (в основном HTML) применяем авторизацию
authMiddleware(pass)(c)
}
}