diff options
Diffstat (limited to 'testing/gitano-test-tool.in')
-rw-r--r-- | testing/gitano-test-tool.in | 67 |
1 files changed, 43 insertions, 24 deletions
diff --git a/testing/gitano-test-tool.in b/testing/gitano-test-tool.in index 78a6c0e..ae2ee4d 100644 --- a/testing/gitano-test-tool.in +++ b/testing/gitano-test-tool.in @@ -163,6 +163,19 @@ local function load_auth(fname) return ret end +local function set_stored_password(user, pass) + local fh = assert(io.open(user_home(user) .. "/passwd", "w")) + fh:write(pass .. "\n") + fh:close() +end + +local function load_stored_password(user) + local fh = assert(io.open(user_home(user) .. "/passwd", "r")) + local pass = fh:read("*l") + fh:close() + return pass +end + local function generate_exturl(user, key, repo) local authkeys = load_auth(ssh_key_file("testinstance", "authorized_keys")) local pubkey = (sio.open(ssh_key_file(user, key) .. ".pub", "r")):read("*l") @@ -179,7 +192,7 @@ local function generate_exturl(user, key, repo) esc(authline.user), esc(authline.keyset)) end -local function generate_httpurl(user, key, repo) +local function generate_httpurl(user, key, path) local authkeys = load_auth(ssh_key_file("testinstance", "authorized_keys")) local pubkey = (sio.open(ssh_key_file(user, key) .. ".pub", "r")):read("*l") local authline = assert(authkeys[pubkey]) @@ -189,7 +202,7 @@ local function generate_httpurl(user, key, repo) local port = tonumber(fh:read()) fh:close() - return ("http://%s:%s@localhost:%d/git/%s"):format(authline.user, authline.user, port, repo) + return ("http://%s:%s@localhost:%d/%s"):format(authline.user, load_stored_password(user), port, path) end function cmd_setgitconfig(username, key, value) @@ -218,6 +231,15 @@ function cmd_createunixuser(username) cmd_setgitconfig(username, "user.name", username) cmd_setgitconfig(username, "user.email", username.."@example.com") cmd_setgitconfig(username, "push.default", "simple") + set_stored_password(username, username) +end + +function cmd_getpasswd(username) + print(load_stored_password(username)) +end + +function cmd_setpasswd(username, passwd) + set_stored_password(username, passwd) end function cmd_createsshkey(username, keyname, optionaltype) @@ -283,7 +305,11 @@ function cmd_setupstandard(owning_user, master_key, bypass_key) fh:write(('server.port = %d\n'):format(port)) fh:write('server.modules = ( "mod_auth", "mod_alias", "mod_cgi", "mod_setenv" )\n') fh:write(([[ -$HTTP["url"] =~ ".*/gitano-command.cgi$" { +$HTTP["url"] =~ "/gitano-command.cgi$" { + alias.url += ( "/gitano-command.cgi" => %q ) + + cgi.assign = ("" => "") + setenv.add-environment = ( "HOME" => %q, "LUA_INIT" => %q, @@ -325,7 +351,8 @@ $HTTP["url"] =~ "^/git/.*$" { auth.backend = "htpasswd" auth.backend.htpasswd.userfile = %q } -]]):format(user_home(owning_user), lua_init, repo_path, htpasswd, +]]):format(gitano.config.lib_bin_path() .. "/gitano-command.cgi", + user_home(owning_user), lua_init, repo_path, htpasswd, gitano.config.lib_bin_path() .. "/gitano-smart-http.cgi", repo_path, user_home(owning_user), lua_init, repo_path, htpasswd)) @@ -366,7 +393,7 @@ end function cmd_clone(user, key, repo, localname, ...) local url if os.getenv("GTT_PROTO") == "http" then - url = generate_httpurl(user, key, repo) + url = generate_httpurl(user, key, "git/" .. repo) end if os.getenv("GTT_PROTO") == "ssh" then url = generate_exturl(user, key, repo) @@ -380,7 +407,7 @@ end function cmd_push(user, key, localname, repo, ...) local url if os.getenv("GTT_PROTO") == "http" then - url = generate_httpurl(user, key, repo) + url = generate_httpurl(user, key, "git/" .. repo) end if os.getenv("GTT_PROTO") == "ssh" then url = generate_exturl(user, key, repo) @@ -433,30 +460,22 @@ function cmd_runcommand_ssh(user, key, ...) end function cmd_runcommand_http(user, key, ...) - local authkeys = load_auth(ssh_key_file("testinstance", "authorized_keys")) - local pubkey = (sio.open(ssh_key_file(user, key) .. ".pub", "r")):read("*l") - local authline = assert(authkeys[pubkey]) - local cmdline = { - "testing/http-unwrap", - gitano.config.lib_bin_path() .. "/gitano-command.cgi", - env = { - HOME = user_home("testinstance"), - REMOTE_USER = authline.user, - REMOTE_ADDR = "10.0.0.1", - GITANO_ROOT = authline.repopath, - } - } + local httpurl = generate_httpurl(user, key, "gitano-command.cgi") local elems = esc_quote_all_({...}) - local function escape (str) - str = string.gsub (str, "([^0-9a-zA-Z !'()*._~-])", -- locale independent - function (c) return string.format ("%%%02X", string.byte(c)) end) - str = string.gsub (str, " ", "+") + local function escape(str) + str = string.gsub(str, "([^0-9a-zA-Z !'()*._~-])", -- locale independent + function (c) return string.format ("%%%02X", string.byte(c)) end) + str = string.gsub(str, " ", "+") return str end for i = 1, #elems do elems[i] = escape(elems[i]) end - cmdline.env.QUERY_STRING = "cmd=" .. table.concat(elems, "+") + httpurl = httpurl .. "?cmd=" .. table.concat(elems, "+") + local cmdline = { + "testing/http-unwrap", + httpurl + } run_program(cmdline) end |