using System; using System.Collections.Generic; using System.Text.Json.Serialization; namespace Deploymentcenter.Client.Models { /// /// Beschreibt, was eine Anwendung zum Laufen braucht - als Datei /// setup.json im Wurzelverzeichnis des Pakets, neben der /// manifest.json. /// /// Bewusst im Paket und nicht zentral im Deploymentcenter: so ist die /// Beschreibung mit der Anwendung versioniert. Braucht Version 2.0 ein /// Feld mehr als 1.9, stimmt es automatisch - eine zweite Pflegestelle /// wuerde frueher oder spaeter auseinanderlaufen. /// /// Fehlt die Datei, laesst sich die Anwendung trotzdem installieren; der /// Installer entpackt sie dann nur und fragt nichts ab. /// public class SetupDefinition { /// Format-Version dieser Datei. [JsonPropertyName("schema")] public int Schema { get; set; } = 1; /// Anzeigename, sonst wird der Projekt-Slug verwendet. [JsonPropertyName("displayName")] public string DisplayName { get; set; } = string.Empty; /// Kurzer Hinweistext, der vor der Abfrage angezeigt wird. [JsonPropertyName("description")] public string Description { get; set; } = string.Empty; /// Wohin die ermittelten Werte geschrieben werden. [JsonPropertyName("targets")] public List Targets { get; set; } = new List(); /// Die benoetigten Werte. [JsonPropertyName("fields")] public List Fields { get; set; } = new List(); } /// Eine Datei, in die Werte geschrieben werden. public class SetupTarget { /// Pfad relativ zum Installationsverzeichnis. [JsonPropertyName("file")] public string File { get; set; } = string.Empty; /// "json" oder "env". [JsonPropertyName("format")] public string Format { get; set; } = "json"; /// /// Kennung, ueber die Felder dieser Datei zugeordnet werden. Ohne /// Angabe schreiben alle Felder in das erste Ziel. /// [JsonPropertyName("id")] public string Id { get; set; } = string.Empty; } /// Ein einzelner Konfigurationswert. public class SetupField { /// /// Schluessel im Ziel. Bei JSON trennt ein Doppelpunkt die Ebenen /// ("ConnectionStrings:Main"), passend zur Schreibweise von /// Microsoft.Extensions.Configuration. /// [JsonPropertyName("key")] public string Key { get; set; } = string.Empty; /// Beschriftung fuer die Abfrage. [JsonPropertyName("label")] public string Label { get; set; } = string.Empty; /// Erlaeuterung, die unter der Frage steht. [JsonPropertyName("help")] public string Help { get; set; } = string.Empty; /// string | secret | url | int | bool | enum [JsonPropertyName("type")] public string Type { get; set; } = "string"; /// Muss ein Wert vorliegen? [JsonPropertyName("required")] public bool Required { get; set; } = true; /// Vorbelegung. [JsonPropertyName("default")] public string Default { get; set; } = string.Empty; /// /// Woher der Wert kommt, wenn nicht gefragt werden soll: /// detect:hostname | detect:platform | detect:installdir | detect:username /// provision - Token beim Deploymentcenter anfordern /// ask - Vorgabe: nachfragen /// [JsonPropertyName("source")] public string Source { get; set; } = "ask"; /// Rechte fuer source = provision. [JsonPropertyName("scopes")] public List Scopes { get; set; } = new List(); /// Auswahlmoeglichkeiten fuer type = enum. [JsonPropertyName("options")] public List Options { get; set; } = new List(); /// Regulaerer Ausdruck, gegen den der Wert geprueft wird. [JsonPropertyName("validate")] public string Validate { get; set; } = string.Empty; /// Meldung, wenn die Pruefung fehlschlaegt. [JsonPropertyName("validationMessage")] public string ValidationMessage { get; set; } = string.Empty; /// Kennung des Ziels aus . [JsonPropertyName("target")] public string Target { get; set; } = string.Empty; /// Wird der Wert verdeckt eingegeben und nicht angezeigt? [JsonIgnore] public bool IsSecret => string.Equals(Type, "secret", StringComparison.OrdinalIgnoreCase) || string.Equals(Source, "provision", StringComparison.OrdinalIgnoreCase); } }