]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.lib.sshd/src/org/argeo/cms/ssh/cli/DefaultClientIdentityLoader.java
Use latest Argeo Build
[lgpl/argeo-commons.git] / org.argeo.cms.lib.sshd / src / org / argeo / cms / ssh / cli / DefaultClientIdentityLoader.java
1 package org.argeo.cms.ssh.cli;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.nio.file.Files;
6 import java.nio.file.Path;
7 import java.nio.file.Paths;
8 import java.security.GeneralSecurityException;
9 import java.security.KeyPair;
10 import java.util.Objects;
11
12 import org.apache.sshd.client.config.keys.ClientIdentityLoader;
13 import org.apache.sshd.common.NamedResource;
14 import org.apache.sshd.common.config.keys.FilePasswordProvider;
15 import org.apache.sshd.common.session.SessionContext;
16 import org.apache.sshd.common.util.ValidateUtils;
17 import org.apache.sshd.common.util.io.IoUtils;
18 import org.apache.sshd.common.util.io.resource.PathResource;
19 import org.apache.sshd.common.util.security.SecurityUtils;
20
21 /** Separate class in order to avoit static field from Apache SSHD. */
22 class DefaultClientIdentityLoader implements ClientIdentityLoader {
23 @Override
24 public boolean isValidLocation(NamedResource location) throws IOException {
25 Path path = toPath(location);
26 return Files.exists(path, IoUtils.EMPTY_LINK_OPTIONS);
27 }
28
29 @Override
30 public Iterable<KeyPair> loadClientIdentities(SessionContext session, NamedResource location,
31 FilePasswordProvider provider) throws IOException, GeneralSecurityException {
32 Path path = toPath(location);
33 PathResource resource = new PathResource(path);
34 try (InputStream inputStream = resource.openInputStream()) {
35 return SecurityUtils.loadKeyPairIdentities(session, resource, inputStream, provider);
36 }
37 }
38
39 @Override
40 public String toString() {
41 return "DEFAULT";
42 }
43
44 private Path toPath(NamedResource location) {
45 Objects.requireNonNull(location, "No location provided");
46
47 Path path = Paths
48 .get(ValidateUtils.checkNotNullAndNotEmpty(location.getName(), "No location value for %s", location));
49 path = path.toAbsolutePath();
50 path = path.normalize();
51 return path;
52 }
53
54 }