fix: mtls for agent, problems with auth

This commit is contained in:
d3m0k1d
2026-04-04 05:44:11 +03:00
parent f1fc52bd6b
commit ad92439770
5 changed files with 38 additions and 6 deletions
+13 -3
View File
@@ -51,15 +51,25 @@ func main() {
log.Println("Agent registration complete") log.Println("Agent registration complete")
err = func() error { err = func() error {
creds, err := mtls.LoadMTLSCredentials(certs.CACertPEM, certs.ClientCertPEM, certs.ClientKeyPEM) creds, err := mtls.LoadMTLSCredentialsFromFiles(
cfg.CertDir+"/ca.crt",
cfg.CertDir+"/client.crt",
cfg.CertDir+"/client.key",
)
if err != nil { if err != nil {
return err return err
} }
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
cmdexe := new(commander.CommandExecutor) cmdexe := new(commander.CommandExecutor)
ccli := client.New(cmdexe, cfg.RegistrationToken, cfg.Label) ccli := client.New(cmdexe, cfg.Label, cfg.Label)
return ccli.HandleCommands(ctx, cfg.BackendURL, creds) grpcAddr := cfg.GRPCURL
if grpcAddr == "" {
grpcAddr = cfg.BackendURL
}
grpcAddr = strings.TrimPrefix(grpcAddr, "http://")
grpcAddr = strings.TrimPrefix(grpcAddr, "https://")
return ccli.HandleCommands(ctx, grpcAddr, creds)
}() }()
if err != nil { if err != nil {
log.Fatalf("Failed to generate key and CSR: %v", err) log.Fatalf("Failed to generate key and CSR: %v", err)
+9 -1
View File
@@ -62,6 +62,7 @@ func main() {
agents := handlers.NewAgentsGroup(h, cmdr) agents := handlers.NewAgentsGroup(h, cmdr)
auth := handlers.AuthGroup{Handlers: h} auth := handlers.AuthGroup{Handlers: h}
agentReg := handlers.NewAgentRegistrationGroup(h) agentReg := handlers.NewAgentRegistrationGroup(h)
agentDeploy := handlers.NewAgentDeployGroup(h)
// Create admin user from config if not exists // Create admin user from config if not exists
if cfg.Admin.Admin_login != "" && cfg.Admin.Admin_password != "" { if cfg.Admin.Admin_login != "" && cfg.Admin.Admin_password != "" {
@@ -74,13 +75,20 @@ func main() {
PermissionView: true, PermissionView: true,
PermissionManage: true, PermissionManage: true,
PermissionAdmin: true, PermissionAdmin: true,
IsActive: true, // Admin user is active by default IsActive: true,
}) })
if err != nil { if err != nil {
log.Printf("Warning: failed to create admin user: %v", err) log.Printf("Warning: failed to create admin user: %v", err)
} else { } else {
log.Println("Admin user created from config") log.Println("Admin user created from config")
} }
} else {
// Ensure existing admin is activated
if err := h.Repo.ActivateUserByLogin(cfg.Admin.Admin_login); err != nil {
log.Printf("Warning: failed to activate admin user: %v", err)
} else {
log.Println("Admin user activated")
}
} }
} }
+7 -2
View File
@@ -26,7 +26,12 @@ var ErrAccountInactive = errors.New("account is not activated")
// Init creates the tokens table if it does not exist. // Init creates the tokens table if it does not exist.
func (r *Repository) Init() error { func (r *Repository) Init() error {
_, err := r.DB.Exec(storage.CreateSqlite) _, err := r.DB.Exec(storage.CreateSqlite)
return err if err != nil {
return err
}
// Migration: add is_active column if it doesn't exist (SQLite ignores errors for duplicate column)
_, _ = r.DB.Exec(storage.AddIsActiveColumn)
return nil
} }
// CreateToken inserts a new user record with hashed password and generated token. // CreateToken inserts a new user record with hashed password and generated token.
@@ -46,7 +51,7 @@ func (r *Repository) CreateToken(tc TokenCreate) (string, error) {
`INSERT INTO tokens (name, last_name, login, password, token, permission_view, permission_manage_agent, permission_admin, is_active) `INSERT INTO tokens (name, last_name, login, password, token, permission_view, permission_manage_agent, permission_admin, is_active)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
tc.Name, tc.LastName, tc.Login, string(hashed), token, tc.Name, tc.LastName, tc.Login, string(hashed), token,
tc.PermissionView, tc.PermissionManage, tc.PermissionAdmin, false, tc.PermissionView, tc.PermissionManage, tc.PermissionAdmin, tc.IsActive,
) )
if err != nil { if err != nil {
return "", err return "", err
+6
View File
@@ -15,6 +15,12 @@ const CreateSqlite = `
); );
` `
// AddIsActiveColumn adds is_active column to tokens table if it doesn't exist.
// This is a migration for existing databases that don't have this column.
const AddIsActiveColumn = `
ALTER TABLE tokens ADD COLUMN is_active BOOL NOT NULL DEFAULT 0
`
const CreateRegistrationTokensTable = ` const CreateRegistrationTokensTable = `
CREATE TABLE IF NOT EXISTS registration_tokens ( CREATE TABLE IF NOT EXISTS registration_tokens (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
+3
View File
@@ -36,5 +36,8 @@ func Open(path string) (*sql.DB, error) {
return nil, fmt.Errorf("migrate: %w", err) return nil, fmt.Errorf("migrate: %w", err)
} }
// Migration: add is_active column if it doesn't exist
_, _ = db.Exec(AddIsActiveColumn)
return db, nil return db, nil
} }