mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-17 18:51:10 +01:00
Disable xsrf for mercurial hook tokens
This commit is contained in:
@@ -32,6 +32,7 @@ import sonia.scm.repository.hooks.HookServer;
|
||||
import sonia.scm.security.AccessToken;
|
||||
import sonia.scm.security.AccessTokenBuilderFactory;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
import sonia.scm.security.Xsrf;
|
||||
import sonia.scm.web.HgUtil;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -109,11 +110,18 @@ public class DefaultHgEnvironmentBuilder implements HgEnvironmentBuilder {
|
||||
|
||||
private void write(ImmutableMap.Builder<String, String> env) {
|
||||
env.put(ENV_HOOK_PORT, String.valueOf(getHookPort()));
|
||||
AccessToken accessToken = accessTokenBuilderFactory.create().build();
|
||||
env.put(ENV_BEARER_TOKEN, CipherUtil.getInstance().encode(accessToken.compact()));
|
||||
env.put(ENV_BEARER_TOKEN, accessToken());
|
||||
env.put(ENV_CHALLENGE, hookEnvironment.getChallenge());
|
||||
}
|
||||
|
||||
private String accessToken() {
|
||||
AccessToken accessToken = accessTokenBuilderFactory.create()
|
||||
// disable xsrf protection, because we can not access the http servlet request for verification
|
||||
.custom(Xsrf.TOKEN_KEY, null)
|
||||
.build();
|
||||
return CipherUtil.getInstance().encode(accessToken.compact());
|
||||
}
|
||||
|
||||
private synchronized int getHookPort() {
|
||||
if (hookPort > 0) {
|
||||
return hookPort;
|
||||
|
||||
@@ -38,6 +38,7 @@ import sonia.scm.repository.hooks.HookServer;
|
||||
import sonia.scm.security.AccessToken;
|
||||
import sonia.scm.security.AccessTokenBuilderFactory;
|
||||
import sonia.scm.security.CipherUtil;
|
||||
import sonia.scm.security.Xsrf;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.File;
|
||||
@@ -118,7 +119,7 @@ class DefaultHgEnvironmentBuilderTest {
|
||||
|
||||
private void applyAccessToken(String compact) {
|
||||
AccessToken accessToken = mock(AccessToken.class);
|
||||
when(accessTokenBuilderFactory.create().build()).thenReturn(accessToken);
|
||||
when(accessTokenBuilderFactory.create().custom(Xsrf.TOKEN_KEY, null).build()).thenReturn(accessToken);
|
||||
when(accessToken.compact()).thenReturn(compact);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user