about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2014-01-16 23:21:54 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2014-01-16 23:21:54 +0100
commita431326e8fab8153905fbde036dd3c9fb4cc8eaa (patch)
treeeaff3c6984a1c518c0180d5437853243ca6346a4
parentauth: lua string comparisons are time invariant (diff)
downloadcgit-pink-a431326e8fab8153905fbde036dd3c9fb4cc8eaa.tar.gz
cgit-pink-a431326e8fab8153905fbde036dd3c9fb4cc8eaa.zip
auth: have cgit calculate login address
This way we're sure to use virtual root, or any other strangeness
encountered.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r--cgit.c3
-rw-r--r--cgitrc.5.txt5
-rw-r--r--filter.c2
-rw-r--r--filters/simple-authentication.lua7
-rw-r--r--ui-shared.c8
-rw-r--r--ui-shared.h1
6 files changed, 16 insertions, 10 deletions
diff --git a/cgit.c b/cgit.c
index be1265d..994957f 100644
--- a/cgit.c
+++ b/cgit.c
@@ -611,7 +611,8 @@ static inline void open_auth_filter(struct cgit_context *ctx, const char *functi
 		ctx->env.https ? ctx->env.https : "",
 		ctx->qry.repo ? ctx->qry.repo : "",
 		ctx->qry.page ? ctx->qry.page : "",
-		ctx->qry.url ? ctx->qry.url : "");
+		ctx->qry.url ? ctx->qry.url : "",
+		cgit_loginurl());
 }
 
 /* We intentionally keep this rather small, instead of looping and
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 682d8bb..8eafc4a 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -645,7 +645,7 @@ source filter::
 	filtered contents is expected on standard output.
 
 auth filter::
-	The authentication filter receives 11 parameters:
+	The authentication filter receives 12 parameters:
 	  - filter action, explained below, which specifies which action the
 	    filter is called for
 	  - http cookie
@@ -656,8 +656,9 @@ auth filter::
 	  - cgit repo
 	  - cgit page
 	  - cgit url
+	  - cgit login url
 	When the filter action is "body", this filter must write to output the
-	HTML for displaying the login form, which POSTs to "/?p=login". When
+	HTML for displaying the login form, which POSTs to the login url. When
 	the filter action is "authenticate-cookie", this filter must validate
 	the http cookie and return a 0 if it is invalid or 1 if it is invalid,
 	in the exit code / close function. If the filter action is
diff --git a/filter.c b/filter.c
index a5e5e4b..5ee4e71 100644
--- a/filter.c
+++ b/filter.c
@@ -417,7 +417,7 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
 
 	switch (filtertype) {
 		case AUTH:
-			argument_count = 11;
+			argument_count = 12;
 			break;
 
 		case EMAIL:
diff --git a/filters/simple-authentication.lua b/filters/simple-authentication.lua
index 5c4f074..9291302 100644
--- a/filters/simple-authentication.lua
+++ b/filters/simple-authentication.lua
@@ -122,12 +122,7 @@ function filter_open(...)
 	cgit["repo"] = select(9, ...)
 	cgit["page"] = select(10, ...)
 	cgit["url"] = select(11, ...)
-
-	cgit["login"] = ""
-	for _ in cgit["url"]:gfind("/") do
-		cgit["login"] = cgit["login"] .. "../"
-	end
-	cgit["login"] = cgit["login"] .. "?p=login"
+	cgit["login"] = select(12, ...)
 
 end
 
diff --git a/ui-shared.c b/ui-shared.c
index 4f47c50..0838e18 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -73,6 +73,14 @@ const char *cgit_rooturl()
 		return ctx.cfg.script_name;
 }
 
+const char *cgit_loginurl()
+{
+	static const char *login_url = 0;
+	if (!login_url)
+		login_url = fmtalloc("%s?p=login", cgit_rooturl());
+	return login_url;
+}
+
 char *cgit_repourl(const char *reponame)
 {
 	if (ctx.cfg.virtual_root)
diff --git a/ui-shared.h b/ui-shared.h
index 5987e77..889c28f 100644
--- a/ui-shared.h
+++ b/ui-shared.h
@@ -4,6 +4,7 @@
 extern const char *cgit_httpscheme();
 extern const char *cgit_hosturl();
 extern const char *cgit_rooturl();
+extern const char *cgit_loginurl();
 extern char *cgit_repourl(const char *reponame);
 extern char *cgit_fileurl(const char *reponame, const char *pagename,
 			  const char *filename, const char *query);
title='2019-02-22 14:19:20 -0500'>2019-02-22Show status window while connectingJune McEnroe 2019-02-22Reorganize UI code for the umpteenth timeJune McEnroe It's actually in a good state now, I think. 2019-02-21Replace "view" with "window"June McEnroe I think originally I didn't want to use the same word as curses WINDOW but it's really much clearer for the user if they're just called windows. UI code probably needs yet another rewrite though. Still feels messy. 2019-02-21Remove ROT13June McEnroe It's just not convenient when it can only do the whole line... 2019-02-21Clean up man pageJune McEnroe 2019-01-26Draw UI before connectingJune McEnroe Otherwise the "Traveling" message isn't visible while connecting. 2019-01-25Avoid unused variable warnings with getyxJune McEnroe 2019-01-25Add GNU/Linux build instructionsJune McEnroe