using System; using System.Collections.Specialized; using System.Diagnostics.CodeAnalysis; namespace ScreenConnect; public class ClientLaunchParameters { public static readonly ClientLaunchParameters Empty = new ClientLaunchParameters(); public SessionType SessionType { get; set; } = SessionType.Unknown; public ProcessType ProcessType { get; set; } public string Host { get; set; } public int Port { get; set; } public Guid SessionID { get; set; } public byte[] EncryptionKey { get; set; } public byte[] AccessToken { get; set; } public byte[] EncryptedGuestClientValidationKey { get; set; } public string ParticipantName { get; set; } public string LogonSessionID { get; set; } public string SessionTitle { get; set; } public string NameCallbackFormat { get; set; } public string[] CustomPropertyValueCallbackFormats { get; set; } public ClientLaunchAttributes Attributes { get; set; } public ClientLaunchParameters() { } public ClientLaunchParameters(NameValueCollection parameters) { this.CopyFromParameters(parameters); } [Obsolete("Use clp.AssertValid()")] public static ClientLaunchParameters AssertValid([System.Diagnostics.CodeAnalysis.NotNull] ClientLaunchParameters? clp) { return clp.AssertValid(); } [Obsolete("Use clp.CopyToParameters(parameters)")] public static void CopyToParameters(ClientLaunchParameters clp, NameValueCollection parameters) { clp.CopyToParameters(parameters); } [Obsolete("Use clp.ToQueryString()")] public static string ToQueryString(ClientLaunchParameters? clp) { return clp.ToQueryString(); } [Obsolete("Use clp.CopyFromParameters(parameters)")] public static void CopyFromParameters(ClientLaunchParameters clp, NameValueCollection parameters) { clp.CopyFromParameters(parameters); } [Obsolete("Use FromQueryStringWithoutConstraint or FromQueryString with constraintQueryString")] public static ClientLaunchParameters? FromQueryString(string? queryString) { return FromQueryStringWithoutConstraint(queryString); } public static ClientLaunchParameters FromQueryStringWithoutConstraint(string? queryString) { return FromQueryString(queryString, (ClientLaunchParametersConstraint?)null); } public static ClientLaunchParameters FromQueryString(string? queryString, string? constraintQueryString) { return FromQueryString(queryString, constraintQueryString?.Pipe(ClientLaunchParametersConstraint.FromQueryString)); } public static ClientLaunchParameters FromQueryString(string? queryString, ClientLaunchParametersConstraint? constraint) { ClientLaunchParameters clientLaunchParameters = new ClientLaunchParameters(); NameValueCollection parameters = Extensions.DecodeQueryString(queryString); clientLaunchParameters.CopyFromParameters(parameters); constraint?.EnforceConstraint(clientLaunchParameters); return clientLaunchParameters; } public static ClientLaunchParameters FromUrlWithoutConstraint(string urlHost, int urlPort, string urlRawPath) { return FromUrl(urlHost, urlPort, urlRawPath, null); } public static ClientLaunchParameters FromUrl(string urlHost, int urlPort, string urlRawPath, string? constraintQueryString) { ClientLaunchParameters clientLaunchParameters = new ClientLaunchParameters { Host = urlHost, Port = urlPort }; string[] array = urlRawPath.Split(new char[1] { '/' }); clientLaunchParameters.SessionID = new Guid(Extensions.UrlDecode(array[1])); clientLaunchParameters.EncryptionKey = Extensions.ConvertFromBase64StringFlexible(Extensions.UrlDecode(array[2])); if (array.Length > 3 && !string.IsNullOrEmpty(array[3])) { clientLaunchParameters.AccessToken = Extensions.ConvertFromBase64StringFlexible(Extensions.UrlDecode(array[3])); } if (array.Length > 4) { clientLaunchParameters.ParticipantName = Extensions.UrlDecode(array[4]); } if (array.Length > 5) { clientLaunchParameters.SessionType = (SessionType)Enum.Parse(typeof(SessionType), Extensions.UrlDecode(array[5])); } if (array.Length > 6) { clientLaunchParameters.SessionTitle = Extensions.UrlDecode(array[6]); } if (array.Length > 7) { clientLaunchParameters.Attributes = Extensions.TryParseEnum(array[7]).GetValueOrDefault(); } if (array.Length > 8) { clientLaunchParameters.LogonSessionID = Extensions.UrlDecode(array[8]); } clientLaunchParameters.ProcessType = ((clientLaunchParameters.AccessToken != null && clientLaunchParameters.AccessToken.Length != 0) ? ProcessType.Host : ProcessType.Guest); constraintQueryString?.Pipe(ClientLaunchParametersConstraint.FromQueryString).EnforceConstraint(clientLaunchParameters); return clientLaunchParameters; } }