| 
0
 | 
     1 local Luan = require "luan:Luan.luan"
 | 
| 
 | 
     2 local error = Luan.error
 | 
| 
 | 
     3 local pairs = Luan.pairs or error()
 | 
| 
 | 
     4 local ipairs = Luan.ipairs or error()
 | 
| 
 | 
     5 local stringify = Luan.stringify or error()
 | 
| 
 | 
     6 local Io = require "luan:Io.luan"
 | 
| 
 | 
     7 local Http = require "luan:http/Http.luan"
 | 
| 
 | 
     8 local Shared = require "site:/lib/Shared.luan"
 | 
| 
 | 
     9 local head = Shared.head or error()
 | 
| 
 | 
    10 local header = Shared.private_header or error()
 | 
| 
 | 
    11 local text_to_list = Shared.text_to_list or error()
 | 
| 
 | 
    12 local config = Shared.config or error()
 | 
| 
 | 
    13 local get_raw_config = Shared.get_raw_config or error()
 | 
| 
 | 
    14 local save_raw_config = Shared.save_raw_config or error()
 | 
| 
 | 
    15 local Logging = require "luan:logging/Logging.luan"
 | 
| 
4
 | 
    16 local logger = Logging.logger "private_users.html"
 | 
| 
0
 | 
    17 
 | 
| 
 | 
    18 
 | 
| 
 | 
    19 local function response(content)
 | 
| 
 | 
    20 %>
 | 
| 
 | 
    21 <!doctype html>
 | 
| 
24
 | 
    22 <html lang="en">
 | 
| 
0
 | 
    23 	<head>
 | 
| 
 | 
    24 <%		head() %>
 | 
| 
 | 
    25 		<title>Mercurial Private Users</title>
 | 
| 
 | 
    26 	</head>
 | 
| 
 | 
    27 	<body>
 | 
| 
 | 
    28 <%		header() %>
 | 
| 
 | 
    29 		<div content>
 | 
| 
 | 
    30 			<h1>Private Users</h1>
 | 
| 
 | 
    31 			<%=content%>
 | 
| 
 | 
    32 		</div>
 | 
| 
 | 
    33 	</body>
 | 
| 
 | 
    34 </html>
 | 
| 
 | 
    35 <%
 | 
| 
 | 
    36 end
 | 
| 
 | 
    37 
 | 
| 
 | 
    38 local function posted()
 | 
| 
 | 
    39 	local users = Http.request.parameters.users or error()
 | 
| 
 | 
    40 	users = text_to_list(users)
 | 
| 
 | 
    41 	if #users == 0 then
 | 
| 
 | 
    42 		return "Users cannot be empty"
 | 
| 
 | 
    43 	end
 | 
| 
 | 
    44 	for _, user in ipairs(users) do
 | 
| 
 | 
    45 		if config.users[user] == nil then
 | 
| 
 | 
    46 			return "user "..user.." is not a registered user"
 | 
| 
 | 
    47 		end
 | 
| 
 | 
    48 	end
 | 
| 
 | 
    49 	local raw_config = get_raw_config()
 | 
| 
 | 
    50 	raw_config.private = users
 | 
| 
 | 
    51 	save_raw_config(raw_config)
 | 
| 
 | 
    52 	return nil
 | 
| 
 | 
    53 end
 | 
| 
 | 
    54 
 | 
| 
 | 
    55 return function()
 | 
| 
 | 
    56 	Io.stdout = Http.response.text_writer()
 | 
| 
 | 
    57 	local error_msg = ""
 | 
| 
 | 
    58 	if Http.request.method == "POST" then
 | 
| 
 | 
    59 		local error_msg = posted()
 | 
| 
 | 
    60 		if error_msg == nil then
 | 
| 
 | 
    61 			response([[<p>Private updated</p>]])
 | 
| 
 | 
    62 		else
 | 
| 
 | 
    63 			response([[<p error>]]..error_msg..[[</p>]])
 | 
| 
 | 
    64 		end
 | 
| 
 | 
    65 		return
 | 
| 
 | 
    66 	end
 | 
| 
 | 
    67 %>
 | 
| 
 | 
    68 <!doctype html>
 | 
| 
24
 | 
    69 <html lang="en">
 | 
| 
0
 | 
    70 	<head>
 | 
| 
 | 
    71 <%		head() %>
 | 
| 
 | 
    72 		<title>Mercurial Private Users</title>
 | 
| 
 | 
    73 	</head>
 | 
| 
 | 
    74 	<body>
 | 
| 
 | 
    75 <%		header() %>
 | 
| 
 | 
    76 		<div content>
 | 
| 
 | 
    77 			<h1>Private Users</h1>
 | 
| 
 | 
    78 			<form method=post>
 | 
| 
 | 
    79 				<p>
 | 
| 
 | 
    80 					<label prompt>Users (one per line)</label>
 | 
| 
 | 
    81 					<textarea name=users>
 | 
| 
 | 
    82 <%	for user in pairs(config.private or {}) do %>
 | 
| 
 | 
    83 <%=user%>
 | 
| 
 | 
    84 <%	end %>
 | 
| 
 | 
    85 </textarea>
 | 
| 
 | 
    86 					<label prompt>Users who can access /private/</label>
 | 
| 
 | 
    87 				</p>
 | 
| 
 | 
    88 				<p>
 | 
| 
 | 
    89 					<input type=submit value="Update Private">
 | 
| 
 | 
    90 				</p>
 | 
| 
 | 
    91 			</form>
 | 
| 
 | 
    92 		</div>
 | 
| 
 | 
    93 	</body>
 | 
| 
 | 
    94 </html>
 | 
| 
 | 
    95 <%
 | 
| 
 | 
    96 end
 |