mirror of
https://git.zx2c4.com/cgit
synced 2024-11-21 16:08:41 +00:00
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:
parent
df00ab1096
commit
a431326e8f
3
cgit.c
3
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->env.https ? ctx->env.https : "",
|
||||||
ctx->qry.repo ? ctx->qry.repo : "",
|
ctx->qry.repo ? ctx->qry.repo : "",
|
||||||
ctx->qry.page ? ctx->qry.page : "",
|
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
|
/* We intentionally keep this rather small, instead of looping and
|
||||||
|
@ -645,7 +645,7 @@ source filter::
|
|||||||
filtered contents is expected on standard output.
|
filtered contents is expected on standard output.
|
||||||
|
|
||||||
auth filter::
|
auth filter::
|
||||||
The authentication filter receives 11 parameters:
|
The authentication filter receives 12 parameters:
|
||||||
- filter action, explained below, which specifies which action the
|
- filter action, explained below, which specifies which action the
|
||||||
filter is called for
|
filter is called for
|
||||||
- http cookie
|
- http cookie
|
||||||
@ -656,8 +656,9 @@ auth filter::
|
|||||||
- cgit repo
|
- cgit repo
|
||||||
- cgit page
|
- cgit page
|
||||||
- cgit url
|
- cgit url
|
||||||
|
- cgit login url
|
||||||
When the filter action is "body", this filter must write to output the
|
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 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,
|
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
|
in the exit code / close function. If the filter action is
|
||||||
|
2
filter.c
2
filter.c
@ -417,7 +417,7 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
|
|||||||
|
|
||||||
switch (filtertype) {
|
switch (filtertype) {
|
||||||
case AUTH:
|
case AUTH:
|
||||||
argument_count = 11;
|
argument_count = 12;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EMAIL:
|
case EMAIL:
|
||||||
|
@ -122,12 +122,7 @@ function filter_open(...)
|
|||||||
cgit["repo"] = select(9, ...)
|
cgit["repo"] = select(9, ...)
|
||||||
cgit["page"] = select(10, ...)
|
cgit["page"] = select(10, ...)
|
||||||
cgit["url"] = select(11, ...)
|
cgit["url"] = select(11, ...)
|
||||||
|
cgit["login"] = select(12, ...)
|
||||||
cgit["login"] = ""
|
|
||||||
for _ in cgit["url"]:gfind("/") do
|
|
||||||
cgit["login"] = cgit["login"] .. "../"
|
|
||||||
end
|
|
||||||
cgit["login"] = cgit["login"] .. "?p=login"
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -73,6 +73,14 @@ const char *cgit_rooturl()
|
|||||||
return ctx.cfg.script_name;
|
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)
|
char *cgit_repourl(const char *reponame)
|
||||||
{
|
{
|
||||||
if (ctx.cfg.virtual_root)
|
if (ctx.cfg.virtual_root)
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
extern const char *cgit_httpscheme();
|
extern const char *cgit_httpscheme();
|
||||||
extern const char *cgit_hosturl();
|
extern const char *cgit_hosturl();
|
||||||
extern const char *cgit_rooturl();
|
extern const char *cgit_rooturl();
|
||||||
|
extern const char *cgit_loginurl();
|
||||||
extern char *cgit_repourl(const char *reponame);
|
extern char *cgit_repourl(const char *reponame);
|
||||||
extern char *cgit_fileurl(const char *reponame, const char *pagename,
|
extern char *cgit_fileurl(const char *reponame, const char *pagename,
|
||||||
const char *filename, const char *query);
|
const char *filename, const char *query);
|
||||||
|
Loading…
Reference in New Issue
Block a user