api: add option to delete own comments

This commit is contained in:
Adhityaa Chandrasekar 2019-05-15 09:13:39 -07:00
parent 5228ff671a
commit 5faa727ef8
3 changed files with 61 additions and 12 deletions

View File

@ -41,6 +41,12 @@ func commentDeleteHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
cm, err := commentGetByCommentHex(*x.CommentHex)
if err != nil {
bodyMarshal(w, response{"success": false, "message": err.Error()})
return
}
domain, _, err := commentDomainPathGet(*x.CommentHex) domain, _, err := commentDomainPathGet(*x.CommentHex)
if err != nil { if err != nil {
bodyMarshal(w, response{"success": false, "message": err.Error()}) bodyMarshal(w, response{"success": false, "message": err.Error()})
@ -53,7 +59,7 @@ func commentDeleteHandler(w http.ResponseWriter, r *http.Request) {
return return
} }
if !isModerator { if !isModerator && cm.CommenterHex != c.CommenterHex {
bodyMarshal(w, response{"success": false, "message": errorNotModerator.Error()}) bodyMarshal(w, response{"success": false, "message": errorNotModerator.Error()})
return return
} }

41
api/comment_get.go Normal file
View File

@ -0,0 +1,41 @@
package main
import (
)
func commentGetByCommentHex(commentHex string) (comment, error) {
if commentHex == "" {
return comment{}, errorMissingField
}
statement := `
SELECT
commentHex,
commenterHex,
markdown,
html,
parentHex,
score,
state,
creationDate
FROM comments
WHERE comments.commentHex = $1;
`
row := db.QueryRow(statement, commentHex)
c := comment{}
if err := row.Scan(
&c.CommentHex,
&c.CommenterHex,
&c.Markdown,
&c.Html,
&c.ParentHex,
&c.Score,
&c.State,
&c.CreationDate); err != nil {
// TODO: is this the only error?
return c, errorNoSuchComment
}
return c, nil
}

View File

@ -936,18 +936,20 @@
append(options, reply); append(options, reply);
if (isModerator) { if (isModerator && parentHex === "root") {
if (parentHex === "root") { append(options, sticky);
append(options, sticky); }
}
if (isModerator || comment.commenterHex === selfHex) {
append(options, remove); append(options, remove);
if (comment.state !== "approved") { }
append(options, approve);
} if (isModerator && comment.state !== "approved") {
} else { append(options, approve);
if (stickyCommentHex === comment.commentHex) { }
append(options, sticky);
} if (!isModerator && stickyCommentHex === comment.commentHex) {
append(options, sticky);
} }
attrSet(options, "style", "width: " + ((options.childNodes.length+1)*32) + "px;"); attrSet(options, "style", "width: " + ((options.childNodes.length+1)*32) + "px;");