summaryrefslogtreecommitdiff
path: root/input/http
diff options
context:
space:
mode:
Diffstat (limited to 'input/http')
-rw-r--r--input/http/http.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/input/http/http.go b/input/http/http.go
new file mode 100644
index 0000000..71a0340
--- /dev/null
+++ b/input/http/http.go
@@ -0,0 +1,61 @@
+package http
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+
+ "github.com/Shugyousha/stasher/input"
+ "github.com/Shugyousha/stasher/registry"
+ "github.com/Shugyousha/stasher/work"
+)
+
+func init() {
+ registry.Inputregistry["http"] = New
+}
+
+type HTTPInput struct {
+ retchan chan *work.Work
+ prefix string
+ port string
+}
+
+func New(conf map[string]string) input.Input {
+ prefix := conf["prefix"]
+ if prefix == "" {
+ fmt.Printf("Need a prefix when setting up http input\n")
+ return nil
+ }
+ port := conf["port"]
+ if port == "" {
+ fmt.Printf("Need a port number when setting up http input\n")
+ return nil
+ }
+ return &HTTPInput{prefix: prefix, port: port}
+}
+
+func (hi *HTTPInput) httphandler(w http.ResponseWriter, r *http.Request) {
+ if r.Method != "POST" {
+ fmt.Printf("Expected POST method was: %q\n", r.Method)
+ return
+ }
+ all, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ fmt.Printf("Error when reading HTTP request body: %q\n", err)
+ return
+ }
+ hi.retchan <- &work.Work{Data: all}
+}
+
+func (hi *HTTPInput) Start() chan *work.Work {
+ hi.retchan = make(chan *work.Work, 100)
+
+ go func() {
+ http.HandleFunc("/"+hi.prefix, hi.httphandler)
+ err := http.ListenAndServe(hi.port, nil)
+ fmt.Printf("Error when serving HTTP: %q\n", err)
+ close(hi.retchan)
+ }()
+
+ return hi.retchan
+}