module(..., package.seeall) -- Load libraries require("controllerfunctions") default_action = "viewauditstats" function config(self) return controllerfunctions.handle_form(self, self.model.getconfig, self.model.updateconfig, self.clientdata, "Save", "Edit Configuration", "Configuration Saved") end function listsources(self) return self.model.getsourcelist() end function createsource(self) return controllerfunctions.handle_form(self, self.model.getnewsource, self.model.createsource, self.clientdata, "Create", "Create new source", "New source created") end function deletesource(self) return self:redirect_to_referrer(self.model.deletesource(self.clientdata.sourcename)) end function editsource(self) return controllerfunctions.handle_form(self, function() return self.model.getsource(self.clientdata.sourcename) end, self.model.updatesource, self.clientdata, "Save", "Edit Source", "Source Saved") end function testsource(self) return self:redirect_to_referrer(self.model.testsource(self.clientdata.sourcename)) end function importlogs(self) return self:redirect_to_referrer(self.model.importlogs()) end function viewactivitylog(self) return self.model.getactivitylog() end function viewwatchlist(self) return self.model.getwatchlist() end function createwatchlistentry(self) return controllerfunctions.handle_form(self, self.model.getnewwatchlistentry, self.model.createwatchlistentry, self.clientdata, "Create", "Create new watchlist entry", "New watchlist entry created") end function deletewatchlistentry(self) return self:redirect_to_referrer(self.model.deletewatchlistent(self.clientdata.clientuserid)) end function viewweblog(self) return self.model.getweblog(self.clientdata.activelog, self.clientdata.clientuserid, self.clientdata.starttime, self.clientdata.endtime, self.clientdata.clientip, self.clientdata.badyesno, self.clientdata.deniedyesno, self.clientdata.bypassyesno, self.clientdata.score, self.clientdata.urisearch, self.clientdata.sortby, self.clientdata.selected, clientdata.focus) end function downloadweblog(self) self.conf.viewtype = "stream" local retval = viewweblog(self) local file = cfe({ type="longtext", value="", label=retval.value.clientuserid.value .. ".csv" }) local content = {"clientuserid,clientip,logdatetime,uri,bytes,reason,score,reason,badyesno,deniedyesno,bypassyesno"} for i,log in ipairs(retval.value.log.value) do content[#content+1] = string.format("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,", log.clientuserid, log.clientip, log.logdatetime, log.uri, log.bytes, log.reason, log.score or "0", log.reason, log.badyesno, log.deniedyesno, log.bypassyesno ) end file.value = table.concat(content, "\n") return file end function downloadlogview(self) thisdate=os.date() self.conf.viewtype = "stream" local retval = viewweblog(self) local file = cfe({ type="longtext", value="", label="Weblog-resnet-"..thisdate..".tab" }) local content = {"clientuserid\tclientip\tlogdatetime\turi\tbytes\treason\tscore\treason\tbadyesno\tdeniedyesno\tbypassyesno"} for i,log in ipairs(retval.value.log.value) do content[#content+1] = string.format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t", log.clientuserid, log.clientip, log.logdatetime, log.uri, log.bytes, log.reason, log.score or "0", log.reason, log.badyesno, log.deniedyesno, log.bypassyesno ) end file.value = table.concat(content, "\n") return file end function downloadselected(self) thisdate=os.date() self.conf.viewtype = "stream" local retval = viewselected(self) local file = cfe({ type="longtext", value="", label="Weblog-resnet-selected-"..thisdate..".tab" }) local content = {"clientuserid\tclientip\tlogdatetime\turi\tbytes\treason\tscore\treason\tbadyesno\tdeniedyesno\tbypassyesno"} for i,log in ipairs(retval.value.log.value) do content[#content+1] = string.format("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t", log.clientuserid, log.clientip, log.logdatetime, log.uri, log.bytes, log.reason, log.score or "0", log.reason, log.badyesno, log.deniedyesno, log.bypassyesno ) end file.value = table.concat(content, "\n") return file end function checkselected(self) self.conf.viewtype = "silent" return self.model.editselected(self.clientdata.chkdata) --return file end function clearselected(self) return self:redirect_to_referrer(self.model.clearselected()) end function viewselected(self) --return self.model.getselected(self.clientdata.csvdata, self.clientdata.starttime, self.clientdata.endtime) return self.model.getweblog(self.clientdata.activelog, self.clientdata.clientuserid, self.clientdata.starttime, self.clientdata.endtime, self.clientdata.clientip, self.clientdata.badyesno, self.clientdata.deniedyesno, self.clientdata.bypassyesno, self.clientdata.score, self.clientdata.urisearch, self.clientdata.sortby, self.clientdata.getselected, clientdata.focus) end function adhocquery(self) return controllerfunctions.handle_form(self, self.model.getnewadhocquery, self.model.adhocquery, self.clientdata, "Submit", "Submit ad-hoc query") end function downloadadhocquery(self) self.conf.viewtype = "stream" local retval = self.model.getnewadhocquery() controllerfunctions.handle_clientdata(retval, self.clientdata) retval = self.model.adhocquery(retval) local file = cfe({ type="longtext", value="", label="query" }) if retval.value.result and #retval.value.result.value > 0 then local columns = {} for name,val in pairs(retval.value.result.value[1]) do columns[#columns+1] = name end local content = {table.concat(columns, "\t")} for i,entry in ipairs(retval.value.result.value) do local line = {} for i,name in ipairs(columns) do line[#line+1] = entry[name] or "" end content[#content+1] = table.concat(line, "\t") end file.value = table.concat(content, "\n") end return file end function status(self) return self.model.testdatabase() end function createdatabase(self) return controllerfunctions.handle_form(self, self.model.getnewdatabase, self.model.create_database, self.clientdata, "Create", "Create New Database", "Database Created") end function listfiles(self) return self.model.listfiles(self) end function createfile(self) return controllerfunctions.handle_form(self, self.model.getnewfile, self.model.createfile, self.clientdata, "Create", "Create New Weblog File", "Weblog File Created") end function editfile(self) return controllerfunctions.handle_form(self, function() return self.model.readfile(self.clientdata.filename) end, self.model.updatefile, self.clientdata, "Save", "Edit Weblog File", "Weblog File Saved" ) end function deletefile(self) return self:redirect_to_referrer(self.model.deletefile(self.clientdata.filename)) end