summaryrefslogtreecommitdiff
path: root/parse.go
diff options
context:
space:
mode:
Diffstat (limited to 'parse.go')
-rw-r--r--parse.go25
1 files changed, 25 insertions, 0 deletions
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")
}