mirror of
https://git.zx2c4.com/cgit
synced 2024-11-25 01:48:41 +00:00
auth-filter: pass url with query string attached
Otherwise redirections come out wrong. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
a22855747e
commit
898b9e19e0
2
cgit.c
2
cgit.c
@ -645,7 +645,7 @@ static inline void open_auth_filter(const char *function)
|
|||||||
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 : "",
|
cgit_currentfullurl(),
|
||||||
cgit_loginurl());
|
cgit_loginurl());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
37
ui-shared.c
37
ui-shared.c
@ -68,15 +68,48 @@ char *cgit_hosturl(void)
|
|||||||
char *cgit_currenturl(void)
|
char *cgit_currenturl(void)
|
||||||
{
|
{
|
||||||
const char *root = cgit_rooturl();
|
const char *root = cgit_rooturl();
|
||||||
size_t len = strlen(root);
|
|
||||||
|
|
||||||
if (!ctx.qry.url)
|
if (!ctx.qry.url)
|
||||||
return xstrdup(root);
|
return xstrdup(root);
|
||||||
if (len && root[len - 1] == '/')
|
if (root[0] && root[strlen(root) - 1] == '/')
|
||||||
return fmtalloc("%s%s", root, ctx.qry.url);
|
return fmtalloc("%s%s", root, ctx.qry.url);
|
||||||
return fmtalloc("%s/%s", root, ctx.qry.url);
|
return fmtalloc("%s/%s", root, ctx.qry.url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *cgit_currentfullurl(void)
|
||||||
|
{
|
||||||
|
const char *root = cgit_rooturl();
|
||||||
|
const char *orig_query = ctx.env.query_string ? ctx.env.query_string : "";
|
||||||
|
size_t len = strlen(orig_query);
|
||||||
|
char *query = xmalloc(len + 2), *start_url, *ret;
|
||||||
|
|
||||||
|
/* Remove all url=... parts from query string */
|
||||||
|
memcpy(query + 1, orig_query, len + 1);
|
||||||
|
query[0] = '?';
|
||||||
|
start_url = query;
|
||||||
|
while ((start_url = strstr(start_url, "url=")) != NULL) {
|
||||||
|
if (start_url[-1] == '?' || start_url[-1] == '&') {
|
||||||
|
const char *end_url = strchr(start_url, '&');
|
||||||
|
if (end_url)
|
||||||
|
memmove(start_url, end_url + 1, strlen(end_url));
|
||||||
|
else
|
||||||
|
start_url[0] = '\0';
|
||||||
|
} else
|
||||||
|
++start_url;
|
||||||
|
}
|
||||||
|
if (!query[1])
|
||||||
|
query[0] = '\0';
|
||||||
|
|
||||||
|
if (!ctx.qry.url)
|
||||||
|
ret = fmtalloc("%s%s", root, query);
|
||||||
|
else if (root[0] && root[strlen(root) - 1] == '/')
|
||||||
|
ret = fmtalloc("%s%s%s", root, ctx.qry.url, query);
|
||||||
|
else
|
||||||
|
ret = fmtalloc("%s/%s%s", root, ctx.qry.url, query);
|
||||||
|
free(query);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
const char *cgit_rooturl(void)
|
const char *cgit_rooturl(void)
|
||||||
{
|
{
|
||||||
if (ctx.cfg.virtual_root)
|
if (ctx.cfg.virtual_root)
|
||||||
|
@ -5,6 +5,7 @@ extern const char *cgit_httpscheme(void);
|
|||||||
extern char *cgit_hosturl(void);
|
extern char *cgit_hosturl(void);
|
||||||
extern const char *cgit_rooturl(void);
|
extern const char *cgit_rooturl(void);
|
||||||
extern char *cgit_currenturl(void);
|
extern char *cgit_currenturl(void);
|
||||||
|
extern char *cgit_currentfullurl(void);
|
||||||
extern const char *cgit_loginurl(void);
|
extern const char *cgit_loginurl(void);
|
||||||
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,
|
||||||
|
Loading…
Reference in New Issue
Block a user