local Luan = require "luan:Luan.luan"
local error = Luan.error
local pairs = Luan.pairs or error()
local ipairs = Luan.ipairs or error()
local stringify = Luan.stringify or error()
local Io = require "luan:Io.luan"
local Http = require "luan:http/Http.luan"
local Shared = require "site:/lib/Shared.luan"
local head = Shared.head or error()
local header = Shared.private_header or error()
local new_password = Shared.new_password or error()
local config = Shared.config or error()
local get_raw_config = Shared.get_raw_config or error()
local save_raw_config = Shared.save_raw_config or error()
local Logging = require "luan:logging/Logging.luan"
local logger = Logging.logger "backup.html"
local function response(content)
%>
<% head() %>
Mercurial Backup
<% header() %>
Backup
<%=content%>
<%
end
local function posted()
local raw_config = get_raw_config()
local change = Http.request.parameters.change ~= nil
local password = config.users.backup
if password == nil or change then
password = new_password()
raw_config.users.backup = password
end
for repo_name, repo in pairs(raw_config.repos) do
local users = {}
if Http.request.parameters["repo_"..repo_name] ~= nil then
users[#users+1] = "backup"
end
for _, user in ipairs(repo.users) do
if user ~= "backup" then
users[#users+1] = user
end
end
repo.users = users
end
if config.private ~= nil and not config.private.backup then
raw_config.private[#raw_config.private+1] = "backup"
end
save_raw_config(raw_config)
return nil
end
return function()
Io.stdout = Http.response.text_writer()
local error_msg = ""
if Http.request.method == "POST" then
local error_msg = posted()
if error_msg == nil then
response([[Backup updated
]])
else
response([[]]..error_msg..[[
]])
end
return
end
%>
<% head() %>
Mercurial Backup
<% header() %>
<%
end