Account to get is now part of url
This commit is contained in:
parent
d97284e59d
commit
d77383be08
59
server.go
59
server.go
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue