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")
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 {
return err
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cmdexe := new(commander.CommandExecutor)
ccli := client.New(cmdexe, cfg.RegistrationToken, cfg.Label)
return ccli.HandleCommands(ctx, cfg.BackendURL, creds)
ccli := client.New(cmdexe, cfg.Label, cfg.Label)
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 {
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)
auth := handlers.AuthGroup{Handlers: h}
agentReg := handlers.NewAgentRegistrationGroup(h)
agentDeploy := handlers.NewAgentDeployGroup(h)
// Create admin user from config if not exists
if cfg.Admin.Admin_login != "" && cfg.Admin.Admin_password != "" {
@@ -74,13 +75,20 @@ func main() {
PermissionView: true,
PermissionManage: true,
PermissionAdmin: true,
IsActive: true, // Admin user is active by default
IsActive: true,
})
if err != nil {
log.Printf("Warning: failed to create admin user: %v", err)
} else {
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.
func (r *Repository) Init() error {
_, 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.
@@ -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)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
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 {
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 = `
CREATE TABLE IF NOT EXISTS registration_tokens (
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)
}
// Migration: add is_active column if it doesn't exist
_, _ = db.Exec(AddIsActiveColumn)
return db, nil
}