| /* |
| * Copyright (C) 2020, Thomas Wolf <thomas.wolf@paranor.ch> and others |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Distribution License v. 1.0 which is available at |
| * https://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| package org.eclipse.jgit.transport; |
| |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.jgit.annotations.NonNull; |
| |
| /** |
| * An abstraction for a SSH config storage, like the OpenSSH ~/.ssh/config file. |
| * |
| * @since 5.8 |
| */ |
| public interface SshConfigStore { |
| |
| /** |
| * Locate the configuration for a specific host request. |
| * |
| * @param hostName |
| * to look up |
| * @param port |
| * the user supplied; <= 0 if none |
| * @param userName |
| * the user supplied, may be {@code null} or empty if none given |
| * @return the configuration for the requested name. |
| */ |
| @NonNull |
| HostConfig lookup(@NonNull String hostName, int port, String userName); |
| |
| /** |
| * Locate the configuration for a specific host request and if the |
| * configuration has no values for {@link SshConstants#HOST_NAME}, |
| * {@link SshConstants#PORT}, {@link SshConstants#USER}, or |
| * {@link SshConstants#CONNECTION_ATTEMPTS}, fill those values with defaults |
| * from the arguments: |
| * <table> |
| * <caption>Description of arguments</caption> |
| * <tr> |
| * <th>ssh config key</th> |
| * <th>value from argument</th> |
| * </tr> |
| * <tr> |
| * <td>{@code HostName}</td> |
| * <td>{@code hostName}</td> |
| * </tr> |
| * <tr> |
| * <td>{@code Port}</td> |
| * <td>{@code port > 0 ? port : 22}</td> |
| * </tr> |
| * <tr> |
| * <td>{@code User}</td> |
| * <td>{@code userName}</td> |
| * </tr> |
| * <tr> |
| * <td>{@code ConnectionAttempts}</td> |
| * <td>{@code 1}</td> |
| * </tr> |
| * </table> |
| * |
| * @param hostName |
| * host name to look up |
| * @param port |
| * port number; <= 0 if none |
| * @param userName |
| * the user name, may be {@code null} or empty if none given |
| * @return the configuration for the requested name. |
| * @since 6.0 |
| */ |
| @NonNull |
| HostConfig lookupDefault(@NonNull String hostName, int port, |
| String userName); |
| |
| /** |
| * A host entry from the ssh config. Any merging of global values and of |
| * several matching host entries, %-substitutions, and ~ replacement have |
| * all been done. |
| */ |
| interface HostConfig { |
| |
| /** |
| * Retrieves the value of a single-valued key, or the first if the key |
| * has multiple values. Keys are case-insensitive, so |
| * {@code getValue("HostName") == getValue("HOSTNAME")}. |
| * |
| * @param key |
| * to get the value of |
| * @return the value, or {@code null} if none |
| */ |
| String getValue(String key); |
| |
| /** |
| * Retrieves the values of a multi- or list-valued key. Keys are |
| * case-insensitive, so |
| * {@code getValue("HostName") == getValue("HOSTNAME")}. |
| * |
| * @param key |
| * to get the values of |
| * @return a possibly empty list of values |
| */ |
| List<String> getValues(String key); |
| |
| /** |
| * Retrieves an unmodifiable map of all single-valued options, with |
| * case-insensitive lookup by keys. |
| * |
| * @return all single-valued options |
| */ |
| @NonNull |
| Map<String, String> getOptions(); |
| |
| /** |
| * Retrieves an unmodifiable map of all multi- or list-valued options, |
| * with case-insensitive lookup by keys. |
| * |
| * @return all multi-valued options |
| */ |
| @NonNull |
| Map<String, List<String>> getMultiValuedOptions(); |
| |
| } |
| |
| /** |
| * An empty {@link HostConfig}. |
| */ |
| static final HostConfig EMPTY_CONFIG = new HostConfig() { |
| |
| @Override |
| public String getValue(String key) { |
| return null; |
| } |
| |
| @Override |
| public List<String> getValues(String key) { |
| return Collections.emptyList(); |
| } |
| |
| @Override |
| public Map<String, String> getOptions() { |
| return Collections.emptyMap(); |
| } |
| |
| @Override |
| public Map<String, List<String>> getMultiValuedOptions() { |
| return Collections.emptyMap(); |
| } |
| |
| }; |
| } |