diff options
Diffstat (limited to 'system/external/server.go')
-rw-r--r-- | system/external/server.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/system/external/server.go b/system/external/server.go new file mode 100644 index 0000000..1efb23f --- /dev/null +++ b/system/external/server.go @@ -0,0 +1,48 @@ +package external + +import ( + "net/http" + + "github.com/bosssauce/ponzu/content" + "github.com/bosssauce/ponzu/system/db" +) + +// Externalable accepts or rejects external POST requests to /external/posts?type=Review +type Externalable interface { + Accept() bool +} + +func init() { + http.HandleFunc("/api/external/posts", externalPostsHandler) +} + +func externalPostsHandler(res http.ResponseWriter, req *http.Request) { + if req.Method != http.MethodPost { + res.WriteHeader(http.StatusMethodNotAllowed) + return + } + + t := req.URL.Query().Get("type") + if t == "" { + res.WriteHeader(http.StatusBadRequest) + return + } + + p, found := content.Types[t] + if !found { + res.WriteHeader(http.StatusNotFound) + return + } + + post := p() + + ext, ok := post.(Externalable) + if !ok { + res.WriteHeader(http.StatusNotFound) + return + } + + if ext.Accept() { + db.SetContent(t+"_external"+":-1", req.Form) + } +} |