| 
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.admin_header or error()
 | 
| 
 | 
    11 local get_user = Shared.get_user or error()
 | 
| 
 | 
    12 local text_to_list = Shared.text_to_list or error()
 | 
| 
 | 
    13 local config = Shared.config or error()
 | 
| 
 | 
    14 local list_to_set = Shared.list_to_set or error()
 | 
| 
 | 
    15 local get_raw_config = Shared.get_raw_config or error()
 | 
| 
 | 
    16 local save_raw_config = Shared.save_raw_config or error()
 | 
| 
 | 
    17 local admin_return = Shared.admin_return or error()
 | 
| 
 | 
    18 local Logging = require "luan:logging/Logging.luan"
 | 
| 
 | 
    19 local logger = Logging.logger "admin/edit.html"
 | 
| 
 | 
    20 
 | 
| 
 | 
    21 
 | 
| 
 | 
    22 local function response(name,content)
 | 
| 
 | 
    23 %>
 | 
| 
 | 
    24 <!doctype html>
 | 
| 
24
 | 
    25 <html lang="en">
 | 
| 
0
 | 
    26 	<head>
 | 
| 
 | 
    27 <%		head() %>
 | 
| 
 | 
    28 		<title>Edit Mercurial Repository</title>
 | 
| 
 | 
    29 	</head>
 | 
| 
 | 
    30 	<body>
 | 
| 
 | 
    31 <%		header() %>
 | 
| 
 | 
    32 		<div content>
 | 
| 
 | 
    33 			<h1>Edit Repository <a href="/repo/<%=name%>"><%=name%></a></h1>
 | 
| 
 | 
    34 			<%=content%>
 | 
| 
 | 
    35 		</div>
 | 
| 
 | 
    36 	</body>
 | 
| 
 | 
    37 </html>
 | 
| 
 | 
    38 <%
 | 
| 
 | 
    39 end
 | 
| 
 | 
    40 
 | 
| 
 | 
    41 local function posted(name)
 | 
| 
 | 
    42 	local mode = Http.request.parameters.mode or error()
 | 
| 
 | 
    43 	local users = Http.request.parameters.users or error()
 | 
| 
 | 
    44 	local admins = Http.request.parameters.admins or error()
 | 
| 
 | 
    45 	users = text_to_list(users)
 | 
| 
 | 
    46 	admins = text_to_list(admins)
 | 
| 
 | 
    47 	if #users == 0 then
 | 
| 
 | 
    48 		return "Users cannot be empty"
 | 
| 
 | 
    49 	end
 | 
| 
 | 
    50 	if #admins == 0 then
 | 
| 
 | 
    51 		return "Users cannot be empty"
 | 
| 
 | 
    52 	end
 | 
| 
 | 
    53 	for _, user in ipairs(users) do
 | 
| 
 | 
    54 		if config.users[user] == nil then
 | 
| 
 | 
    55 			return "user "..user.." is not a registered user"
 | 
| 
 | 
    56 		end
 | 
| 
 | 
    57 	end
 | 
| 
 | 
    58 	local user_set = list_to_set(users)
 | 
| 
 | 
    59 	for _, user in ipairs(admins) do
 | 
| 
 | 
    60 		if config.users[user] == nil then
 | 
| 
 | 
    61 			return "admin "..user.." is not a registered user"
 | 
| 
 | 
    62 		end
 | 
| 
 | 
    63 		if not user_set[user] then
 | 
| 
 | 
    64 			return "admin "..user.." is not a user in this repo"
 | 
| 
 | 
    65 		end
 | 
| 
 | 
    66 	end
 | 
| 
 | 
    67 	local raw_config = get_raw_config()
 | 
| 
 | 
    68 	raw_config.repos[name] = {
 | 
| 
 | 
    69 		mode = mode
 | 
| 
 | 
    70 		users = users
 | 
| 
 | 
    71 		admins = admins
 | 
| 
 | 
    72 	}
 | 
| 
 | 
    73 	save_raw_config(raw_config)
 | 
| 
 | 
    74 	return nil
 | 
| 
 | 
    75 end
 | 
| 
 | 
    76 
 | 
| 
 | 
    77 return function()
 | 
| 
 | 
    78 	local name = Http.request.parameters.repo or error()
 | 
| 
 | 
    79 	local repo = config.repos[name] or error(name)
 | 
| 
 | 
    80 	repo.admins[get_user()] or error "not admin"
 | 
| 
 | 
    81 	Io.stdout = Http.response.text_writer()
 | 
| 
 | 
    82 	local error_msg = ""
 | 
| 
 | 
    83 	if Http.request.method == "POST" then
 | 
| 
 | 
    84 		local error_msg = posted(name)
 | 
| 
 | 
    85 		if error_msg == nil then
 | 
| 
 | 
    86 			response(name,[[<p>Repository updated</p>]]..admin_return)
 | 
| 
 | 
    87 		else
 | 
| 
 | 
    88 			response(name,[[<p error>]]..error_msg..[[</p>]])
 | 
| 
 | 
    89 		end
 | 
| 
 | 
    90 		return
 | 
| 
 | 
    91 	end
 | 
| 
 | 
    92 %>
 | 
| 
 | 
    93 <!doctype html>
 | 
| 
24
 | 
    94 <html lang="en">
 | 
| 
0
 | 
    95 	<head>
 | 
| 
 | 
    96 <%		head() %>
 | 
| 
 | 
    97 		<title>Edit Mercurial Repository</title>
 | 
| 
 | 
    98 	</head>
 | 
| 
 | 
    99 	<body>
 | 
| 
 | 
   100 <%		header() %>
 | 
| 
 | 
   101 		<div content>
 | 
| 
 | 
   102 			<h1>Edit Repository <a href="/repo/<%=name%>/"><%=name%></a></h1>
 | 
| 
 | 
   103 			<form method=post>
 | 
| 
 | 
   104 				<p>
 | 
| 
 | 
   105 					<select name=mode>
 | 
| 
 | 
   106 						<option <%= repo.mode=="public" and "selected" or "" %> >public</option>
 | 
| 
 | 
   107 						<option <%= repo.mode=="private" and "selected" or "" %> >private</option>
 | 
| 
 | 
   108 					</select>
 | 
| 
 | 
   109 					<label prompt>If private then only users access this repo.</label>
 | 
| 
 | 
   110 				</p>
 | 
| 
 | 
   111 				<p>
 | 
| 
 | 
   112 					<label prompt>Users (one per line)</label>
 | 
| 
 | 
   113 					<textarea name=users>
 | 
| 
 | 
   114 <%	for user in pairs(repo.users) do %>
 | 
| 
 | 
   115 <%=user%>
 | 
| 
 | 
   116 <%	end %>
 | 
| 
 | 
   117 </textarea>
 | 
| 
 | 
   118 					<label prompt>Users can push to this repo.</label>
 | 
| 
 | 
   119 				</p>
 | 
| 
 | 
   120 				<p>
 | 
| 
 | 
   121 					<label prompt>Admins (one per line)</label>
 | 
| 
 | 
   122 					<textarea name=admins>
 | 
| 
 | 
   123 <%	for user in pairs(repo.admins) do %>
 | 
| 
 | 
   124 <%=user%>
 | 
| 
 | 
   125 <%	end %>
 | 
| 
 | 
   126 </textarea>
 | 
| 
 | 
   127 					<label prompt>Admins can manage this repo.</label>
 | 
| 
 | 
   128 				</p>
 | 
| 
 | 
   129 				<p>
 | 
| 
 | 
   130 					<input type=submit value="Update Repo">
 | 
| 
 | 
   131 				</p>
 | 
| 
 | 
   132 			</form>
 | 
| 
 | 
   133 		</div>
 | 
| 
 | 
   134 	</body>
 | 
| 
 | 
   135 </html>
 | 
| 
 | 
   136 <%
 | 
| 
 | 
   137 end
 |