fix: mtls for agent, problems with auth
This commit is contained in:
+13
-3
@@ -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
@@ -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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,13 @@ 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)
|
||||||
|
if err != nil {
|
||||||
return err
|
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.
|
||||||
// New users are created with is_active=false by default.
|
// New users are created with is_active=false by default.
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user