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>
This commit is contained in:
Jason A. Donenfeld 2014-01-16 23:21:54 +01:00
parent df00ab1096
commit a431326e8f
6 changed files with 16 additions and 10 deletions

3
cgit.c
View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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)

View File

@ -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);