diff options
Diffstat (limited to 'parse.go')
| -rw-r--r-- | parse.go | 25 |
1 files changed, 25 insertions, 0 deletions
@@ -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") } |
