diff --git a/internal/gen-known-logs/Makefile b/internal/gen-known-logs/Makefile deleted file mode 100644 index a647e42..0000000 --- a/internal/gen-known-logs/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -.PHONY: ctlogs - -ctlogs: - go run github.com/square/certigo/internal/gen-known-logs --package lib > ../../lib/ctlogs.go - go fmt ../../lib/ctlogs.go diff --git a/internal/gen-known-logs/README.md b/internal/gen-known-logs/README.md index dc0790a..2c1a41f 100644 --- a/internal/gen-known-logs/README.md +++ b/internal/gen-known-logs/README.md @@ -6,4 +6,4 @@ Logs are fetched parsed from https://www.gstatic.com/ct/log_list/v2/all_logs_lis ## Usage -From the current directory (`certigo/internal/gen-known-logs`), run `make ctlogs`. This will fetch the list of logs and place generated code in [lib/ctlogs.go](../../lib/ctlogs.go). \ No newline at end of file +Run `go generate ./...` to regenerate known logs. \ No newline at end of file diff --git a/internal/gen-known-logs/main.go b/internal/gen-known-logs/main.go index e0a425b..3446992 100644 --- a/internal/gen-known-logs/main.go +++ b/internal/gen-known-logs/main.go @@ -6,10 +6,13 @@ import ( "fmt" "log" "net/http" + "os" "time" ) -var packageName = flag.String("package", "lib", "Package for the generated code") +var ( + out = flag.String("out", "", "Output file") +) // https://github.com/google/certificate-transparency-community-site/blob/master/docs/google/known-logs.md const knownLogsAddr = "https://www.gstatic.com/ct/log_list/v2/all_logs_list.json" @@ -24,8 +27,7 @@ func main() { resp, err := http.Get(knownLogsAddr) if err != nil { - log.Printf("Failed to fetch the list of known CT logs: %v", err) - return + log.Fatalf("Failed to fetch the list of known CT logs: %v", err) } defer resp.Body.Close() @@ -40,11 +42,16 @@ func main() { } if err := json.NewDecoder(resp.Body).Decode(&logs); err != nil { - log.Printf("Failed to parse the list of known CT logs: %v", err) - return + log.Fatalf("Failed to parse the list of known CT logs: %v", err) } - fmt.Printf(`// Autogenerated with github.com/square/certigo/internal/gen-known-logs + f, err := os.Create(*out) + if err != nil { + log.Fatalf("Failed to open file %s", *out) + } + defer f.Close() + + fmt.Fprintf(f, `// Code generated by github.com/square/certigo/internal/gen-known-logs; DO NOT EDIT // Generated at %s package %s @@ -54,16 +61,16 @@ type ctLog struct { } var knownLogs = map[string]*ctLog{ -`, time.Now().Format(time.RFC3339), *packageName) +`, time.Now().Format(time.RFC3339), os.Getenv("GOPACKAGE")) knownLogs := make(map[string]*ctLog) for _, op := range logs.Operators { for _, l := range op.Logs { - fmt.Printf("\t%q: {operator: %q, url: %q},\n", l.ID, op.Name, l.URL) + fmt.Fprintf(f, "\t%q: {operator: %q, url: %q},\n", l.ID, op.Name, l.URL) knownLogs[l.ID] = &ctLog{ operator: op.Name, url: l.URL, } } } - fmt.Println("}") + fmt.Fprintln(f, "}") } diff --git a/lib/ct.go b/lib/ct.go index e32fbc3..bb3f89e 100644 --- a/lib/ct.go +++ b/lib/ct.go @@ -11,6 +11,9 @@ import ( ctutil "github.com/google/certificate-transparency-go/x509util" ) +//go:generate go run github.com/square/certigo/internal/gen-known-logs --out ctlogs.go +//go:generate go fmt ctlogs.go + func parseSCTList(cert *x509.Certificate) []*simpleSCT { // ctutil contains a fork of crypto/x509 with support for SCTs. We must re-parse the // whole certificate to get at them, so do a quick check to see if the SCT extension diff --git a/lib/ctlogs.go b/lib/ctlogs.go index ab44721..f9d2b6f 100644 --- a/lib/ctlogs.go +++ b/lib/ctlogs.go @@ -1,5 +1,5 @@ -// Autogenerated with github.com/square/certigo/internal/gen-known-logs -// Generated at 2022-06-29T17:31:27-07:00 +// Code generated by github.com/square/certigo/internal/gen-known-logs; DO NOT EDIT +// Generated at 2022-06-29T22:18:11-07:00 package lib type ctLog struct {