summaryrefslogtreecommitdiff
path: root/system/external/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'system/external/server.go')
-rw-r--r--system/external/server.go48
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)
+ }
+}