Account to get is now part of url

This commit is contained in:
Romain de Laage 2021-02-28 16:30:59 +01:00
parent d97284e59d
commit d77383be08
Signed by: rdelaage
GPG Key ID: 534845FADDF0C329
1 changed files with 57 additions and 2 deletions

View File

@ -2,10 +2,13 @@ package main
import ( import (
"crypto/tls" "crypto/tls"
"net/url"
"log" "log"
"net" "net"
"net/http" "net/http"
"bufio"
"os" "os"
"strconv"
"fmt" "fmt"
"encoding/json" "encoding/json"
"io/ioutil" "io/ioutil"
@ -95,12 +98,64 @@ func serve(listener net.Listener, baseURL string) {
} }
} }
func getRawURL(conn *tls.Conn) (string, error) {
scanner := bufio.NewScanner(conn)
if ok := scanner.Scan(); !ok {
return "", scanner.Err()
}
rawURL := scanner.Text()
if strings.Contains(rawURL, "://") {
return rawURL, nil
}
return fmt.Sprintf("gemini://%s", rawURL), nil
}
func getPath(conn *tls.Conn) (string, error) {
rawURL, err := getRawURL(conn)
if err != nil {
return "", err
}
parsedURL, err := url.Parse(rawURL)
if err != nil {
return "", err
}
return parsedURL.Path, nil
}
func handleConn(conn *tls.Conn, baseURL string) { func handleConn(conn *tls.Conn, baseURL string) {
defer conn.Close() defer conn.Close()
blogs := getBlog(baseURL, "138624") path, err := getPath(conn)
if err != nil {
log.Println("get url: %s", err)
_, err = fmt.Fprintf(conn, "59 Can't parse request\r\n")
if err != nil {
log.Println("send error: %s", err)
return
}
return
}
_, err := fmt.Fprintf(conn, "20 text/gemini\r\n# Picasoft account toots\n") path = path[1:]
_, err = strconv.ParseUint(path, 10, 64)
if err != nil {
log.Println("invalid request: %s", err)
_, err = fmt.Fprintf(conn, "59 Can't parse request\r\n")
if err != nil {
log.Println("send error: %s", err)
return
}
return
}
blogs := getBlog(baseURL, path)
_, err = fmt.Fprintf(conn, "20 text/gemini\r\n# Picasoft account toots\n")
if err != nil { if err != nil {
log.Println("handleConn: %s", err) log.Println("handleConn: %s", err)
return return