Mercurial Hosting > hghost-test
changeset 22:ab533dc97759
private auth
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sat, 30 Apr 2022 21:50:46 -0600 |
parents | 509cf89048cc |
children | 49b14f4fe311 |
files | src/admin/edit.html.luan src/lib/Shared.luan src/private/edit.html.luan update_repositories.luan |
diffstat | 4 files changed, 126 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/admin/edit.html.luan Sat Apr 30 20:33:16 2022 -0600 +++ b/src/admin/edit.html.luan Sat Apr 30 21:50:46 2022 -0600 @@ -3,20 +3,19 @@ local pairs = Luan.pairs or error() local ipairs = Luan.ipairs or error() local stringify = Luan.stringify or error() -local String = require "luan:String.luan" -local trim = String.trim 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 Logging = require "luan:logging/Logging.luan" -local logger = Logging.logger "edit.html" +local logger = Logging.logger "admin/edit.html" local function response(name,content) @@ -38,17 +37,6 @@ <% end -local function text_to_list(text) - local list = {} - for line in Io.schemes.string(text).read_lines() do - line = trim(line) - if line ~= "" then - list[#list+1] = line - end - end - return list -end - local function posted(name) local mode = Http.request.parameters.mode or error() local users = Http.request.parameters.users or error()
--- a/src/lib/Shared.luan Sat Apr 30 20:33:16 2022 -0600 +++ b/src/lib/Shared.luan Sat Apr 30 21:50:46 2022 -0600 @@ -8,6 +8,7 @@ local parse = Luan.parse or error() local String = require "luan:String.luan" local split = String.split or error() +local trim = String.trim or error() local Binary = require "luan:Binary.luan" local binary_base64_decode = Binary.base64_decode or error() local binary_to_string = Binary.to_string or error() @@ -84,6 +85,17 @@ end Shared.list_to_set = list_to_set +function Shared.text_to_list(text) + local list = {} + for line in Io.schemes.string(text).read_lines() do + line = trim(line) + if line ~= "" then + list[#list+1] = line + end + end + return list +end + local raw_config = parse( uri("file:config/config.luano").read_text() ) local config = deep_copy(raw_config) for name, repo in pairs(config.repos) do
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/private/edit.html.luan Sat Apr 30 21:50:46 2022 -0600 @@ -0,0 +1,98 @@ +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 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 Logging = require "luan:logging/Logging.luan" +local logger = Logging.logger "private/edit.html" + + +local function response(content) +%> +<!doctype html> +<html> + <head> +<% head() %> + <title>Edit Mercurial Private</title> + <head> + <body> +<% header() %> + <div content> + <h1>Edit Private</h1> + <%=content%> + </div> + </body> +</html> +<% +end + +local function posted() + local users = Http.request.parameters.users or error() + users = text_to_list(users) + if #users == 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 raw_config = get_raw_config() + raw_config.private = users + 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([[<p>Private updated</p>]]) + else + response([[<p error>]]..error_msg..[[</p>]]) + end + return + end +%> +<!doctype html> +<html> + <head> +<% head() %> + <title>Edit Mercurial Private</title> + <head> + <body> +<% header() %> + <div content> + <h1>Edit Private</h1> + <form method=post> + <p> + <p> + <label>Users (one per line)</label> + <textarea name=users> +<% for _, user in ipairs(config.private or {}) do %> +<%=user%> +<% end %> +</textarea> + <label>Users who can access /private/</label> + </p> + <p> + <input type=submit value="Update Private"> + </p> + </form> + </div> + </body> +</html> +<% +end
--- a/update_repositories.luan Sat Apr 30 20:33:16 2022 -0600 +++ b/update_repositories.luan Sat Apr 30 21:50:46 2022 -0600 @@ -118,12 +118,23 @@ for _, repo in pairs(repos) do local writer = nginx_dir.child(repo.name..".pass").text_writer() for _, user_name in ipairs(repo.users) do - print_to( writer, htpasswds[user_name] ) + local htpasswd = htpasswds[user_name] or error(user_name) + print_to( writer, htpasswd ) end writer.close() end -local all = nginx_dir.child("_all.pass").read_text() -nginx_dir.child("_private.pass").write_text(all) +local private = config.private +if private == nil then + local all = nginx_dir.child("_all.pass").read_text() + nginx_dir.child("_private.pass").write_text(all) +else + local writer = nginx_dir.child("_private.pass").text_writer() + for _, user_name in ipairs(private) do + local htpasswd = htpasswds[user_name] or error(user_name) + print_to( writer, htpasswd ) + end + writer.close() +end -- private uri("file:src/private").mkdir()