Compare commits
2
Commits
28c081ed30
...
3f941de9c8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f941de9c8 | ||
|
|
1f3d3a21d2 |
+18
-6
@@ -8,6 +8,7 @@ import (
|
||||
"html/template"
|
||||
"io"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@@ -68,6 +69,7 @@ func (cs *Service) User(r *http.Request) (string, bool) {
|
||||
func (cs *Service) ServeComments(post string, w http.ResponseWriter, r *http.Request) error {
|
||||
user, allowed := cs.User(r)
|
||||
if !allowed {
|
||||
fmt.Fprintf(w, "<a href='/login'>click here to enter your name and the comments password</a>")
|
||||
w.WriteHeader(401)
|
||||
return nil
|
||||
}
|
||||
@@ -174,17 +176,27 @@ func (d *diskvStorage) nextKey(post string) (string, error) {
|
||||
d.keyMtx.Lock()
|
||||
defer d.keyMtx.Unlock()
|
||||
|
||||
var i uint64
|
||||
|
||||
prefix := post + "-"
|
||||
|
||||
lastKey := prefix
|
||||
|
||||
keys := d.KeysPrefix(prefix, nil)
|
||||
for range keys {
|
||||
i++
|
||||
for key := range keys {
|
||||
lastKey = key
|
||||
}
|
||||
|
||||
key := prefix + fmt.Sprint(i)
|
||||
err := d.WriteStream(key, &bytes.Buffer{}, true)
|
||||
if lastKey == prefix {
|
||||
return prefix + "1", nil
|
||||
}
|
||||
|
||||
minusPrefix := lastKey[len(prefix):]
|
||||
lastIdx, err := strconv.Atoi(minusPrefix)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("comment key %q seems malformed", lastKey)
|
||||
}
|
||||
|
||||
key := prefix + fmt.Sprint(lastIdx+1)
|
||||
err = d.WriteStream(key, &bytes.Buffer{}, true)
|
||||
|
||||
return key, err
|
||||
}
|
||||
|
||||
@@ -119,10 +119,6 @@ func (ch *CaddyHugo) Auth(r *http.Request) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (ch *CaddyHugo) CommentAuth(r *http.Request) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (ch *CaddyHugo) Match(r *http.Request) bool {
|
||||
if strings.HasPrefix(r.URL.Path, "/media/") {
|
||||
return true
|
||||
@@ -259,13 +255,13 @@ func (ch *CaddyHugo) commentsLogin(r *http.Request, w http.ResponseWriter) (int,
|
||||
|
||||
_, ok := ch.Comments.User(r)
|
||||
if !ok {
|
||||
w.Header().Set("WWW-Authenticate", `Basic realm="Give your name and the password. Ask Dan or Stephen for the password.`)
|
||||
return 401, nil
|
||||
w.Header().Set("WWW-Authenticate", `Basic realm="Log in with your name and the password. Ask Dan or Stephen for the password."`)
|
||||
w.WriteHeader(401)
|
||||
fmt.Fprintf(w, "<html><body>Log in with your name and the password. Ask Dan or Stephen for the password. <a href=%q>go back</a></body></html>", r.Referer())
|
||||
return 200, nil
|
||||
}
|
||||
|
||||
if strings.HasSuffix(r.Referer(), "/comments") {
|
||||
http.Redirect(w, r, r.Referer(), http.StatusFound)
|
||||
}
|
||||
http.Redirect(w, r, r.Referer(), http.StatusFound)
|
||||
|
||||
return 200, nil
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ func (ch *CaddyHugo) commentsSetting(c *caddy.Controller) {
|
||||
if c.Val() == "hugo" {
|
||||
for c.NextBlock() {
|
||||
if c.Val() == "comments" {
|
||||
ch.Comments = comments.Default()
|
||||
ch.Comments = comments.WithStorage(comments.NewDiskv(path.Join(ch.Site.Root, "comments")))
|
||||
if c.NextArg() {
|
||||
ch.Comments.Password = c.Val()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user