nginx-proxy-manager/backend/internal/api/schema/create_dns_provider.go

60 lines
1.3 KiB
Go
Raw Normal View History

package schema
import (
"fmt"
"strings"
"npm/internal/dnsproviders"
"npm/internal/logger"
"npm/internal/util"
2023-02-24 07:19:07 +00:00
"github.com/rotisserie/eris"
)
// CreateDNSProvider is the schema for incoming data validation
func CreateDNSProvider() string {
allProviders := dnsproviders.GetAll()
fmtStr := fmt.Sprintf(`{"oneOf": [%s]}`, strings.TrimRight(strings.Repeat("\n%s,", len(allProviders)), ","))
allSchemasWrapped := make([]string, 0)
for providerName, provider := range allProviders {
schema, err := provider.GetJsonSchema()
if err != nil {
2023-02-24 07:19:07 +00:00
logger.Error("ProviderSchemaError", eris.Wrapf(err, "Invalid Provider Schema for %s: %v", provider.Title, err))
} else {
allSchemasWrapped = append(allSchemasWrapped, createDNSProviderType(providerName, schema))
}
}
return fmt.Sprintf(fmtStr, util.ConvertStringSliceToInterface(allSchemasWrapped)...)
}
func createDNSProviderType(name, metaSchema string) string {
return fmt.Sprintf(`
{
"type": "object",
"additionalProperties": false,
"required": [
"acmesh_name",
"name",
"meta"
],
"properties": {
"acmesh_name": {
"type": "string",
"pattern": "^%s$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"dns_sleep": {
"type": "integer"
},
"meta": %s
}
}
`, name, metaSchema)
}