Class HostConfigEntry

    • Field Detail

      • STD_CONFIG_FILENAME

        public static final java.lang.String STD_CONFIG_FILENAME
        Standard OpenSSH config file name
        See Also:
        Constant Field Values
      • HOST_CONFIG_PROP

        public static final java.lang.String HOST_CONFIG_PROP
        See Also:
        Constant Field Values
      • MATCH_CONFIG_PROP

        public static final java.lang.String MATCH_CONFIG_PROP
        See Also:
        Constant Field Values
      • HOST_NAME_CONFIG_PROP

        public static final java.lang.String HOST_NAME_CONFIG_PROP
        See Also:
        Constant Field Values
      • PORT_CONFIG_PROP

        public static final java.lang.String PORT_CONFIG_PROP
        See Also:
        Constant Field Values
      • USER_CONFIG_PROP

        public static final java.lang.String USER_CONFIG_PROP
        See Also:
        Constant Field Values
      • PROXY_JUMP_CONFIG_PROP

        public static final java.lang.String PROXY_JUMP_CONFIG_PROP
        See Also:
        Constant Field Values
      • IDENTITY_FILE_CONFIG_PROP

        public static final java.lang.String IDENTITY_FILE_CONFIG_PROP
        See Also:
        Constant Field Values
      • CERTIFICATE_FILE_CONFIG_PROP

        public static final java.lang.String CERTIFICATE_FILE_CONFIG_PROP
        See Also:
        Constant Field Values
      • EXCLUSIVE_IDENTITIES_CONFIG_PROP

        public static final java.lang.String EXCLUSIVE_IDENTITIES_CONFIG_PROP
        Use only the identities specified in the host entry (if any)
        See Also:
        Constant Field Values
      • DEFAULT_EXCLUSIVE_IDENTITIES

        public static final boolean DEFAULT_EXCLUSIVE_IDENTITIES
        See Also:
        Constant Field Values
      • IDENTITY_AGENT

        public static final java.lang.String IDENTITY_AGENT
        The IdentityAgent configuration. If not set in the HostConfigEntry, the value of this property is null, which means that a default SSH agent is to be used, if it is running. Other values defined by OpenSSH are:
          none
          No SHH agent is to be used at all, even if one is running.
          SSH_AUTH_SOCK
          The SSH agent listening on the Unix domain socket given by the environment variable SSH_AUTH_SOCK shall be used. If the environment variable is not set, no SSH agent is used.
          other
          For OpenSSH, the value shall resolve to the file name of a Unix domain socket to use to connect to an SSH agent.
        See Also:
        Constant Field Values
      • EXPLICIT_PROPERTIES

        public static final java.util.NavigableSet<java.lang.String> EXPLICIT_PROPERTIES
        A case insensitive NavigableSet of the properties that receive special handling
      • MULTI_VALUE_SEPARATORS

        public static final java.lang.String MULTI_VALUE_SEPARATORS
        See Also:
        Constant Field Values
      • host

        protected java.lang.String host
      • hostName

        protected java.lang.String hostName
      • port

        protected int port
      • username

        protected java.lang.String username
      • proxyJump

        protected java.lang.String proxyJump
      • exclusiveIdentites

        protected java.lang.Boolean exclusiveIdentites
      • identities

        protected final java.util.Collection<java.lang.String> identities
      • properties

        protected final java.util.Map<java.lang.String,​java.lang.String> properties
    • Constructor Detail

      • HostConfigEntry

        public HostConfigEntry()
      • HostConfigEntry

        public HostConfigEntry​(java.lang.String pattern,
                               java.lang.String host,
                               int port,
                               java.lang.String username)
      • HostConfigEntry

        public HostConfigEntry​(java.lang.String pattern,
                               java.lang.String host,
                               int port,
                               java.lang.String username,
                               java.lang.String proxyJump)
    • Method Detail

      • collate

        public void collate​(HostConfigEntry that)
        Merges that into this via underride. That is, any value present in this entry takes precedence over the given entry. Only this object is modified. The given entry remains unchanged.
        Parameters:
        that - The HostConfigEntry to merge.
      • getHost

        public java.lang.String getHost()
        Returns:
        The pattern(s) represented by this entry
      • setHost

        public void setHost​(java.lang.String host)
      • setHost

        public void setHost​(java.util.Collection<java.lang.String> patterns)
      • getHostName

        public java.lang.String getHostName()
        Returns:
        The effective host name to connect to if the pattern matches
      • setHostName

        public void setHostName​(java.lang.String hostName)
      • getPort

        public int getPort()
        Returns:
        A port override - if positive
      • setPort

        public void setPort​(int port)
      • getUsername

        public java.lang.String getUsername()
        Specified by:
        getUsername in interface UsernameHolder
        Returns:
        A username override - if not null/empty
      • getProxyJump

        public java.lang.String getProxyJump()
        Returns:
        the host to use as a proxy
      • setProxyJump

        public void setProxyJump​(java.lang.String proxyJump)
      • getIdentities

        public java.util.Collection<java.lang.String> getIdentities()
        Returns:
        The current identities file paths - may be null/empty
      • addIdentity

        public void addIdentity​(java.nio.file.Path path)
        Parameters:
        path - A Path to a file that contains an identity key - never null
      • addIdentity

        public void addIdentity​(java.lang.String id)
        Adds a path to an identity file
        Parameters:
        id - The identity path to add - never null
      • setIdentities

        public void setIdentities​(java.util.Collection<java.lang.String> identities)
      • isIdentitiesOnly

        public boolean isIdentitiesOnly()
        Returns:
        true if must use only the identities in this entry
      • setIdentitiesOnly

        public void setIdentitiesOnly​(boolean identitiesOnly)
      • getProperties

        public java.util.Map<java.lang.String,​java.lang.String> getProperties()
        Returns:
        A Map of extra properties that have been read - may be null/empty, or even contain some values that have been parsed and set as members of the entry (e.g., host, port, etc.). Note: multi-valued keys use a comma-separated list of values
      • getProperty

        public java.lang.String getProperty​(java.lang.String name)
        Parameters:
        name - Property name - never null/empty
        Returns:
        Property value or null if no such property
        See Also:
        getProperty(String, String)
      • getProperty

        public java.lang.String getProperty​(java.lang.String name,
                                            java.lang.String defaultValue)
        Parameters:
        name - Property name - never null/empty
        defaultValue - Default value to return if no such property
        Returns:
        The property value or the default one if no such property
      • appendPropertyValue

        public java.lang.String appendPropertyValue​(java.lang.String name,
                                                    java.lang.String value)
        Appends a value using a comma to an existing one. If no previous value then same as calling setProperty(String, String).
        Parameters:
        name - Property name - never null/empty
        value - The value to be appended - ignored if null/empty
        Returns:
        The value before appending - null if no previous value
      • setProperty

        public java.lang.String setProperty​(java.lang.String name,
                                            java.lang.String value)
        Sets / Replaces the property value
        Parameters:
        name - Property name - never null/empty
        value - Property value - if null/empty then removeProperty(String) is called
        Returns:
        The previous property value - null if no such name
      • removeProperty

        public java.lang.String removeProperty​(java.lang.String name)
        Parameters:
        name - Property name - never null/empty
        Returns:
        The removed property value - null if no such property name
      • setProperties

        public void setProperties​(java.util.Map<java.lang.String,​java.lang.String> properties)
        Parameters:
        properties - The properties to set - if null then an empty map is effectively set. Note: it is highly recommended to use a case insensitive key mapper.
      • append

        public <A extends java.lang.Appendable> A append​(A sb)
                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • appendNonEmptyPort

        public static <A extends java.lang.Appendable> A appendNonEmptyPort​(A sb,
                                                                            java.lang.String name,
                                                                            int port)
                                                                     throws java.io.IOException
        Type Parameters:
        A - The Appendable type
        Parameters:
        sb - The target appender
        name - The property name - never null/empty
        port - The port value - ignored if non-positive
        Returns:
        The target appender after having appended (or not) the value
        Throws:
        java.io.IOException - If failed to append the requested data
        See Also:
        appendNonEmptyProperty(Appendable, String, Object)
      • appendNonEmptyProperties

        public static <A extends java.lang.Appendable> A appendNonEmptyProperties​(A sb,
                                                                                  java.util.Map<java.lang.String,​?> props)
                                                                           throws java.io.IOException
        Appends the extra properties - while skipping the EXPLICIT_PROPERTIES ones
        Type Parameters:
        A - The Appendable type
        Parameters:
        sb - The target appender
        props - The Map of properties - ignored if null/empty
        Returns:
        The target appender after having appended (or not) the value
        Throws:
        java.io.IOException - If failed to append the requested data
        See Also:
        appendNonEmptyProperty(Appendable, String, Object)
      • appendNonEmptyProperty

        public static <A extends java.lang.Appendable> A appendNonEmptyProperty​(A sb,
                                                                                java.lang.String name,
                                                                                java.lang.Object value)
                                                                         throws java.io.IOException
        Type Parameters:
        A - The Appendable type
        Parameters:
        sb - The target appender
        name - The property name - never null/empty
        value - The property value - ignored if null. Note: if the string representation of the value contains any commas, they are assumed to indicate a multi-valued property which is broken down to individual lines - one per value.
        Returns:
        The target appender after having appended (or not) the value
        Throws:
        java.io.IOException - If failed to append the requested data
        See Also:
        appendNonEmptyValues(Appendable, String, Object...)
      • appendNonEmptyValues

        public static <A extends java.lang.Appendable> A appendNonEmptyValues​(A sb,
                                                                              java.lang.String name,
                                                                              java.lang.Object... values)
                                                                       throws java.io.IOException
        Type Parameters:
        A - The Appendable type
        Parameters:
        sb - The target appender
        name - The property name - never null/empty
        values - The values to be added - one per line - ignored if null/empty
        Returns:
        The target appender after having appended (or not) the value
        Throws:
        java.io.IOException - If failed to append the requested data
        See Also:
        appendNonEmptyValues(Appendable, String, Collection)
      • appendNonEmptyValues

        public static <A extends java.lang.Appendable> A appendNonEmptyValues​(A sb,
                                                                              java.lang.String name,
                                                                              java.util.Collection<?> values)
                                                                       throws java.io.IOException
        Type Parameters:
        A - The Appendable type
        Parameters:
        sb - The target appender
        name - The property name - never null/empty
        values - The values to be added - one per line - ignored if null/empty
        Returns:
        The target appender after having appended (or not) the value
        Throws:
        java.io.IOException - If failed to append the requested data
      • findMatchingEntries

        public static java.util.List<HostConfigEntry> findMatchingEntries​(java.lang.String host,
                                                                          HostConfigEntry... entries)
        Locates all the matching entries for a give host name / address
        Parameters:
        host - The host name / address - ignored if null/empty
        entries - The HostConfigEntry-ies to scan - ignored if null/empty
        Returns:
        A List of all the matching entries
        See Also:
        HostPatternsHolder.isHostMatch(String, int)
      • findMatchingEntries

        public static java.util.List<HostConfigEntry> findMatchingEntries​(java.lang.String host,
                                                                          java.util.Collection<? extends HostConfigEntry> entries)
        Locates all the matching entries for a give host name / address
        Parameters:
        host - The host name / address - ignored if null/empty
        entries - The HostConfigEntry-ies to scan - ignored if null/empty
        Returns:
        A List of all the matching entries
        See Also:
        HostPatternsHolder.isHostMatch(String, int)
      • readHostConfigEntries

        public static java.util.List<HostConfigEntry> readHostConfigEntries​(java.nio.file.Path path,
                                                                            java.nio.file.OpenOption... options)
                                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readHostConfigEntries

        public static java.util.List<HostConfigEntry> readHostConfigEntries​(java.net.URL url)
                                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readHostConfigEntries

        public static java.util.List<HostConfigEntry> readHostConfigEntries​(java.io.InputStream inStream,
                                                                            boolean okToClose)
                                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readHostConfigEntries

        public static java.util.List<HostConfigEntry> readHostConfigEntries​(java.io.Reader rdr,
                                                                            boolean okToClose)
                                                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • readHostConfigEntries

        public static java.util.List<HostConfigEntry> readHostConfigEntries​(java.io.BufferedReader rdr)
                                                                     throws java.io.IOException
        Reads configuration entries
        Parameters:
        rdr - The BufferedReader to use
        Returns:
        The List of read HostConfigEntry-ies
        Throws:
        java.io.IOException - If failed to parse the read configuration
      • writeHostConfigEntries

        public static void writeHostConfigEntries​(java.nio.file.Path path,
                                                  java.util.Collection<? extends HostConfigEntry> entries,
                                                  java.nio.file.OpenOption... options)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writeHostConfigEntries

        public static void writeHostConfigEntries​(java.io.OutputStream outputStream,
                                                  boolean okToClose,
                                                  java.util.Collection<? extends HostConfigEntry> entries)
                                           throws java.io.IOException
        Throws:
        java.io.IOException
      • appendHostConfigEntries

        public static <A extends java.lang.Appendable> A appendHostConfigEntries​(A sb,
                                                                                 java.util.Collection<? extends HostConfigEntry> entries)
                                                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • parseConfigValue

        public static java.util.List<java.lang.String> parseConfigValue​(java.lang.String value)
        Checks if this is a multi-value - allow space and comma
        Parameters:
        value - The value - ignored if null/empty (after trimming)
        Returns:
        A List of the encountered values
      • resolveIdentityFilePath

        public static java.lang.String resolveIdentityFilePath​(java.lang.String id,
                                                               java.lang.String host,
                                                               int port,
                                                               java.lang.String username)
                                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • getDefaultHostConfigFile

        public static java.nio.file.Path getDefaultHostConfigFile()
        Returns:
        The default Path location of the OpenSSH hosts entries configuration file