You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.5 KiB
Lua
137 lines
3.5 KiB
Lua
local assert_error = require("lapis.application").assert_error
|
|
local csrf = require "lapis.csrf"
|
|
local lfs = require "lfs"
|
|
local capture = require "utils.capture"
|
|
local generate = require "utils.generate"
|
|
|
|
return {
|
|
before = function(self)
|
|
|
|
-- Display a theme
|
|
self.board = { theme = "yotsuba_b" }
|
|
|
|
-- Generate CSRF token
|
|
self.csrf_token = csrf.generate_token(self)
|
|
|
|
-- Page title
|
|
self.page_title = self.i18n("admin_panel")
|
|
|
|
-- Verify Authorization
|
|
if not self.session.name then return end
|
|
if not self.session.admin then
|
|
assert_error(false, "err_not_admin")
|
|
end
|
|
|
|
-- Get list of themes
|
|
self.themes = {}
|
|
for file in lfs.dir("./static/css") do
|
|
local name, ext = string.match(file, "^(.+)%.(.+)$")
|
|
if name ~= "reset" and
|
|
name ~= "posts" and
|
|
name ~= "style" and
|
|
name ~= "tegaki" and
|
|
ext == "css" then
|
|
table.insert(self.themes, name)
|
|
end
|
|
end
|
|
|
|
-- Display creation form
|
|
if self.params.action == "create" then
|
|
self.page_title = string.format(
|
|
"%s - %s",
|
|
self.i18n("admin_panel"),
|
|
self.i18n("create_board")
|
|
)
|
|
self.board = self.params
|
|
|
|
if not self.board.theme then
|
|
self.board.theme = "yotsuba_b"
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
-- Display modification form
|
|
if self.params.action == "modify" then
|
|
self.board = assert_error(capture.get(self:url_for("api.boards.board", { uri_name=self.params.uri_name })))
|
|
self.page_title = string.format(
|
|
"%s - %s",
|
|
self.i18n("admin_panel"),
|
|
self.i18n("modify_board")
|
|
)
|
|
return
|
|
end
|
|
|
|
-- Delete board
|
|
if self.params.action == "delete" then
|
|
local board = assert_error(capture.delete(self:url_for("api.boards.board", { uri_name=self.params.uri_name })))
|
|
self.page_title = string.format(
|
|
"%s - %s",
|
|
self.i18n("admin_panel"),
|
|
self.i18n("success")
|
|
)
|
|
self.action = self.i18n("deleted_board", { board.name, board.title })
|
|
return
|
|
end
|
|
end,
|
|
|
|
on_error = function(self)
|
|
self.errors = generate.errors(self.i18n, self.errors)
|
|
|
|
if not self.session.name then
|
|
return { render = "admin.login" }
|
|
elseif self.params.action == "create" then
|
|
return { render = "admin.board" }
|
|
elseif self.params.action == "modify" then
|
|
return { render = "admin.board" }
|
|
elseif self.params.action == "delete" then
|
|
return { render = "admin.admin" }
|
|
end
|
|
end,
|
|
|
|
GET = function(self)
|
|
if not self.session.name then
|
|
return { render = "admin.login" }
|
|
elseif self.params.action == "create" then
|
|
return { render = "admin.board" }
|
|
elseif self.params.action == "modify" then
|
|
return { render = "admin.board" }
|
|
elseif self.params.action == "delete" then
|
|
return { render = "admin.success" }
|
|
end
|
|
end,
|
|
|
|
POST = function(self)
|
|
-- Validate CSRF token
|
|
csrf.assert_token(self)
|
|
|
|
-- Create new board
|
|
if self.params.create_board then
|
|
local board = assert_error(capture.post(self:url_for("api.boards.boards"), self.params))
|
|
self.page_title = string.format(
|
|
"%s - %s",
|
|
self.i18n("admin_panel"),
|
|
self.i18n("success")
|
|
)
|
|
self.action = self.i18n("created_board", { board.name, board.title })
|
|
|
|
return { render = "admin.success" }
|
|
end
|
|
|
|
-- Modify board
|
|
if self.params.modify_board then
|
|
local board = assert_error(capture.put(self:url_for("api.boards.board", { uri_name=self.params.uri_name }), self.params))
|
|
self.page_title = string.format(
|
|
"%s - %s",
|
|
self.i18n("admin_panel"),
|
|
self.i18n("success")
|
|
)
|
|
self.action = self.i18n("modified_board", { board.name, board.title })
|
|
|
|
return { render = "admin.success" }
|
|
end
|
|
|
|
return { redirect_to = self:url_for("web.admin.index") }
|
|
end
|
|
}
|