From 2cdc569840f36dad139132c37de1b62e21a971b7 Mon Sep 17 00:00:00 2001 From: tjp Date: Tue, 14 Nov 2023 18:58:06 -0700 Subject: initial support for nex protocol --- parse.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'parse.go') diff --git a/parse.go b/parse.go index 89ce244..d0bf7a3 100644 --- a/parse.go +++ b/parse.go @@ -115,6 +115,12 @@ func Parse(input io.ReadCloser) (*Configuration, error) { return nil, err } servers = append(servers, s) + case "nex": + s, err := parseNexServer(line, buf) + if err != nil { + return nil, err + } + servers = append(servers, s) } } @@ -241,6 +247,20 @@ func parseSpartanServer(line string, buf *bufio.Reader) (Server, error) { return server, nil } +func parseNexServer(line string, buf *bufio.Reader) (Server, error) { + server := Server{Type: "nex"} + + if err := parseServerLine(&server, line); err != nil { + return server, err + } + + if err := parseServerDirectives(&server, buf); err != nil { + return server, err + } + + return server, nil +} + func parseServerDirectives(server *Server, buf *bufio.Reader) error { for { line, err := buf.ReadString('\n') @@ -306,6 +326,10 @@ func validateRoute(serverType string, dir *RouteDirective) error { return errors.New("cgi directives only support the 'extendedgophermap' modifier") } + if dir.Type == "git" && serverType != "gemini" && serverType != "gopher" && serverType != "spartan" { + return fmt.Errorf("git directive not allowed in %s server", serverType) + } + if serverType == "finger" && (dir.Modifiers.DirDefault != "" || dir.Modifiers.DirList) { return errors.New("finger servers don't support directory 'with' modifiers") } @@ -558,6 +582,8 @@ func parseServerLine(server *Server, line string) error { defaultPort = "1965" case "spartan": defaultPort = "300" + case "nex": + defaultPort = "1900" default: return errors.New("invalid server") } -- cgit v1.2.3