master
go 41 lines 770 Bytes
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package httpsd
4
5 import (
6 "encoding/json"
7 "fmt"
8 "net/url"
9 )
10
11 func sourceString(cfg Config) string {
12 src := fmt.Sprintf("discoverer=%s,url=%s,hash=%x", shortName, sanitizedURL(cfg.URL), sourceHash(cfg))
13 if cfg.Source != "" {
14 src += fmt.Sprintf(",%s", cfg.Source)
15 }
16 return src
17 }
18
19 func sanitizedURL(rawURL string) string {
20 u, err := url.Parse(rawURL)
21 if err != nil {
22 return rawURL
23 }
24 u.User = nil
25 u.RawQuery = ""
26 u.Fragment = ""
27 return u.String()
28 }
29
30 func sourceHash(cfg Config) uint64 {
31 type identity struct {
32 HTTPConfig any `json:"http_config"`
33 Format string `json:"format"`
34 }
35
36 bs, _ := json.Marshal(identity{
37 HTTPConfig: cfg.HTTPConfig,
38 Format: cfg.format(),
39 })
40 return hashBytes(bs)
41 }