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 (
|
||||
"crypto/tls"
|
||||
"net/url"
|
||||
"log"
|
||||
"net"
|
||||
"net/http"
|
||||
"bufio"
|
||||
"os"
|
||||
"strconv"
|
||||
"fmt"
|
||||
"encoding/json"
|
||||
"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) {
|
||||
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 {
|
||||
log.Println("handleConn: %s", err)
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue