ContainerAuthFilter: honor username provided by container

When 'trustContainerAuth' is enabled and proxy does authentication
on root (instead of '/login/'), ServletRequest#getRemoteUser is
null. In this case we need to pull the username from 'Authorization'
header. It is done the same way in HttpAuthFilter already.

Move username extraction logic from HttpAuthFilter to
RemoteUserUtil and add some tests.

Update javadoc to reflect current situation:
ContainerAuthFilter is also used for the REST API; see:
GitOverHttpModule#configureServlets: filter("/a/*").through(authFilter)

Change-Id: I0cf21fb7ecd8a958fad270704c11ebfffd9fea93
Bug: Issue 2209
This commit is contained in:
Urs Wolfer
2015-02-28 19:47:11 +01:00
committed by David Pursehouse
parent 17a6fb08d7
commit 7c000e31bb
5 changed files with 144 additions and 47 deletions

View File

@@ -0,0 +1,32 @@
// Copyright (C) 2015 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.httpd;
import static com.google.common.truth.Truth.assertThat;
import static com.google.gerrit.httpd.RemoteUserUtil.extractUsername;
import org.junit.Test;
public class RemoteUserUtilTest {
@Test
public void testExtractUsername() {
assertThat(extractUsername(null)).isNull();
assertThat(extractUsername("")).isNull();
assertThat(extractUsername("Basic dXNlcjpwYXNzd29yZA=="))
.isEqualTo("user");
assertThat(extractUsername("Digest username=\"user\", realm=\"test\""))
.isEqualTo("user");
}
}