/ 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  }