From 0b57acaa2d31038f858c7ad6722db43409c1b0a1 Mon Sep 17 00:00:00 2001 From: tjpcc Date: Mon, 30 Oct 2023 13:02:06 -0600 Subject: Add support for spartan protocol spartan server definitions are very similar to gemini. The major changes are: * no "servertls" directives * no "autoatom" modifier (to be fixed) * no "git" directives (to be fixed) Fixes #15 --- parse.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'parse.go') diff --git a/parse.go b/parse.go index e1b375f..a8eeb3e 100644 --- a/parse.go +++ b/parse.go @@ -109,6 +109,12 @@ func Parse(input io.ReadCloser) (*Configuration, error) { return nil, err } servers = append(servers, s) + case "spartan": + s, err := parseSpartanServer(line, buf) + if err != nil { + return nil, err + } + servers = append(servers, s) } } @@ -221,6 +227,20 @@ func parseGeminiServer(line string, buf *bufio.Reader) (Server, error) { return server, nil } +func parseSpartanServer(line string, buf *bufio.Reader) (Server, error) { + server := Server{Type: "spartan"} + + 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') @@ -241,6 +261,9 @@ func parseServerDirectives(server *Server, buf *bufio.Reader) error { case "host": server.Hostnames = append(server.Hostnames, parseHost(rest)...) case "servertls": + if server.Type == "spartan" { + return errors.New("servertls directive not allowed in spartan server") + } if server.TLS != nil { return fmt.Errorf("duplicate servertls directives in %s server", server.Type) } @@ -523,6 +546,8 @@ func parseServerLine(server *Server, line string) error { defaultPort = "79" case "gemini": defaultPort = "1965" + case "spartan": + defaultPort = "300" default: return errors.New("invalid server") } -- cgit v1.2.3