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>
这个提交包含在:
Jason A. Donenfeld 2014-01-16 23:21:54 +01:00
父节点 df00ab1096
当前提交 a431326e8f
共有 6 个文件被更改,包括 16 次插入10 次删除

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

查看文件

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