| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #include "user_manager.h"
- #include "auth_middleware.h"
- #include "pam_auth.h"
- #include <httplib.h>
- #include <iostream>
- #include <memory>
- #include <nlohmann/json.hpp>
- using json = nlohmann::json;
- int main() {
- std::cout << "Testing Unix+PAM Authentication Integration\n";
- std::cout << "==========================================\n\n";
- // Create test data directory
- std::string dataDir = "./test-auth-data";
- // Test 1: Unix authentication without PAM
- std::cout << "Test 1: Unix authentication without PAM\n";
- {
- auto userManager = std::make_shared<UserManager>(dataDir, UserManager::AuthMethod::UNIX, true);
- userManager->setPamAuthEnabled(false);
- if (!userManager->initialize()) {
- std::cerr << "Failed to initialize UserManager\n";
- return 1;
- }
- // Test with existing system user (should work without password)
- auto result = userManager->authenticateUnix("root", "");
- if (result.success) {
- std::cout << "✓ Unix auth without PAM: SUCCESS\n";
- std::cout << " User: " << result.username << ", Role: " << result.role << "\n";
- } else {
- std::cout << "✗ Unix auth without PAM: FAILED - " << result.errorMessage << "\n";
- }
- }
- std::cout << "\n";
- // Test 2: Unix authentication with PAM (if available)
- std::cout << "Test 2: Unix authentication with PAM\n";
- {
- auto userManager = std::make_shared<UserManager>(dataDir, UserManager::AuthMethod::UNIX, true);
- userManager->setPamAuthEnabled(true);
- if (!userManager->initialize()) {
- std::cerr << "Failed to initialize UserManager\n";
- return 1;
- }
- // Check if PAM is actually available
- if (userManager->isPamAuthEnabled()) {
- std::cout << "✓ PAM is enabled\n";
- // Test with password (will fail if user doesn't exist or password is wrong)
- auto result = userManager->authenticateUnix("testuser", "testpass");
- if (result.success) {
- std::cout << "✓ Unix auth with PAM: SUCCESS\n";
- std::cout << " User: " << result.username << ", Role: " << result.role << "\n";
- } else {
- std::cout << "✗ Unix auth with PAM: FAILED - " << result.errorMessage << "\n";
- std::cout << " (This is expected if testuser doesn't exist or password is wrong)\n";
- }
- } else {
- std::cout << "✗ PAM is not available - skipping test\n";
- }
- }
- std::cout << "\n";
- // Test 3: AuthMiddleware Unix authentication
- std::cout << "Test 3: AuthMiddleware Unix authentication\n";
- {
- AuthConfig config;
- config.authMethod = AuthMethod::UNIX;
- config.authRealm = "test-realm";
- auto userManager = std::make_shared<UserManager>(dataDir, UserManager::AuthMethod::UNIX, true);
- userManager->setPamAuthEnabled(true);
- userManager->initialize();
- auto authMiddleware = std::make_unique<AuthMiddleware>(config, userManager);
- authMiddleware->initialize();
- // Test JSON parsing for login endpoint (simulate what server does)
- json loginRequest = {
- {"username", "testuser"},
- {"password", "testpass"}
- };
- std::cout << "✓ AuthMiddleware can handle JSON login requests\n";
- std::cout << " Request body: " << loginRequest.dump() << "\n";
- // Note: We can't directly test authenticateUnix as it's private,
- // but we can verify the UserManager integration works
- auto result = userManager->authenticateUnix("testuser", "testpass");
- if (result.success) {
- std::cout << "✓ UserManager Unix+PAM auth: SUCCESS\n";
- std::cout << " User: " << result.username << ", Role: " << result.role << "\n";
- } else {
- std::cout << "✗ UserManager Unix+PAM auth: FAILED - " << result.errorMessage << "\n";
- std::cout << " (This is expected if testuser doesn't exist or password is wrong)\n";
- }
- }
- std::cout << "\n";
- // Test 4: Verify authentication method configuration
- std::cout << "Test 4: Authentication method configuration\n";
- {
- auto userManager = std::make_shared<UserManager>(dataDir, UserManager::AuthMethod::UNIX, true);
- std::cout << "✓ Unix auth enabled: " << (userManager->isUnixAuthEnabled() ? "YES" : "NO") << "\n";
- userManager->setPamAuthEnabled(true);
- std::cout << "✓ PAM auth enabled: " << (userManager->isPamAuthEnabled() ? "YES" : "NO") << "\n";
- userManager->setPamAuthEnabled(false);
- std::cout << "✓ PAM auth disabled: " << (userManager->isPamAuthEnabled() ? "YES" : "NO") << "\n";
- }
- std::cout << "\nIntegration tests completed!\n";
- return 0;
- }
|