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:
джерело
df00ab1096
коміт
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->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
|
||||
|
@ -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
|
||||
|
2
filter.c
2
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:
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
Завантаження…
Посилання в новій задачі
Block a user