Skip to content
Snippets Groups Projects
Unverified Commit 8139fdd3 authored by Max Adamo's avatar Max Adamo
Browse files

fix: correct API URL paths for ACME providers

parent f463794f
No related branches found
No related tags found
No related merge requests found
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"encoding/pem" "encoding/pem"
"errors" "errors"
"fmt" "fmt"
"log"
"os" "os"
"path/filepath" "path/filepath"
"sort" "sort"
...@@ -14,6 +15,21 @@ import ( ...@@ -14,6 +15,21 @@ import (
"time" "time"
) )
var (
DebugLogger *log.Logger
InfoLogger *log.Logger
WarningLogger *log.Logger
ErrorLogger *log.Logger
verboseBool bool
)
func init() {
DebugLogger = log.New(os.Stdout, "DEBUG: ", log.Ldate|log.Ltime)
InfoLogger = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime)
WarningLogger = log.New(os.Stdout, "WARNING: ", log.Ldate|log.Ltime)
ErrorLogger = log.New(os.Stdout, "ERROR: ", log.Ldate|log.Ltime)
}
type CertificateData struct { type CertificateData struct {
CertName string `json:"certname"` CertName string `json:"certname"`
SerialNumber string `json:"serial_number"` SerialNumber string `json:"serial_number"`
...@@ -22,7 +38,10 @@ type CertificateData struct { ...@@ -22,7 +38,10 @@ type CertificateData struct {
} }
// inspect certificate and return CertificateData // inspect certificate and return CertificateData
func InspectCertificate(certDir string) (CertificateData, error) { func InspectCertificate(certDir string, verboseBool bool) (CertificateData, error) {
if verboseBool {
DebugLogger.Printf("running inspector/InspectCertificate for: %s", certDir)
}
fullchainPath := filepath.Join(certDir, "fullchain.pem") fullchainPath := filepath.Join(certDir, "fullchain.pem")
data, err := os.ReadFile(fullchainPath) data, err := os.ReadFile(fullchainPath)
if err != nil { if err != nil {
...@@ -58,7 +77,10 @@ func InspectCertificate(certDir string) (CertificateData, error) { ...@@ -58,7 +77,10 @@ func InspectCertificate(certDir string) (CertificateData, error) {
} }
// call writeJSON functio. Used by the API. // call writeJSON functio. Used by the API.
func ProcessCertificatesWrite(baseDir, provider string, outputDir string) error { func ProcessCertificatesWrite(baseDir, provider string, outputDir string, verboseBool bool) error {
if verboseBool {
DebugLogger.Printf("Running inspector/ProcessCertificatesWrite function for provider: %s", provider)
}
liveDir := filepath.Join(baseDir, provider, "live") liveDir := filepath.Join(baseDir, provider, "live")
dirs, err := os.ReadDir(liveDir) dirs, err := os.ReadDir(liveDir)
if err != nil { if err != nil {
...@@ -77,7 +99,7 @@ func ProcessCertificatesWrite(baseDir, provider string, outputDir string) error ...@@ -77,7 +99,7 @@ func ProcessCertificatesWrite(baseDir, provider string, outputDir string) error
wg.Add(1) wg.Add(1)
go func(certDir string) { go func(certDir string) {
defer wg.Done() defer wg.Done()
data, err := InspectCertificate(certDir) data, err := InspectCertificate(certDir, verboseBool)
if err == nil { if err == nil {
mu.Lock() mu.Lock()
results = append(results, data) results = append(results, data)
...@@ -93,11 +115,14 @@ func ProcessCertificatesWrite(baseDir, provider string, outputDir string) error ...@@ -93,11 +115,14 @@ func ProcessCertificatesWrite(baseDir, provider string, outputDir string) error
}) })
outputFile := filepath.Join(outputDir, provider+".json") outputFile := filepath.Join(outputDir, provider+".json")
return writeJSON(outputFile, results) return writeJSON(outputFile, results, verboseBool)
} }
// write JSON to file. Used by the API. // write JSON to file. Used by the API.
func writeJSON(filename string, data interface{}) error { func writeJSON(filename string, data interface{}, verboseBool bool) error {
if verboseBool {
DebugLogger.Printf("Running inspector/writeJSON function for file: %s", filename)
}
file, err := os.Create(filename) file, err := os.Create(filename)
if err != nil { if err != nil {
return fmt.Errorf("failed to create JSON file: %w", err) return fmt.Errorf("failed to create JSON file: %w", err)
...@@ -110,7 +135,10 @@ func writeJSON(filename string, data interface{}) error { ...@@ -110,7 +135,10 @@ func writeJSON(filename string, data interface{}) error {
} }
// process certificates and return JSON data // process certificates and return JSON data
func ProcessCertificates(baseDir, provider string) ([]byte, error) { func ProcessCertificates(baseDir, provider string, verboseBool bool) ([]byte, error) {
if verboseBool {
DebugLogger.Printf("Running inspector/ProcessCertificates for provider: %s", provider)
}
liveDir := filepath.Join(baseDir, provider, "live") liveDir := filepath.Join(baseDir, provider, "live")
dirs, err := os.ReadDir(liveDir) dirs, err := os.ReadDir(liveDir)
if err != nil { if err != nil {
...@@ -129,7 +157,7 @@ func ProcessCertificates(baseDir, provider string) ([]byte, error) { ...@@ -129,7 +157,7 @@ func ProcessCertificates(baseDir, provider string) ([]byte, error) {
wg.Add(1) wg.Add(1)
go func(certDir string) { go func(certDir string) {
defer wg.Done() defer wg.Done()
data, err := InspectCertificate(certDir) data, err := InspectCertificate(certDir, verboseBool)
if err == nil { if err == nil {
mu.Lock() mu.Lock()
results = append(results, data) results = append(results, data)
......
...@@ -20,8 +20,9 @@ var ( ...@@ -20,8 +20,9 @@ var (
baseDir string baseDir string
webDir string webDir string
bearerToken string bearerToken string
WarningLogger *log.Logger DebugLogger *log.Logger
InfoLogger *log.Logger InfoLogger *log.Logger
WarningLogger *log.Logger
ErrorLogger *log.Logger ErrorLogger *log.Logger
verboseBool bool verboseBool bool
baseURLs []string baseURLs []string
...@@ -30,6 +31,7 @@ var ( ...@@ -30,6 +31,7 @@ var (
) )
func init() { func init() {
DebugLogger = log.New(os.Stdout, "DEBUG: ", log.Ldate|log.Ltime)
InfoLogger = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime) InfoLogger = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime)
WarningLogger = log.New(os.Stdout, "WARNING: ", log.Ldate|log.Ltime) WarningLogger = log.New(os.Stdout, "WARNING: ", log.Ldate|log.Ltime)
ErrorLogger = log.New(os.Stdout, "ERROR: ", log.Ldate|log.Ltime) ErrorLogger = log.New(os.Stdout, "ERROR: ", log.Ldate|log.Ltime)
...@@ -38,14 +40,16 @@ func init() { ...@@ -38,14 +40,16 @@ func init() {
// serve certificates JSON // serve certificates JSON
func renderJSON(w http.ResponseWriter, req *http.Request) { func renderJSON(w http.ResponseWriter, req *http.Request) {
provider := strings.Split(req.URL.Path, "/")[2] provider := strings.Split(req.URL.Path, "/")[2]
jsonData, err := certinspector.ProcessCertificates(baseDir, provider) jsonData, err := certinspector.ProcessCertificates(baseDir, provider, verboseBool)
if err != nil { if err != nil {
WarningLogger.Println(err) WarningLogger.Println(err)
http.Error(w, "Failed to process certificates", http.StatusServiceUnavailable) http.Error(w, "Failed to process certificates", http.StatusServiceUnavailable)
return return
} }
// Write JSON response if verboseBool {
DebugLogger.Printf("Serving JSON for provider: %s", provider)
}
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK) w.WriteHeader(http.StatusOK)
_, err = w.Write(jsonData) _, err = w.Write(jsonData)
...@@ -60,7 +64,7 @@ func renderPage(w http.ResponseWriter, req *http.Request) { ...@@ -60,7 +64,7 @@ func renderPage(w http.ResponseWriter, req *http.Request) {
outputDir := filepath.Join(webDir, provider) outputDir := filepath.Join(webDir, provider)
serveFile := filepath.Join(webDir, req.URL.Path) serveFile := filepath.Join(webDir, req.URL.Path)
err := certinspector.ProcessCertificatesWrite(baseDir, provider, outputDir) err := certinspector.ProcessCertificatesWrite(baseDir, provider, outputDir, verboseBool)
if err != nil { if err != nil {
WarningLogger.Println(err) WarningLogger.Println(err)
http.Error(w, "Failed to process certificates", http.StatusServiceUnavailable) http.Error(w, "Failed to process certificates", http.StatusServiceUnavailable)
...@@ -69,13 +73,14 @@ func renderPage(w http.ResponseWriter, req *http.Request) { ...@@ -69,13 +73,14 @@ func renderPage(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/html") w.Header().Set("Content-Type", "text/html")
if verboseBool { if verboseBool {
InfoLogger.Printf("Serving file: %s", serveFile) DebugLogger.Printf("Serving file: %s", serveFile)
} }
http.ServeFile(w, req, serveFile) http.ServeFile(w, req, serveFile)
} }
// trigger puppet // trigger puppet
func triggerPuppet(w http.ResponseWriter, req *http.Request) { func triggerPuppet(w http.ResponseWriter, req *http.Request) {
fmt.Printf("triggerPuppet function\n")
// content-type currently not working // content-type currently not working
cmd := exec.Command("/usr/bin/pkill", "-f", "/opt/puppetlabs/puppet/bin/puppet", "--signal", "SIGUSR1") cmd := exec.Command("/usr/bin/pkill", "-f", "/opt/puppetlabs/puppet/bin/puppet", "--signal", "SIGUSR1")
authToken := "BOFH" authToken := "BOFH"
...@@ -97,7 +102,7 @@ func triggerPuppet(w http.ResponseWriter, req *http.Request) { ...@@ -97,7 +102,7 @@ func triggerPuppet(w http.ResponseWriter, req *http.Request) {
http.Error(w, unavailableMsg, http.StatusServiceUnavailable) http.Error(w, unavailableMsg, http.StatusServiceUnavailable)
} else { } else {
if verboseBool { if verboseBool {
InfoLogger.Printf("HTTP Status %v", http.StatusOK) DebugLogger.Printf("HTTP Status %v", http.StatusOK)
} }
http.Error(w, okMsg, http.StatusOK) http.Error(w, okMsg, http.StatusOK)
} }
...@@ -106,6 +111,7 @@ func triggerPuppet(w http.ResponseWriter, req *http.Request) { ...@@ -106,6 +111,7 @@ func triggerPuppet(w http.ResponseWriter, req *http.Request) {
// redirect to /by_name.html // redirect to /by_name.html
func redirect(w http.ResponseWriter, req *http.Request) { func redirect(w http.ResponseWriter, req *http.Request) {
fmt.Printf("redirect function\n")
redirectURL := filepath.Join(req.URL.Path, "/by_name.html") redirectURL := filepath.Join(req.URL.Path, "/by_name.html")
http.Redirect(w, req, redirectURL, http.StatusMovedPermanently) http.Redirect(w, req, redirectURL, http.StatusMovedPermanently)
} }
...@@ -158,6 +164,11 @@ Options: ...@@ -158,6 +164,11 @@ Options:
verboseBool = arguments["--verbose"].(bool) verboseBool = arguments["--verbose"].(bool)
listenAddress := arguments["--listen-address"].(string) listenAddress := arguments["--listen-address"].(string)
listenPort := arguments["--listen-port"].(string) listenPort := arguments["--listen-port"].(string)
if verboseBool {
DebugLogger.Printf("Starting ACME Web server in debug mode")
} else {
InfoLogger.Printf("Starting ACME Web server")
}
for _, provider := range acmeProviders { for _, provider := range acmeProviders {
baseURLs = append(baseURLs, "/"+provider, "/"+provider+"/") baseURLs = append(baseURLs, "/"+provider, "/"+provider+"/")
...@@ -166,7 +177,7 @@ Options: ...@@ -166,7 +177,7 @@ Options:
for _, provider := range acmeProviders { for _, provider := range acmeProviders {
apiURLs = append( apiURLs = append(
apiURLs, "/api/"+provider, "/api/"+provider+"/", apiURLs, "/api/"+provider, "/api/"+provider+"/",
"/"+provider+"/"+provider+".json", "/"+provider+"/"+provider+"_expired.json", "/api/"+provider+"/"+provider+".json", "/api/"+provider+"/"+provider+"_expired.json",
) )
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment