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
والد 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);