diff --git a/internal/utils/certOperations.go b/internal/utils/certOperations.go index 7455992..bc0314e 100644 --- a/internal/utils/certOperations.go +++ b/internal/utils/certOperations.go @@ -24,7 +24,8 @@ func GenerateCerts(tlsCert string, tlsKey string) { // Get the hostname hostname, err := os.Hostname() if err != nil { - panic(err) + log.Printf("failed to lookup hostname: '%s'\n", err) + hostname = "localhost" } // Check that the directory exists diff --git a/server/handler/getIncident.go b/server/handler/getIncident.go new file mode 100644 index 0000000..46d2a66 --- /dev/null +++ b/server/handler/getIncident.go @@ -0,0 +1,25 @@ +package handler + +import ( + "fmt" + "net/http" + "strings" +) + +// GetIncident responds to the link generated in the response to a New Snow +func (h *Handler) GetIncident(w http.ResponseWriter, r *http.Request) { + + // TODO + + path := r.URL.Path + // Expected format: /api/now/table/incident/{id} + parts := strings.Split(path, "/") + + if len(parts) != 6 || parts[1] != "api" || parts[2] != "now" || parts[3] != "table" || parts[4] != "incident" { + http.NotFound(w, r) + return + } + + id := parts[5] // Extract {id} + fmt.Fprintf(w, "Incident ID: %s", id) +} diff --git a/server/handler/newSnow.go b/server/handler/newSnow.go index e36e680..21695e7 100644 --- a/server/handler/newSnow.go +++ b/server/handler/newSnow.go @@ -9,12 +9,14 @@ import ( "mocksnow/db/queries" "mocksnow/server/models" "net/http" + "os" "github.com/google/uuid" ) // NewSnow receives data from the DMSP Snow New() function func (h *Handler) NewSnow(w http.ResponseWriter, r *http.Request) { + var hostname string reqBody, err := io.ReadAll(r.Body) if err != nil { @@ -82,7 +84,15 @@ func (h *Handler) NewSnow(w http.ResponseWriter, r *http.Request) { // Simulate response ticket := fmt.Sprintf("TKT%06d", incidentRecord) sysID := uuid.New().String() - recordLink := "https://server.fqdn.com/api/now/table/incident/" + sysID + + // Produce dummy record link + hostname, err = os.Hostname() + if err != nil { + h.Logger.Error("failed to lookup hostname", "error", err) + hostname = "localhost" + } + + recordLink := fmt.Sprintf("https://%s/api/now/table/incident/%s", hostname, sysID) response := models.IncidentResponse{ ImportSet: randomImportSet(), diff --git a/server/router/router.go b/server/router/router.go index 2935692..2342920 100644 --- a/server/router/router.go +++ b/server/router/router.go @@ -2,13 +2,13 @@ package router import ( "log/slog" - "net/http" - "net/http/pprof" "mocksnow/db" "mocksnow/dist" "mocksnow/internal/settings" "mocksnow/server/handler" "mocksnow/server/middleware" + "net/http" + "net/http/pprof" ) func New(logger *slog.Logger, database db.Database, buildTime string, sha1ver string, goVersion string, settings *settings.Settings) http.Handler { @@ -29,6 +29,7 @@ func New(logger *slog.Logger, database db.Database, buildTime string, sha1ver st mux.HandleFunc("/", h.Home) mux.HandleFunc("/api/now/import/x_dusa2_itom_inc_imp", h.NewSnow) + mux.HandleFunc("/api/now/table/incident/", h.GetIncident) // mux.HandleFunc("/api/event/vm/create", h.VmCreateEvent) // mux.HandleFunc("/api/event/vm/modify", h.VmModifyEvent)