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 hashstr = http_argument_get_string(req,"pwd") 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 local needspwd = hashstr and "&pwd=" .. hashstr or "" --When we post a comment, we need to dirty the cache for the "comments displayed" page. cache.dirty(string.format("%s%s?comments=1%s",host,path,needspwd)) local redir = string.format("https://%s%s?comments=1%s", config.domain, path, needspwd) http_response_header(req,"Location",redir) http_response(req,303,"") end end return read_post