Search/open-search.go

62 lines
1.5 KiB
Go
Raw Normal View History

2024-06-12 12:26:50 +00:00
package main
import (
"encoding/xml"
"fmt"
"os"
2024-08-08 13:05:05 +00:00
"strings"
2024-06-12 12:26:50 +00:00
)
type OpenSearchDescription struct {
XMLName xml.Name `xml:"OpenSearchDescription"`
Xmlns string `xml:"xmlns,attr"`
ShortName string `xml:"ShortName"`
Description string `xml:"Description"`
Tags string `xml:"Tags"`
URL URL `xml:"Url"`
}
type URL struct {
Type string `xml:"type,attr"`
Template string `xml:"template,attr"`
}
2024-08-08 13:05:05 +00:00
// isLocalAddress checks if the domain is a local address
func isLocalAddress(domain string) bool {
return domain == "localhost" || strings.HasPrefix(domain, "127.") || strings.HasPrefix(domain, "192.168.") || strings.HasPrefix(domain, "10.")
}
2024-06-12 12:26:50 +00:00
func generateOpenSearchXML(config Config) {
2024-08-08 13:05:05 +00:00
protocol := "https://"
if isLocalAddress(config.Domain) {
protocol = "http://"
}
2024-06-12 12:26:50 +00:00
opensearch := OpenSearchDescription{
Xmlns: "http://a9.com/-/spec/opensearch/1.1/",
ShortName: "Ocásek",
Description: "Search engine",
Tags: "search, engine",
URL: URL{
Type: "text/html",
2024-08-08 13:05:05 +00:00
Template: fmt.Sprintf("%s%s/search?q={searchTerms}", protocol, config.Domain),
2024-06-12 12:26:50 +00:00
},
}
file, err := os.Create("static/opensearch.xml")
if err != nil {
fmt.Println("Error creating OpenSearch file:", err)
return
}
defer file.Close()
enc := xml.NewEncoder(file)
enc.Indent(" ", " ")
if err := enc.Encode(opensearch); err != nil {
fmt.Println("Error encoding OpenSearch XML:", err)
return
}
fmt.Println("OpenSearch description file generated successfully.")
}