50 lines
1,017 B
Go
50 lines
1,017 B
Go
package main
|
|
|
|
import (
|
|
"crypto/ed25519"
|
|
"crypto/sha256"
|
|
"encoding/base64"
|
|
"flag"
|
|
"log"
|
|
"net/http"
|
|
"sync"
|
|
)
|
|
|
|
type user struct {
|
|
pubkey []byte
|
|
servers []string
|
|
}
|
|
|
|
var mu sync.Mutex
|
|
var me string
|
|
var myHash string
|
|
var myPos int
|
|
var hashToDomain map[string]string
|
|
var peerHashes []string
|
|
var kvstore map[string][]byte
|
|
|
|
func main() {
|
|
bindAddr := flag.String("b", ":4200", "bind address")
|
|
publicURL := flag.String("u", "http://localhost:4200", "public URL")
|
|
peer := flag.String("i", "", "initial peer")
|
|
flag.Parse()
|
|
log.Printf("Starting %s %s %s", *bindAddr, *publicURL, *peer)
|
|
|
|
// Record myself
|
|
me = *publicURL
|
|
myHash = sha256sum(me)
|
|
myPos = 0
|
|
peerHashes = append(peerHashes, sha256sum(me))
|
|
hashToDomain = map[string]string{peerHashes[0]: me}
|
|
|
|
if *peer != "" {
|
|
go addPeer(*peer)
|
|
}
|
|
|
|
http.HandleFunc("/peer", peerHandler)
|
|
http.HandleFunc("/dht", dhtHandler)
|
|
http.HandleFunc("/storage", storageHandler)
|
|
http.HandleFunc("/message", messageHandler)
|
|
log.Fatal(http.ListenAndServe(*bindAddr, nil))
|
|
}
|