/ main.go
main.go
1 package main 2 3 import ( 4 "encoding/json" 5 "log" 6 "os" 7 "regexp" 8 "text/template" 9 "time" 10 11 "github.com/ethereum/go-ethereum/common" 12 "github.com/ethereum/go-ethereum/ethclient" 13 "github.com/sirupsen/logrus" 14 bloxy "myrandomdemo.online/bloxy/pkg" 15 ) 16 17 const CADDYFILE = "Caddyfile" 18 19 type Config struct { 20 Name string `json:"name"` 21 Domain string `json:"domain"` 22 Target string `json:"target"` 23 } 24 25 func getenvDefault(key string, defaultVal string) string { 26 val, ok := os.LookupEnv(key) 27 if !ok { 28 return defaultVal 29 } 30 31 return val 32 } 33 34 func filterInvalid(entries []bloxy.BloxyEntry) ([]bloxy.BloxyEntry, error) { 35 filtered := []bloxy.BloxyEntry{} 36 r, err := regexp.Compile("^[a-z0-9-]+$") 37 if err != nil { 38 return filtered, err 39 } 40 41 for _, e := range entries { 42 if e.Domain == "" && !r.MatchString(e.Name) { 43 continue 44 } 45 46 filtered = append(filtered, e) 47 48 } 49 50 return filtered, nil 51 } 52 53 func main() { 54 t := time.NewTicker(10 * time.Second) 55 56 input := getenvDefault("BLOXY_INPUT", "") 57 tpl := getenvDefault("BLOXY_TEMPLATE", "template.tpl") 58 rpcURL := getenvDefault("BLOXY_RPC_URL", "https://gateway.tenderly.co/public/sepolia") 59 contract := getenvDefault("BLOXY_CONTRACT", "") 60 61 client, err := ethclient.Dial(rpcURL) 62 if err != nil { 63 log.Fatal(err) 64 } 65 66 address := common.HexToAddress(contract) 67 68 b, err := bloxy.NewBloxy(address, client) 69 if err != nil { 70 log.Fatal(err) 71 } 72 73 for range t.C { 74 entries := []bloxy.BloxyEntry{} 75 var err error 76 if len(input) > 0 { 77 78 data, err := os.ReadFile(input) 79 if err != nil { 80 logrus.Errorln(err) 81 continue 82 } 83 err = json.Unmarshal(data, &entries) 84 if err != nil { 85 logrus.Errorln(err) 86 continue 87 } 88 } else { 89 entries, err = b.GetValid(nil) 90 if err != nil { 91 logrus.Errorln(err) 92 continue 93 } 94 } 95 96 entries, err = filterInvalid(entries) 97 if err != nil { 98 logrus.Errorln(err) 99 continue 100 } 101 102 var tmplFile = tpl 103 tmpl, err := template.New(tmplFile).ParseFiles(tmplFile) 104 if err != nil { 105 logrus.Errorln(err) 106 continue 107 } 108 109 f, err := os.Create(CADDYFILE) 110 if err != nil { 111 logrus.Errorln(err) 112 continue 113 } 114 err = tmpl.Execute(f, entries) 115 if err != nil { 116 logrus.Errorln(err) 117 continue 118 } 119 120 err = f.Close() 121 if err != nil { 122 logrus.Errorln(err) 123 continue 124 } 125 126 logrus.Infoln("Successfully generated Caddyfile") 127 } 128 }