Files
David Garcia e70700a189 Add new features: WebhookCaptureWindow, Magic App Finder, Refresh Token Spray, Gather All
New windows:
- WebhookCaptureWindow: Built-in HTTP listener for token capture with PRT detection
- MagicAppFinderWindow: Find OAuth consent abuse vulnerabilities (AllPrincipals)
- RefreshTokenSprayWindow: Test refresh tokens against 400+ Microsoft app IDs
- GatherAllWindow: Bulk enumeration of 12 Graph API endpoints
- SPNLoginWindow: Service Principal login with client credentials

New helpers:
- apps.json: 400+ Microsoft first-party app IDs
- auth_apps.json: Curated apps for spray attacks
- GrabTokenAzureAD: C# OAuth implant for token capture
- Get-UserPRTTokenWebHook.ps1: PRT extraction via webhook

Build improvements:
- Preserve database files during clean builds
- Remove obsolete build_all.sh
2026-06-04 13:19:40 -06:00

94 lines
3.2 KiB
C++

#ifndef CONFIG_H
#define CONFIG_H
#include <QString>
#include <QSettings>
/**
* Centralized configuration for ANIMO
* Provides type-safe access to timeouts, limits, and other configurable values
* Values can be overridden via QSettings or environment variables
*/
class Config {
public:
// Singleton access
static Config& instance();
// Network timeouts (milliseconds)
int socketConnectTimeoutMs() const { return m_socketConnectTimeoutMs; }
int loginTimeoutMs() const { return m_loginTimeoutMs; }
int httpRequestTimeoutMs() const { return m_httpRequestTimeoutMs; }
int processStartTimeoutMs() const { return m_processStartTimeoutMs; }
int sprayRequestTimeoutMs() const { return m_sprayRequestTimeoutMs; }
// Database settings
int dbBusyTimeoutMs() const { return m_dbBusyTimeoutMs; }
int dbQueryPageSize() const { return m_dbQueryPageSize; }
// UI settings
int tokenExpiryWarningMinutes() const { return m_tokenExpiryWarningMinutes; }
int sessionRefreshIntervalMs() const { return m_sessionRefreshIntervalMs; }
int maxEmailHtmlBytes() const { return m_maxEmailHtmlBytes; }
// Azure/Microsoft settings
QString defaultClientId() const { return m_defaultClientId; }
// Reconnection settings
int maxReconnectAttempts() const { return m_maxReconnectAttempts; }
int reconnectDelayMs() const { return m_reconnectDelayMs; }
// Buffer sizes
int outputBufferMaxSize() const { return m_outputBufferMaxSize; }
// Load settings from QSettings (call once at startup)
void loadFromSettings();
// Save current settings
void saveToSettings();
// Setters (for runtime configuration)
void setSocketConnectTimeoutMs(int ms) { m_socketConnectTimeoutMs = qBound(1000, ms, 120000); }
void setLoginTimeoutMs(int ms) { m_loginTimeoutMs = qBound(1000, ms, 120000); }
void setDefaultClientId(const QString &id) { m_defaultClientId = id; }
void setTokenExpiryWarningMinutes(int mins) { m_tokenExpiryWarningMinutes = qBound(1, mins, 1440); }
void setDbQueryPageSize(int size) { m_dbQueryPageSize = qBound(10, size, 10000); }
void setMaxEmailHtmlBytes(int bytes) { m_maxEmailHtmlBytes = qBound(1024, bytes, 10485760); }
private:
Config();
~Config() = default;
Config(const Config&) = delete;
Config& operator=(const Config&) = delete;
// Network timeouts
int m_socketConnectTimeoutMs = 3000;
int m_loginTimeoutMs = 5000;
int m_httpRequestTimeoutMs = 10000;
int m_processStartTimeoutMs = 4000;
int m_sprayRequestTimeoutMs = 8000;
// Database
int m_dbBusyTimeoutMs = 5000;
int m_dbQueryPageSize = 100;
// UI
int m_tokenExpiryWarningMinutes = 15;
int m_sessionRefreshIntervalMs = 30000;
int m_maxEmailHtmlBytes = 1048576; // 1MB
// Azure
QString m_defaultClientId = "1950a258-227b-4e31-a9cf-717495945fc2";
// Reconnection
int m_maxReconnectAttempts = 5;
int m_reconnectDelayMs = 5000;
// Buffers
int m_outputBufferMaxSize = 1048576; // 1MB
};
// Convenience macro for quick access
#define APP_CONFIG Config::instance()
#endif // CONFIG_H