mirror of
https://github.com/bakito/adguardhome-sync.git
synced 2025-10-04 03:54:23 +08:00
106 lines
2.8 KiB
Go
106 lines
2.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
)
|
|
|
|
func main() {
|
|
version := "master"
|
|
fileName := "schema-master.yaml"
|
|
if len(os.Args) > 1 {
|
|
version = os.Args[1]
|
|
fileName = "schema.yaml"
|
|
}
|
|
log.Printf("Patching schema version %s\n", version)
|
|
|
|
ctx := context.Background() // Or use context.WithTimeout
|
|
req, err := http.NewRequestWithContext(
|
|
ctx,
|
|
http.MethodGet,
|
|
fmt.Sprintf("https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/%s/openapi/openapi.yaml", version),
|
|
http.NoBody,
|
|
)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
client := &http.Client{}
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
defer func() { _ = resp.Body.Close() }()
|
|
data, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
schema := make(map[string]any)
|
|
err = yaml.Unmarshal(data, &schema)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
|
|
if requestBodies, ok, _ := unstructured.NestedMap(schema, "components", "requestBodies"); ok {
|
|
for k := range requestBodies {
|
|
_ = unstructured.SetNestedField(schema, k+"Body", "components", "requestBodies", k, "x-go-name")
|
|
}
|
|
}
|
|
|
|
if dnsInfo, ok, _ := unstructured.NestedMap(schema,
|
|
"paths", "/dns_info", "get", "responses", "200", "content", "application/json", "schema"); ok {
|
|
if allOf, ok, _ := unstructured.NestedSlice(dnsInfo, "allOf"); ok && len(allOf) == 2 {
|
|
delete(dnsInfo, "allOf")
|
|
//nolint:forcetypeassert
|
|
if err := unstructured.SetNestedMap(schema, allOf[0].(map[string]any),
|
|
"paths", "/dns_info", "get", "responses", "200", "content", "application/json", "schema"); err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
correctEntries(schema)
|
|
|
|
addFakeTags(schema)
|
|
|
|
b, err := yaml.Marshal(&schema)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
log.Printf("Writing schema file tmp/%s", fileName)
|
|
err = os.WriteFile("tmp/"+fileName, b, 0o600)
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
}
|
|
|
|
func correctEntries(schema map[string]any) {
|
|
}
|
|
|
|
func addFakeTags(schema map[string]any) {
|
|
fake := map[string]any{"faker": `slice_len=24`}
|
|
if err := unstructured.SetNestedMap(schema, fake, "components", "schemas", "Stats", "properties", "blocked_filtering", "x-oapi-codegen-extra-tags"); err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
if err := unstructured.SetNestedMap(schema, fake, "components", "schemas", "Stats", "properties", "dns_queries", "x-oapi-codegen-extra-tags"); err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
if err := unstructured.SetNestedMap(schema, fake, "components", "schemas", "Stats", "properties", "replaced_parental", "x-oapi-codegen-extra-tags"); err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
if err := unstructured.SetNestedMap(schema, fake, "components", "schemas", "Stats", "properties", "replaced_safebrowsing", "x-oapi-codegen-extra-tags"); err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
}
|