Add webhook
This commit is contained in:
parent
0d86e7ea2a
commit
29ecfb2b2a
37
main.go
37
main.go
@ -2,12 +2,14 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
@ -18,6 +20,8 @@ import (
|
||||
func main() {
|
||||
loadConfig()
|
||||
|
||||
_ = os.Setenv(`GIT_TERMINAL_PROMPT`, `0`)
|
||||
|
||||
if err := updateTemplate(); err != nil {
|
||||
log.Fatal(`Failed to load template. (` + err.Error() + `)`)
|
||||
}
|
||||
@ -30,6 +34,7 @@ var config struct {
|
||||
Template string
|
||||
Pages string
|
||||
Static string
|
||||
Webhook string
|
||||
}
|
||||
|
||||
func loadConfig() {
|
||||
@ -37,21 +42,49 @@ func loadConfig() {
|
||||
flag.StringVar(&config.Template, `template`, `template.html`, `The template used by mdsite`)
|
||||
flag.StringVar(&config.Pages, `pages`, `pages`, `The OS path used when searching a page`)
|
||||
flag.StringVar(&config.Static, `static`, `static`, `The OS path used for static resource`)
|
||||
flag.StringVar(&config.Webhook, `webhook`, ``, `The secret for webhooks to update the content`)
|
||||
flag.Parse()
|
||||
}
|
||||
|
||||
var t *template.Template
|
||||
|
||||
func updateTemplate() error {
|
||||
var err error
|
||||
t, err = template.ParseFiles(config.Template)
|
||||
tmpl, err := template.ParseFiles(config.Template)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
t = tmpl
|
||||
return nil
|
||||
}
|
||||
|
||||
func serveRequest(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method == http.MethodPost && config.Webhook != `` && r.URL.Path == `/hook` {
|
||||
var input struct {
|
||||
Secret string `json:"secret"`
|
||||
}
|
||||
err := json.NewDecoder(r.Body).Decode(&input)
|
||||
_ = r.Body.Close()
|
||||
if err != nil || input.Secret != config.Webhook {
|
||||
w.WriteHeader(403)
|
||||
return
|
||||
}
|
||||
|
||||
err = exec.Command(`git`, `fetch`).Run()
|
||||
if err == nil {
|
||||
err = exec.Command(`git`, `reset`, `--hard`, `origin/master`).Run()
|
||||
}
|
||||
if err == nil {
|
||||
err = updateTemplate()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
w.WriteHeader(500)
|
||||
w.Write([]byte(`Update failed`))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if strings.HasPrefix(r.URL.Path, `/static/`) {
|
||||
path := path.Join(config.Static, path.Clean(strings.TrimPrefix(r.URL.Path, `/static/`)))
|
||||
http.ServeFile(w, r, path)
|
||||
|
Loading…
Reference in New Issue
Block a user