diff options
Diffstat (limited to 'src/main/java/com/gitblit/transport/ssh/SshSession.java')
-rw-r--r-- | src/main/java/com/gitblit/transport/ssh/SshSession.java | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/SshSession.java b/src/main/java/com/gitblit/transport/ssh/SshSession.java new file mode 100644 index 00000000..9f18a197 --- /dev/null +++ b/src/main/java/com/gitblit/transport/ssh/SshSession.java @@ -0,0 +1,102 @@ +/* + * Copyright 2014 gitblit.com. + * + * 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.gitblit.transport.ssh; + +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; + +import org.apache.sshd.common.Session.AttributeKey; + +/** + * + * @author Eric Myrhe + * + */ +public class SshSession { + public static final AttributeKey<SshSession> KEY = + new AttributeKey<SshSession>(); + + private final int sessionId; + private final SocketAddress remoteAddress; + private final String remoteAsString; + + private volatile String username; + private volatile String authError; + + SshSession(int sessionId, SocketAddress peer) { + this.sessionId = sessionId; + this.remoteAddress = peer; + this.remoteAsString = format(remoteAddress); + } + + public SocketAddress getRemoteAddress() { + return remoteAddress; + } + + String getRemoteAddressAsString() { + return remoteAsString; + } + + public String getRemoteUser() { + return username; + } + + /** Unique session number, assigned during connect. */ + public int getSessionId() { + return sessionId; + } + + String getUsername() { + return username; + } + + String getAuthenticationError() { + return authError; + } + + void authenticationSuccess(String user) { + username = user; + authError = null; + } + + void authenticationError(String user, String error) { + username = user; + authError = error; + } + + /** @return {@code true} if the authentication did not succeed. */ + boolean isAuthenticationError() { + return authError != null; + } + + private static String format(final SocketAddress remote) { + if (remote instanceof InetSocketAddress) { + final InetSocketAddress sa = (InetSocketAddress) remote; + + final InetAddress in = sa.getAddress(); + if (in != null) { + return in.getHostAddress(); + } + + final String hostName = sa.getHostName(); + if (hostName != null) { + return hostName; + } + } + return remote.toString(); + } +} |