Diff options
| -rw-r--r-- | source/ui-shared.c | 10 | |
| -rwxr-xr-x | tests/t0505-auth.sh | 28 |
2 files changed, 35 insertions, 3 deletions
diff --git a/source/ui-shared.c b/source/ui-shared.c index 268de57..5e4aec2 100644 --- a/source/ui-shared.c +++ b/source/ui-shared.c @@ -446,7 +446,10 @@ static void print_header(void) html("</form>\n"); } - if (ctx.repo) { + // Until the auth filter lets a visitor in, the repository keeps its + // description and owner to itself, and the site's description fills + // the line instead. + if (ctx.repo && ctx.env.authenticated) { html("<p class='sub desc'>"); html_txt(ctx.repo->desc); html("</p>\n"); @@ -1470,8 +1473,9 @@ static void print_docstart(void) html_txtf(" @ %.*s", SHORT_HASH_LEN, oid_to_hex(pinned)); html("</title>\n"); // The placeholder a scanned repository carries instead of a description - // is left out, since it describes nothing. - desc = ctx.repo ? ctx.repo->desc : ctx.cfg.root_desc; + // is left out, since it describes nothing. Until the auth filter lets + // the visitor in, the site's description stands in, as in the header. + desc = ctx.repo && ctx.env.authenticated ? ctx.repo->desc : ctx.cfg.root_desc; if (desc && *desc && desc != cgit_default_repo_desc) { html("<meta name='description' content='"); html_attr(desc); diff --git a/tests/t0505-auth.sh b/tests/t0505-auth.sh index 7dd4a36..f7096ca 100755 --- a/tests/t0505-auth.sh +++ b/tests/t0505-auth.sh @@ -74,4 +74,32 @@ test_expect_success CGIT_LUA_NOAUTH 'without the modules a protected repository grep "Unable to complete the request" tmp ' +# A filter of the test's own turns every visitor away, which needs no Lua. +# Until a visitor is let in, the header of a protected repository shows the +# site's description in place of its own and no owner, even for a +# repository hidden from the index. +test_expect_success 'the login page keeps the repository to itself' ' + write_script deny.sh <<-\EOF && + test "$1" = body && echo "<p>sign in</p>" + exit 0 + EOF + cat >denyrc <<-EOF && + virtual-root=/ + cache-size=0 + root-desc=the whole site + auth-filter=exec:$PWD/deny.sh + repo.url=authy + repo.path=$PWD/repos/authy/.git + repo.desc=the secret plan + repo.owner=Mallory Owner + repo.hide=1 + EOF + cgit_rc denyrc "url=authy/log/" >tmp && + grep "<p>sign in</p>" tmp && + grep "<p class=.sub desc.>the whole site</p>" tmp && + grep "<meta name=.description. content=.the whole site.>" tmp && + ! grep "secret plan" tmp && + ! grep "Mallory" tmp +' + test_done |
