54 lines
1.6 KiB
Lua
54 lines
1.6 KiB
Lua
|
local sql = require("sqlite3")
|
||
|
|
||
|
local cache = require("cache")
|
||
|
local session = require("session")
|
||
|
local util = require("util")
|
||
|
local db = require("db")
|
||
|
local queries = require("queries")
|
||
|
local config = require("config")
|
||
|
|
||
|
local stmnt_comment_insert
|
||
|
|
||
|
local oldconfigure = configure
|
||
|
function configure(...)
|
||
|
stmnt_comment_insert = assert(db.conn:prepare(queries.insert_comment))
|
||
|
return oldconfigure(...)
|
||
|
end
|
||
|
|
||
|
local function read_post(req)
|
||
|
local host = http_request_get_host(req)
|
||
|
local path = http_request_get_path(req)
|
||
|
--We're posting a comment
|
||
|
http_request_populate_post(req)
|
||
|
http_populate_cookies(req)
|
||
|
local author, authorid = session.get(req)
|
||
|
local comment_text = assert(http_argument_get_string(req,"text"))
|
||
|
local pasteas = assert(http_argument_get_string(req,"postas"))
|
||
|
local idp = string.sub(path,2)--remove leading "/"
|
||
|
local id = util.decode_id(idp)
|
||
|
local isanon = 1
|
||
|
--Even if an author is logged in, they may post their comment anonymously
|
||
|
if author and pasteas ~= "Anonymous" then
|
||
|
isanon = 0
|
||
|
end
|
||
|
stmnt_comment_insert:bind_names{
|
||
|
postid=id,
|
||
|
authorid = author and authorid or -1,
|
||
|
isanon = isanon,
|
||
|
comment_text = comment_text,
|
||
|
}
|
||
|
local err = util.do_sql(stmnt_comment_insert)
|
||
|
stmnt_comment_insert:reset()
|
||
|
if err ~= sql.DONE then
|
||
|
http_response(req,500,"Internal error, failed to post comment. Go back and try again.")
|
||
|
else
|
||
|
--When we post a comment, we need to dirty the cache for the "comments displayed" page.
|
||
|
cache.dirty(string.format("%s%s?comments=1",host,path))
|
||
|
local redir = string.format("https://%s%s?comments=1", config.domain, path)
|
||
|
http_response_header(req,"Location",redir)
|
||
|
http_response(req,303,"")
|
||
|
end
|
||
|
|
||
|
end
|
||
|
return read_post
|