From df1d1efa19aed5bc6553c7c0a0b4b7dfe20e3bd0 Mon Sep 17 00:00:00 2001 From: Ben Morrison Date: Mon, 20 May 2019 22:52:50 -0400 Subject: fleshed out POST handler, added remote registry list --- post.go | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 post.go (limited to 'post.go') diff --git a/post.go b/post.go new file mode 100644 index 0000000..5091a0e --- /dev/null +++ b/post.go @@ -0,0 +1,62 @@ +package main + +import ( + "fmt" + "net/http" + + "github.com/getwtxt/registry" +) + +// Requests to apiEndpointPOSTHandler are passed off to this +// function. apiPostUser then fetches the twtxt data, then if +// it's an individual user's file, adds it. If it's registry +// output, it scrapes the users/urls/statuses from the remote +// registry before adding each user to the local cache. +func apiPostUser(w http.ResponseWriter, r *http.Request) { + if err := r.ParseForm(); err != nil { + log400(w, r, err) + return + } + nick := r.FormValue("nickname") + urls := r.FormValue("url") + if nick == "" || urls == "" { + log400(w, r, fmt.Errorf("nickname or URL missing")) + return + } + + uip := getIPFromCtx(r.Context()) + + out, remoteRegistry, err := registry.GetTwtxt(urls) + if err != nil { + log400(w, r, err) + return + } + + if remoteRegistry { + remote.Mu.Lock() + remote.List = append(remote.List, urls) + remote.Mu.Unlock() + + err := twtxtCache.ScrapeRemoteRegistry(urls) + if err != nil { + log400(w, r, err) + return + } + log200(r) + return + } + + statuses, err := registry.ParseUserTwtxt(out) + if err != nil { + log400(w, r, err) + return + } + + err = twtxtCache.AddUser(nick, urls, uip, statuses) + if err != nil { + log400(w, r, err) + return + } + + log200(r) +} -- cgit 1.4.1-2-gfad0