Some checks failed
Build and Publish Docker Image / build-and-push (push) Has been cancelled
- Implemented CreateInstanceView for creating new instances. - Added HostsView for managing SSH hosts with CRUD operations. - Created InstancesView for displaying and managing instances. - Developed LogsView for viewing operation logs. - Introduced SecretsView for managing secrets associated with hosts. - Established SettingsView for configuring application settings. - Created MainWindow as the main application window with navigation. - Added app manifest and configuration files for logging and settings.
117 lines
5.1 KiB
C#
117 lines
5.1 KiB
C#
namespace OTSSignsOrchestrator.Configuration;
|
|
|
|
public class FileLoggingOptions
|
|
{
|
|
public const string SectionName = "FileLogging";
|
|
public bool Enabled { get; set; } = true;
|
|
public string Path { get; set; } = "/var/log/xibo-admin";
|
|
public string RollingInterval { get; set; } = "Day";
|
|
public int RetentionDays { get; set; } = 30;
|
|
public long FileSizeLimitBytes { get; set; } = 100 * 1024 * 1024; // 100MB
|
|
}
|
|
|
|
public class AuthenticationOptions
|
|
{
|
|
public const string SectionName = "Authentication";
|
|
public string LocalAdminToken { get; set; } = string.Empty;
|
|
}
|
|
|
|
public class GitOptions
|
|
{
|
|
public const string SectionName = "Git";
|
|
public string CacheDir { get; set; } = "/var/cache/xibo-admin-templates";
|
|
public int CacheTtlMinutes { get; set; } = 60;
|
|
public int ShallowCloneDepth { get; set; } = 1;
|
|
}
|
|
|
|
public class DockerOptions
|
|
{
|
|
public const string SectionName = "Docker";
|
|
public string SocketPath { get; set; } = "unix:///var/run/docker.sock";
|
|
public List<string> DefaultConstraints { get; set; } = new() { "node.labels.xibo==true" };
|
|
public int DeployTimeoutSeconds { get; set; } = 30;
|
|
public bool ValidateBeforeDeploy { get; set; } = true;
|
|
}
|
|
|
|
public class XiboDefaultImages
|
|
{
|
|
public string Cms { get; set; } = "ghcr.io/xibosignage/xibo-cms:release-4.4.0";
|
|
public string Mysql { get; set; } = "mysql:8.4";
|
|
public string Memcached { get; set; } = "memcached:alpine";
|
|
public string QuickChart { get; set; } = "ianw/quickchart";
|
|
}
|
|
|
|
public class XiboOptions
|
|
{
|
|
public const string SectionName = "Xibo";
|
|
public XiboDefaultImages DefaultImages { get; set; } = new();
|
|
public int TestConnectionTimeoutSeconds { get; set; } = 10;
|
|
}
|
|
|
|
public class DatabaseOptions
|
|
{
|
|
public const string SectionName = "Database";
|
|
public string Provider { get; set; } = "Sqlite"; // Sqlite or PostgreSQL
|
|
}
|
|
|
|
/// <summary>
|
|
/// Admin-level MySQL connection used by the orchestrator to provision new customer databases.
|
|
/// Credentials are stored in app settings (encrypted at rest via Data Protection where available).
|
|
/// The generated per-customer password is NEVER stored here — it is placed directly into a Docker secret.
|
|
/// </summary>
|
|
public class MySqlAdminOptions
|
|
{
|
|
public const string SectionName = "MySqlAdmin";
|
|
public string Host { get; set; } = "localhost";
|
|
public int Port { get; set; } = 3306;
|
|
public string AdminUser { get; set; } = "root";
|
|
public string AdminPassword { get; set; } = string.Empty;
|
|
/// <summary>If true, treat TLS/cert errors as non-fatal (useful for self-signed certs in dev).</summary>
|
|
public bool AllowInsecureTls { get; set; } = false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// CIFS volume settings applied to every named Docker volume created for a new instance.
|
|
/// The credentials file on the remote host is written ephemerally via SSH and deleted immediately after
|
|
/// the docker volume create command completes.
|
|
/// </summary>
|
|
public class CifsOptions
|
|
{
|
|
public const string SectionName = "Cifs";
|
|
/// <summary>UNC-style device path, e.g. //fileserver.local/xibo-data</summary>
|
|
public string Device { get; set; } = string.Empty;
|
|
/// <summary>Hostname/IP of the CIFS server for the addr= mount option.</summary>
|
|
public string ServerAddr { get; set; } = string.Empty;
|
|
public string Username { get; set; } = string.Empty;
|
|
public string Password { get; set; } = string.Empty;
|
|
public string MountOptions { get; set; } = "vers=3.0,file_mode=0660,dir_mode=0770";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Defaults sourced from the Settings page, used to pre-populate or complete instance creation
|
|
/// without requiring the operator to retype them every time.
|
|
/// </summary>
|
|
public class InstanceDefaultsOptions
|
|
{
|
|
public const string SectionName = "InstanceDefaults";
|
|
/// <summary>Default Git template repo URL (operator can override per-instance).</summary>
|
|
public string TemplateRepoUrl { get; set; } = string.Empty;
|
|
public string? TemplateRepoPat { get; set; }
|
|
/// <summary>Template for CMS_SERVER_NAME. Use {abbrev} as placeholder, e.g. "{abbrev}x.ots-signs.com".</summary>
|
|
public string CmsServerNameTemplate { get; set; } = "{abbrev}.ots-signs.com";
|
|
public string SmtpServer { get; set; } = string.Empty;
|
|
public string SmtpUsername { get; set; } = string.Empty;
|
|
public string SmtpPassword { get; set; } = string.Empty;
|
|
/// <summary>Base host HTTP port; each new instance auto-increments from this value.</summary>
|
|
public int BaseHostHttpPort { get; set; } = 8080;
|
|
/// <summary>Template for the theme host path. Use {abbrev} as placeholder.</summary>
|
|
/// <summary>Static host path for the theme volume mount. Overridable per-instance.</summary>
|
|
public string ThemeHostPath { get; set; } = "/cms/ots-theme";
|
|
/// <summary>Template for the library CIFS volume sub-path. Use {abbrev} as placeholder.</summary>
|
|
public string LibraryShareSubPath { get; set; } = "{abbrev}-cms-library";
|
|
/// <summary>MySQL database name template. Use {abbrev}.</summary>
|
|
public string MySqlDatabaseTemplate { get; set; } = "{abbrev}_cms_db";
|
|
/// <summary>MySQL username template. Use {abbrev}.</summary>
|
|
public string MySqlUserTemplate { get; set; } = "{abbrev}_cms";
|
|
}
|