package server import ( "fes/modules/config" "fes/modules/gemini" "fes/modules/ui" "os" "strings" ) func geminiHandler(w gemini.ResponseWriter, r *gemini.Request) { ui.LogVerbose("Received %s", r.URL.Path) route, ok := Routes[r.URL.Path] var err error = nil /* defer won't update paramaters unless we do this. */ defer func() { ui.Path(route, err) }() if !ok { err = config.ErrRouteMiss route = r.URL.Path if strings.HasPrefix(route, "/archive") { w.Write([]byte("# error: not implemented")) // err = readArchive(w, route) } else { w.WriteHeader(gemini.StatusNotFound, "StatusNotFound") w.Write([]byte(` 404 Not Found

404 Not Found


fes
`)) } return } params := make(map[string]string) for k, v := range r.URL.Query() { if len(v) > 0 { params[k] = v[0] } } var data []byte if strings.HasSuffix(route, ".lua") { data, err = render(route, reqData{path: r.URL.Path, params: params}, &Sets) } else if strings.HasSuffix(route, ".md") { data, err = os.ReadFile(route) data = []byte(markdownToHTML(string(data))) data = []byte("\n" + string(data)) } else { ui.LogVerbose("serving unrecognized file") data, err = os.ReadFile(route) } if err != nil { w.WriteHeader(-1, err.Error()) } w.Write(data) }