summaryrefslogtreecommitdiff
path: root/parse.go
diff options
context:
space:
mode:
authortjpcc <tjp@ctrl-c.club>2023-10-30 13:02:06 -0600
committertjpcc <tjp@ctrl-c.club>2023-10-30 13:02:37 -0600
commit0b57acaa2d31038f858c7ad6722db43409c1b0a1 (patch)
treebb421b984cbfc01a540da6e20251f1d642db829d /parse.go
parentdeb9bd75511c790d151449b020093f54515bb19f (diff)
Add support for spartan protocolspartan
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
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")
}