Mercurial Hosting > hghosting
diff src/admin/edit.html.luan @ 0:dfc36e7ed22c
init
author | Vadim Filimonov <fffilimonov@yandex.ru> |
---|---|
date | Thu, 12 May 2022 13:51:59 +0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/admin/edit.html.luan Thu May 12 13:51:59 2022 +0400 @@ -0,0 +1,137 @@ +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.admin_header or error() +local get_user = Shared.get_user or error() +local text_to_list = Shared.text_to_list or error() +local config = Shared.config or error() +local list_to_set = Shared.list_to_set or error() +local get_raw_config = Shared.get_raw_config or error() +local save_raw_config = Shared.save_raw_config or error() +local admin_return = Shared.admin_return or error() +local Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "admin/edit.html" + + +local function response(name,content) +%> +<!doctype html> +<html> + <head> +<% head() %> + <title>Edit Mercurial Repository</title> + </head> + <body> +<% header() %> + <div content> + <h1>Edit Repository <a href="/repo/<%=name%>"><%=name%></a></h1> + <%=content%> + </div> + </body> +</html> +<% +end + +local function posted(name) + local mode = Http.request.parameters.mode or error() + local users = Http.request.parameters.users or error() + local admins = Http.request.parameters.admins or error() + users = text_to_list(users) + admins = text_to_list(admins) + if #users == 0 then + return "Users cannot be empty" + end + if #admins == 0 then + return "Users cannot be empty" + end + for _, user in ipairs(users) do + if config.users[user] == nil then + return "user "..user.." is not a registered user" + end + end + local user_set = list_to_set(users) + for _, user in ipairs(admins) do + if config.users[user] == nil then + return "admin "..user.." is not a registered user" + end + if not user_set[user] then + return "admin "..user.." is not a user in this repo" + end + end + local raw_config = get_raw_config() + raw_config.repos[name] = { + mode = mode + users = users + admins = admins + } + save_raw_config(raw_config) + return nil +end + +return function() + local name = Http.request.parameters.repo or error() + local repo = config.repos[name] or error(name) + repo.admins[get_user()] or error "not admin" + Io.stdout = Http.response.text_writer() + local error_msg = "" + if Http.request.method == "POST" then + local error_msg = posted(name) + if error_msg == nil then + response(name,[[<p>Repository updated</p>]]..admin_return) + else + response(name,[[<p error>]]..error_msg..[[</p>]]) + end + return + end +%> +<!doctype html> +<html> + <head> +<% head() %> + <title>Edit Mercurial Repository</title> + </head> + <body> +<% header() %> + <div content> + <h1>Edit Repository <a href="/repo/<%=name%>/"><%=name%></a></h1> + <form method=post> + <p> + <select name=mode> + <option <%= repo.mode=="public" and "selected" or "" %> >public</option> + <option <%= repo.mode=="private" and "selected" or "" %> >private</option> + </select> + <label prompt>If private then only users access this repo.</label> + </p> + <p> + <label prompt>Users (one per line)</label> + <textarea name=users> +<% for user in pairs(repo.users) do %> +<%=user%> +<% end %> +</textarea> + <label prompt>Users can push to this repo.</label> + </p> + <p> + <label prompt>Admins (one per line)</label> + <textarea name=admins> +<% for user in pairs(repo.admins) do %> +<%=user%> +<% end %> +</textarea> + <label prompt>Admins can manage this repo.</label> + </p> + <p> + <input type=submit value="Update Repo"> + </p> + </form> + </div> + </body> +</html> +<% +end