Add radicale and gitea config to schema (#41)

This commit is contained in:
Patrick Stevens
2025-10-12 10:35:07 +01:00
committed by GitHub
parent 3706de1a14
commit d42652dc43
3 changed files with 159 additions and 0 deletions

View File

@@ -5,6 +5,23 @@ open System.Collections.Generic
open System.IO
open Newtonsoft.Json
[<NoComparison>]
type RadicaleConfig =
{
User : string
Password : string
GitEmail : string
}
[<NoComparison>]
type GiteaConfig =
{
ServerPassword : string
AdminPassword : string
AdminEmailAddress : string
AdminUsername : string
}
[<NoComparison>]
type Configuration =
{
@@ -30,6 +47,8 @@ type Configuration =
AcmeEmail : EmailAddress
/// Username for the user account to be created on the server
RemoteUsername : Username
RadicaleConfig : RadicaleConfig option
GiteaConfig : GiteaConfig option
}
member this.PublicKey =
@@ -39,6 +58,61 @@ type Configuration =
let (PrivateKey k) = this.PrivateKey
Path.Combine (k.Directory.FullName, k.Name + ".pub") |> FileInfo |> PublicKey
[<NoComparison>]
type SerialisedRadicaleConfig =
{
[<JsonProperty(Required = Required.Always)>]
User : string
[<JsonProperty(Required = Required.Always)>]
Password : string
[<JsonProperty(Required = Required.Always)>]
GitEmail : string
}
static member Make (config : RadicaleConfig) : SerialisedRadicaleConfig =
{
User = config.User
Password = config.Password
GitEmail = config.GitEmail
}
static member Deserialise (config : SerialisedRadicaleConfig) : RadicaleConfig =
{
User = config.User
Password = config.Password
GitEmail = config.GitEmail
}
[<NoComparison>]
type SerialisedGiteaConfig =
{
[<JsonProperty(Required = Required.Always)>]
ServerPassword : string
[<JsonProperty(Required = Required.Always)>]
AdminPassword : string
[<JsonProperty(Required = Required.Always)>]
AdminEmailAddress : string
[<JsonProperty(Required = Required.Always)>]
AdminUsername : string
}
static member Make (config : GiteaConfig) : SerialisedGiteaConfig =
{
ServerPassword = config.ServerPassword
AdminPassword = config.AdminPassword
AdminEmailAddress = config.AdminEmailAddress
AdminUsername = config.AdminUsername
}
static member Deserialise (config : SerialisedGiteaConfig) : GiteaConfig =
{
ServerPassword = config.ServerPassword
AdminPassword = config.AdminPassword
AdminEmailAddress = config.AdminEmailAddress
AdminUsername = config.AdminUsername
}
[<NoComparison>]
[<RequireQualifiedAccess>]
type SerialisedConfig =
@@ -61,6 +135,10 @@ type SerialisedConfig =
AcmeEmail : string
[<JsonProperty(Required = Required.Always)>]
RemoteUsername : string
[<JsonProperty(Required = Required.Default)>]
RadicaleConfig : SerialisedRadicaleConfig
[<JsonProperty(Required = Required.Default)>]
GiteaConfig : SerialisedGiteaConfig
}
static member Make (config : Configuration) =
@@ -82,6 +160,11 @@ type SerialisedConfig =
Subdomains = config.Subdomains |> Seq.map (fun sub -> sub.ToString ()) |> Seq.toArray
AcmeEmail = config.AcmeEmail.ToString ()
RemoteUsername = config.RemoteUsername.ToString ()
RadicaleConfig =
config.RadicaleConfig
|> Option.map SerialisedRadicaleConfig.Make
|> Option.toObj
GiteaConfig = config.GiteaConfig |> Option.map SerialisedGiteaConfig.Make |> Option.toObj
}
static member Deserialise (config : SerialisedConfig) : Configuration =
@@ -105,6 +188,14 @@ type SerialisedConfig =
| subdomains -> subdomains |> Seq.map WellKnownSubdomain.Parse |> Set.ofSeq
AcmeEmail = config.AcmeEmail |> EmailAddress
RemoteUsername = config.RemoteUsername |> Username
RadicaleConfig =
config.RadicaleConfig
|> Option.ofObj
|> Option.map SerialisedRadicaleConfig.Deserialise
GiteaConfig =
config.GiteaConfig
|> Option.ofObj
|> Option.map SerialisedGiteaConfig.Deserialise
}
[<RequireQualifiedAccess>]

View File

@@ -41,6 +41,72 @@
},
"remoteUsername": {
"type": "string"
},
"radicaleConfig": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/definitions/SerialisedRadicaleConfig"
}
]
},
"giteaConfig": {
"oneOf": [
{
"type": "null"
},
{
"$ref": "#/definitions/SerialisedGiteaConfig"
}
]
}
},
"definitions": {
"SerialisedRadicaleConfig": {
"type": "object",
"additionalProperties": false,
"required": [
"user",
"password",
"gitEmail"
],
"properties": {
"user": {
"type": "string"
},
"password": {
"type": "string"
},
"gitEmail": {
"type": "string"
}
}
},
"SerialisedGiteaConfig": {
"type": "object",
"additionalProperties": false,
"required": [
"serverPassword",
"adminPassword",
"adminEmailAddress",
"adminUsername"
],
"properties": {
"serverPassword": {
"type": "string"
},
"adminPassword": {
"type": "string"
},
"adminEmailAddress": {
"type": "string"
},
"adminUsername": {
"type": "string"
}
}
}
}
}