1 package org
.argeo
.cms
.ssh
.cli
;
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
;
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
;
21 /** Separate class in order to avoit static field from Apache SSHD. */
22 class DefaultClientIdentityLoader
implements ClientIdentityLoader
{
24 public boolean isValidLocation(NamedResource location
) throws IOException
{
25 Path path
= toPath(location
);
26 return Files
.exists(path
, IoUtils
.EMPTY_LINK_OPTIONS
);
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
);
40 public String
toString() {
44 private Path
toPath(NamedResource location
) {
45 Objects
.requireNonNull(location
, "No location provided");
48 .get(ValidateUtils
.checkNotNullAndNotEmpty(location
.getName(), "No location value for %s", location
));
49 path
= path
.toAbsolutePath();
50 path
= path
.normalize();