summaryrefslogtreecommitdiff
path: root/parse.go
diff options
context:
space:
mode:
authortjp <tjp@ctrl-c.club>2023-11-14 18:58:06 -0700
committertjp <tjp@ctrl-c.club>2023-11-14 18:58:06 -0700
commit2cdc569840f36dad139132c37de1b62e21a971b7 (patch)
tree2fd4b5c5626a50230ffcd0b6f28dcb048482ef56 /parse.go
parenta2b05982a2bbd2c7baee1efb7e98db8de9123330 (diff)
initial support for nex protocol
Diffstat (limited to 'parse.go')
-rw-r--r--parse.go26
1 files changed, 26 insertions, 0 deletions
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")
}