sources/Google.Solutions.Terminal/Controls/SshShellClient.ConnectionProperties.cs (107 lines of code) (raw):

// // Copyright 2024 Google LLC // // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you 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. // using Google.Solutions.Ssh; using System; using System.ComponentModel; using System.Globalization; using System.Net; namespace Google.Solutions.Terminal.Controls { public partial class SshShellClient { protected const string SshCategory = "SSH"; private IPEndPoint? serverEndpoint; private ISshCredential? credential; private string? banner; private TimeSpan connectionTimeout = TimeSpan.FromSeconds(30); private CultureInfo? locale; private IKeyboardInteractiveHandler keyboardInteractiveHandler = new DefaultKeyboardInteractiveHandler(); /// <summary> /// Endpoint to connect to. /// </summary> [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Category(SshCategory)] public IPEndPoint? ServerEndpoint { get => this.serverEndpoint; set { ExpectState(ConnectionState.NotConnected); this.serverEndpoint = value; } } /// <summary> /// User credential to authenticate with. /// </summary> [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Category(SshCategory)] public virtual ISshCredential? Credential { get => this.credential; set { ExpectState(ConnectionState.NotConnected); this.credential = value; } } /// <summary> /// Handler for password/input prompts. /// </summary> [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Category(SshCategory)] public IKeyboardInteractiveHandler KeyboardInteractiveHandler { get => this.keyboardInteractiveHandler; set { ExpectState(ConnectionState.NotConnected); this.keyboardInteractiveHandler = value; } } /// <summary> /// Client banner to send to server. /// </summary> [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Category(SshCategory)] public string? Banner { get => this.banner; set { ExpectState(ConnectionState.NotConnected); this.banner = value; } } /// <summary> /// Timeout for establishing an SSH connection. /// </summary> [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Category(SshCategory)] public TimeSpan ConnectionTimeout { get => this.connectionTimeout; set { ExpectState(ConnectionState.NotConnected); this.connectionTimeout = value; } } /// <summary> /// LC_ALL locale. /// </summary> [Browsable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Category(SshCategory)] public CultureInfo? Locale { get => this.locale; set { ExpectState(ConnectionState.NotConnected); this.locale = value; } } /// <summary> /// Type of terminal ($TERM) to use. /// </summary> public string TerminalType { get; set; } = "xterm-256color"; //--------------------------------------------------------------------- // Inner types. //--------------------------------------------------------------------- /// <summary> /// Default handler, cancels all input. /// </summary> private class DefaultKeyboardInteractiveHandler : IKeyboardInteractiveHandler { public string? Prompt(string caption, string instruction, string prompt, bool echo) { throw new OperationCanceledException(); } public IPasswordCredential PromptForCredentials(string username) { throw new OperationCanceledException(); } } } }