summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.junit
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit.junit')
-rw-r--r--org.eclipse.jgit.junit/BUILD2
-rw-r--r--org.eclipse.jgit.junit/META-INF/MANIFEST.MF21
-rw-r--r--org.eclipse.jgit.junit/pom.xml12
-rw-r--r--org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java331
4 files changed, 1 insertions, 365 deletions
diff --git a/org.eclipse.jgit.junit/BUILD b/org.eclipse.jgit.junit/BUILD
index cba2318df4..74498fdf62 100644
--- a/org.eclipse.jgit.junit/BUILD
+++ b/org.eclipse.jgit.junit/BUILD
@@ -8,8 +8,6 @@ java_library(
resources = glob(["resources/**"]),
deps = [
"//lib:junit",
- "//lib:sshd-core",
- "//lib:sshd-sftp",
# We want these deps to be provided_deps
"//org.eclipse.jgit:jgit",
],
diff --git a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
index 044576fcc8..6504fa9c69 100644
--- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
@@ -8,25 +8,7 @@ Bundle-Localization: plugin
Bundle-Vendor: %provider_name
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.apache.sshd.common;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.config.keys;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.file.virtualfs;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.helpers;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.io;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.kex;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.keyprovider;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.session;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.util.buffer;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.util.logging;version="[2.0.0,2.1.0)",
- org.apache.sshd.common.util.security;version="[2.0.0,2.1.0)",
- org.apache.sshd.server;version="[2.0.0,2.1.0)",
- org.apache.sshd.server.auth;version="[2.0.0,2.1.0)",
- org.apache.sshd.server.auth.gss;version="[2.0.0,2.1.0)",
- org.apache.sshd.server.command;version="[2.0.0,2.1.0)",
- org.apache.sshd.server.session;version="[2.0.0,2.1.0)",
- org.apache.sshd.server.shell;version="[2.0.0,2.1.0)",
- org.apache.sshd.server.subsystem.sftp;version="[2.0.0,2.1.0)",
- org.eclipse.jgit.annotations;version="[5.2.0,5.3.0)",
+Import-Package: org.eclipse.jgit.annotations;version="[5.2.0,5.3.0)",
org.eclipse.jgit.api;version="[5.2.0,5.3.0)",
org.eclipse.jgit.api.errors;version="[5.2.0,5.3.0)",
org.eclipse.jgit.dircache;version="[5.2.0,5.3.0)",
@@ -61,5 +43,4 @@ Export-Package: org.eclipse.jgit.junit;version="5.2.0";
org.junit.runners.model,
org.junit.runner,
org.eclipse.jgit.util.time",
- org.eclipse.jgit.junit.ssh;version="5.2.0",
org.eclipse.jgit.junit.time;version="5.2.0";uses:="org.eclipse.jgit.util.time"
diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml
index 112c73f652..24e2c71f9b 100644
--- a/org.eclipse.jgit.junit/pom.xml
+++ b/org.eclipse.jgit.junit/pom.xml
@@ -74,18 +74,6 @@
</dependency>
<dependency>
- <groupId>org.apache.sshd</groupId>
- <artifactId>sshd-core</artifactId>
- <version>${apache-sshd-version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.sshd</groupId>
- <artifactId>sshd-sftp</artifactId>
- <version>${apache-sshd-version}</version>
- </dependency>
-
- <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>provided</scope>
diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java
deleted file mode 100644
index 97058e76ea..0000000000
--- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/ssh/SshTestGitServer.java
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright (C) 2018, Thomas Wolf <thomas.wolf@paranor.ch>
- * and other copyright owners as documented in the project's IP log.
- *
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Distribution License v1.0 which
- * accompanies this distribution, is reproduced below, and is
- * available at http://www.eclipse.org/org/documents/edl-v10.php
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials provided
- * with the distribution.
- *
- * - Neither the name of the Eclipse Foundation, Inc. nor the
- * names of its contributors may be used to endorse or promote
- * products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.eclipse.jgit.junit.ssh;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.security.GeneralSecurityException;
-import java.security.KeyPair;
-import java.security.PublicKey;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.config.keys.AuthorizedKeyEntry;
-import org.apache.sshd.common.config.keys.KeyUtils;
-import org.apache.sshd.common.config.keys.PublicKeyEntryResolver;
-import org.apache.sshd.common.file.virtualfs.VirtualFileSystemFactory;
-import org.apache.sshd.common.keyprovider.KeyPairProvider;
-import org.apache.sshd.common.session.Session;
-import org.apache.sshd.common.util.buffer.Buffer;
-import org.apache.sshd.common.util.security.SecurityUtils;
-import org.apache.sshd.server.ServerAuthenticationManager;
-import org.apache.sshd.server.SshServer;
-import org.apache.sshd.server.auth.UserAuth;
-import org.apache.sshd.server.auth.gss.GSSAuthenticator;
-import org.apache.sshd.server.auth.gss.UserAuthGSS;
-import org.apache.sshd.server.auth.gss.UserAuthGSSFactory;
-import org.apache.sshd.server.command.AbstractCommandSupport;
-import org.apache.sshd.server.session.ServerSession;
-import org.apache.sshd.server.shell.UnknownCommand;
-import org.apache.sshd.server.subsystem.sftp.SftpSubsystemFactory;
-import org.eclipse.jgit.annotations.NonNull;
-import org.eclipse.jgit.lib.Repository;
-import org.eclipse.jgit.transport.ReceivePack;
-import org.eclipse.jgit.transport.RemoteConfig;
-import org.eclipse.jgit.transport.UploadPack;
-
-/**
- * A simple ssh/sftp git <em>test</em> server based on Apache MINA sshd.
- * <p>
- * Supports only a single repository. Authenticates only the given test user
- * against his given test public key. Supports fetch and push.
- * </p>
- *
- * @since 5.2
- */
-public class SshTestGitServer {
-
- @NonNull
- private String testUser;
-
- @NonNull
- private PublicKey testKey;
-
- @NonNull
- private Repository repository;
-
- @NonNull
- private List<KeyPair> hostKeys = new ArrayList<>();
-
- private final ExecutorService executorService = Executors
- .newFixedThreadPool(2);
-
- private final SshServer server;
-
- /**
- * Creates a ssh git <em>test</em> server. It serves one single repository,
- * and accepts public-key authentication for exactly one test user.
- *
- * @param testUser
- * user name of the test user
- * @param testKey
- * <em>private</em> key file of the test user; the server will
- * only user the public key from it
- * @param repository
- * to serve
- * @param hostKey
- * the unencrypted private key to use as host key
- * @throws IOException
- * @throws GeneralSecurityException
- */
- public SshTestGitServer(@NonNull String testUser, @NonNull Path testKey,
- @NonNull Repository repository, @NonNull byte[] hostKey)
- throws IOException, GeneralSecurityException {
- this.testUser = testUser;
- setTestUserPublicKey(testKey);
- this.repository = repository;
- server = SshServer.setUpDefaultServer();
- // Set host key
- try (ByteArrayInputStream in = new ByteArrayInputStream(hostKey)) {
- hostKeys.add(SecurityUtils.loadKeyPairIdentity("", in, null));
- } catch (IOException | GeneralSecurityException e) {
- // Ignore.
- }
- server.setKeyPairProvider(new KeyPairProvider() {
-
- @Override
- public Iterable<KeyPair> loadKeys() {
- return hostKeys;
- }
-
- });
- // SFTP.
- server.setFileSystemFactory(new VirtualFileSystemFactory() {
-
- @Override
- protected Path computeRootDir(Session session) throws IOException {
- return SshTestGitServer.this.repository.getDirectory()
- .getParentFile().getAbsoluteFile().toPath();
- }
- });
- server.setUserAuthFactories(getAuthFactories());
- server.setSubsystemFactories(Collections
- .singletonList((new SftpSubsystemFactory.Builder()).build()));
- // No shell
- server.setShellFactory(null);
- // Disable some authentications
- server.setPasswordAuthenticator(null);
- server.setKeyboardInteractiveAuthenticator(null);
- server.setHostBasedAuthenticator(null);
- // Pretend we did gssapi-with-mic.
- server.setGSSAuthenticator(new GSSAuthenticator() {
- @Override
- public boolean validateInitialUser(ServerSession session,
- String user) {
- return false;
- }
- });
- // Accept only the test user/public key
- server.setPublickeyAuthenticator((userName, publicKey, session) -> {
- return SshTestGitServer.this.testUser.equals(userName) && KeyUtils
- .compareKeys(SshTestGitServer.this.testKey, publicKey);
- });
- server.setCommandFactory(command -> {
- if (command.startsWith(RemoteConfig.DEFAULT_UPLOAD_PACK)) {
- return new GitUploadPackCommand(command, executorService);
- } else if (command.startsWith(RemoteConfig.DEFAULT_RECEIVE_PACK)) {
- return new GitReceivePackCommand(command, executorService);
- }
- return new UnknownCommand(command);
- });
- }
-
- private static class FakeUserAuthGSS extends UserAuthGSS {
- @Override
- protected Boolean doAuth(Buffer buffer, boolean initial)
- throws Exception {
- // We always reply that we did do this, but then we fail at the
- // first token message. That way we can test that the client-side
- // sends the correct initial request and then is skipped correctly,
- // even if it causes a GSSException if Kerberos isn't configured at
- // all.
- if (initial) {
- ServerSession session = getServerSession();
- Buffer b = session.createBuffer(
- SshConstants.SSH_MSG_USERAUTH_INFO_REQUEST);
- b.putBytes(KRB5_MECH.getDER());
- session.writePacket(b);
- return null;
- }
- return Boolean.FALSE;
- }
- }
-
- private List<NamedFactory<UserAuth>> getAuthFactories() {
- List<NamedFactory<UserAuth>> authentications = new ArrayList<>();
- authentications.add(
- ServerAuthenticationManager.DEFAULT_USER_AUTH_PUBLIC_KEY_FACTORY);
- authentications.add(new UserAuthGSSFactory() {
- @Override
- public UserAuth create() {
- return new FakeUserAuthGSS();
- }
- });
- return authentications;
- }
-
- /**
- * Adds an additional host key to the server.
- *
- * @param key
- * path to the private key file; should not be encrypted
- * @param inFront
- * whether to add the new key before other existing keys
- * @throws IOException
- * if the file denoted by the {@link Path} {@code key} cannot be
- * read
- * @throws GeneralSecurityException
- * if the key contained in the file cannot be read
- */
- public void addHostKey(@NonNull Path key, boolean inFront)
- throws IOException, GeneralSecurityException {
- try (InputStream in = Files.newInputStream(key)) {
- KeyPair pair = SecurityUtils.loadKeyPairIdentity(key.toString(), in,
- null);
- if (inFront) {
- hostKeys.add(0, pair);
- } else {
- hostKeys.add(pair);
- }
- }
- }
-
- /**
- * Starts the test server, listening on a random port.
- *
- * @return the port the server listens on; test clients should connect to
- * that port
- * @throws IOException
- */
- public int start() throws IOException {
- server.start();
- return server.getPort();
- }
-
- /**
- * Stops the test server.
- *
- * @throws IOException
- */
- public void stop() throws IOException {
- executorService.shutdownNow();
- server.stop(true);
- }
-
- public void setTestUserPublicKey(Path key)
- throws IOException, GeneralSecurityException {
- this.testKey = AuthorizedKeyEntry.readAuthorizedKeys(key).get(0)
- .resolvePublicKey(PublicKeyEntryResolver.IGNORING);
- }
-
- private class GitUploadPackCommand extends AbstractCommandSupport {
-
- protected GitUploadPackCommand(String command,
- ExecutorService executorService) {
- super(command, executorService, false);
- }
-
- @Override
- public void run() {
- UploadPack uploadPack = new UploadPack(repository);
- String gitProtocol = getEnvironment().getEnv().get("GIT_PROTOCOL");
- if (gitProtocol != null) {
- uploadPack
- .setExtraParameters(Collections.singleton(gitProtocol));
- }
- try {
- uploadPack.upload(getInputStream(), getOutputStream(),
- getErrorStream());
- onExit(0);
- } catch (IOException e) {
- log.warn(
- MessageFormat.format("Could not run {0}", getCommand()),
- e);
- onExit(-1, e.toString());
- }
- }
-
- }
-
- private class GitReceivePackCommand extends AbstractCommandSupport {
-
- protected GitReceivePackCommand(String command,
- ExecutorService executorService) {
- super(command, executorService, false);
- }
-
- @Override
- public void run() {
- try {
- new ReceivePack(repository).receive(getInputStream(),
- getOutputStream(), getErrorStream());
- onExit(0);
- } catch (IOException e) {
- log.warn(
- MessageFormat.format("Could not run {0}", getCommand()),
- e);
- onExit(-1, e.toString());
- }
- }
-
- }
-}