aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld2014-01-16 23:21:54 +0100
committerJason A. Donenfeld2014-01-16 23:21:54 +0100
commita431326e8fab8153905fbde036dd3c9fb4cc8eaa (patch)
treeeaff3c6984a1c518c0180d5437853243ca6346a4
parentdf00ab1096868b3cffe563c48de5572f78b50392 (diff)
downloadcgit-a431326e8fab8153905fbde036dd3c9fb4cc8eaa.tar.gz
cgit-a431326e8fab8153905fbde036dd3c9fb4cc8eaa.tar.bz2
cgit-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
611 ctx->env.https ? ctx->env.https : "", 611 ctx->env.https ? ctx->env.https : "",
612 ctx->qry.repo ? ctx->qry.repo : "", 612 ctx->qry.repo ? ctx->qry.repo : "",
613 ctx->qry.page ? ctx->qry.page : "", 613 ctx->qry.page ? ctx->qry.page : "",
614 ctx->qry.url ? ctx->qry.url : ""); 614 ctx->qry.url ? ctx->qry.url : "",
615 cgit_loginurl());
615} 616}
616 617
617/* We intentionally keep this rather small, instead of looping and 618/* 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::
645 filtered contents is expected on standard output. 645 filtered contents is expected on standard output.
646 646
647auth filter:: 647auth filter::
648 The authentication filter receives 11 parameters: 648 The authentication filter receives 12 parameters:
649 - filter action, explained below, which specifies which action the 649 - filter action, explained below, which specifies which action the
650 filter is called for 650 filter is called for
651 - http cookie 651 - http cookie
@@ -656,8 +656,9 @@ auth filter::
656 - cgit repo 656 - cgit repo
657 - cgit page 657 - cgit page
658 - cgit url 658 - cgit url
659 - cgit login url
659 When the filter action is "body", this filter must write to output the 660 When the filter action is "body", this filter must write to output the
660 HTML for displaying the login form, which POSTs to "/?p=login". When 661 HTML for displaying the login form, which POSTs to the login url. When
661 the filter action is "authenticate-cookie", this filter must validate 662 the filter action is "authenticate-cookie", this filter must validate
662 the http cookie and return a 0 if it is invalid or 1 if it is invalid, 663 the http cookie and return a 0 if it is invalid or 1 if it is invalid,
663 in the exit code / close function. If the filter action is 664 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)
417 417
418 switch (filtertype) { 418 switch (filtertype) {
419 case AUTH: 419 case AUTH:
420 argument_count = 11; 420 argument_count = 12;
421 break; 421 break;
422 422
423 case EMAIL: 423 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(...)
122 cgit["repo"] = select(9, ...) 122 cgit["repo"] = select(9, ...)
123 cgit["page"] = select(10, ...) 123 cgit["page"] = select(10, ...)
124 cgit["url"] = select(11, ...) 124 cgit["url"] = select(11, ...)
125 125 cgit["login"] = select(12, ...)
126 cgit["login"] = ""
127 for _ in cgit["url"]:gfind("/") do
128 cgit["login"] = cgit["login"] .. "../"
129 end
130 cgit["login"] = cgit["login"] .. "?p=login"
131 126
132end 127end
133 128
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()
73 return ctx.cfg.script_name; 73 return ctx.cfg.script_name;
74} 74}
75 75
76const char *cgit_loginurl()
77{
78 static const char *login_url = 0;
79 if (!login_url)
80 login_url = fmtalloc("%s?p=login", cgit_rooturl());
81 return login_url;
82}
83
76char *cgit_repourl(const char *reponame) 84char *cgit_repourl(const char *reponame)
77{ 85{
78 if (ctx.cfg.virtual_root) 86 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 @@
4extern const char *cgit_httpscheme(); 4extern const char *cgit_httpscheme();
5extern const char *cgit_hosturl(); 5extern const char *cgit_hosturl();
6extern const char *cgit_rooturl(); 6extern const char *cgit_rooturl();
7extern const char *cgit_loginurl();
7extern char *cgit_repourl(const char *reponame); 8extern char *cgit_repourl(const char *reponame);
8extern char *cgit_fileurl(const char *reponame, const char *pagename, 9extern char *cgit_fileurl(const char *reponame, const char *pagename,
9 const char *filename, const char *query); 10 const char *filename, const char *query);