chore: add auth logic
ci-agent / build (push) Failing after 7m51s

This commit is contained in:
d3m0k1d
2026-04-04 01:09:40 +03:00
parent d917a9e465
commit 8ab7fbc6b2
9 changed files with 543 additions and 7 deletions
+44 -3
View File
@@ -1,4 +1,4 @@
package cmd
package main
import (
"context"
@@ -27,17 +27,37 @@ func main() {
}
cfg, err := config.ImportSettings(cfg_path)
if err != nil {
log.Fatalf("Err loading config")
log.Fatalf("Err loading config: %v", err)
}
db, err := storage.Open(cfg.Database.Token_db)
if err != nil {
log.Fatalf("Err opening database")
log.Fatalf("Err opening database: %v", err)
}
defer db.Close()
h := handlers.New(db)
agents := handlers.AgentsGroup{Handlers: h}
auth := handlers.AuthGroup{Handlers: h}
// Create admin user from config if not exists
if cfg.Admin.Admin_login != "" && cfg.Admin.Admin_password != "" {
if !h.Repo.ExistsByLogin(cfg.Admin.Admin_login) {
_, err := h.Repo.CreateToken(repository.TokenCreate{
Name: cfg.Admin.Admin_name,
LastName: cfg.Admin.Admin_last_name,
Login: cfg.Admin.Admin_login,
Password: cfg.Admin.Admin_password,
PermissionView: true,
PermissionAdmin: true,
})
if err != nil {
log.Printf("Warning: failed to create admin user: %v", err)
} else {
log.Println("Admin user created from config")
}
}
}
router := gin.Default()
docs.SwaggerInfo.BasePath = "/api/v1"
@@ -49,12 +69,33 @@ func main() {
v1 := router.Group("/api/v1")
{
// Auth routes (public)
authGroup := v1.Group("/auth")
{
authGroup.POST("/login", auth.Login)
}
// Auth token management (requires auth)
authTokenGroup := v1.Group("/auth")
authTokenGroup.Use(auth.AuthMiddleware())
{
authTokenGroup.POST("/token", handlers.RequireAdmin(), auth.CreateToken)
authTokenGroup.GET("/validate", auth.ValidateToken)
authTokenGroup.GET("/tokens", handlers.RequireAdmin(), auth.ListTokens)
authTokenGroup.DELETE("/token", auth.DeleteMyToken)
authTokenGroup.DELETE("/tokens/:login", handlers.RequireAdmin(), auth.DeleteToken)
}
// Agents (requires manage_agent permission)
agentsGroup := v1.Group("/agents")
agentsGroup.Use(auth.AuthMiddleware(), handlers.RequireManageAgent())
{
agentsGroup.GET("", agents.List)
}
// Logs (requires view permission)
logsGroup := v1.Group("/logs")
logsGroup.Use(auth.AuthMiddleware(), handlers.RequireView())
{
if cfg.Database.Clickhouse_host != "" {
chConn, err := storage.OpenClickHouse(storage.ClickHouseConfig{