2020-08-11 00:53:43 +02:00
|
|
|
// Copyright (c) Microsoft Corporation
|
|
|
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
|
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
|
|
|
|
|
|
using System;
|
2021-07-05 16:26:31 +02:00
|
|
|
using System.Linq;
|
2022-01-11 12:13:41 +00:00
|
|
|
using System.Text.RegularExpressions;
|
2024-09-16 16:09:43 -04:00
|
|
|
|
2020-08-11 00:53:43 +02:00
|
|
|
using Microsoft.Plugin.Uri.Interfaces;
|
|
|
|
|
|
|
|
|
|
namespace Microsoft.Plugin.Uri.UriHelper
|
|
|
|
|
{
|
|
|
|
|
public class ExtendedUriParser : IUriParser
|
|
|
|
|
{
|
2022-01-25 20:31:57 +02:00
|
|
|
// When updating this method, also update the local method IsUri() in Community.PowerToys.Run.Plugin.WebSearch.Main.Query
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
public bool TryParse(string input, out System.Uri webUri, out System.Uri systemUri)
|
2020-08-11 00:53:43 +02:00
|
|
|
{
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
webUri = default;
|
|
|
|
|
systemUri = default;
|
|
|
|
|
|
2020-08-11 00:53:43 +02:00
|
|
|
if (string.IsNullOrEmpty(input))
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2021-11-17 06:06:45 +08:00
|
|
|
// Handling URL with only scheme, typically mailto or application uri.
|
|
|
|
|
// Do nothing, return the result without urlBuilder
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
// And check if scheme match RFC3986 (issue #15035)
|
2022-01-11 12:13:41 +00:00
|
|
|
const string schemeRegex = @"^([a-z][a-z0-9+\-.]*):";
|
2021-11-17 06:06:45 +08:00
|
|
|
if (input.EndsWith(":", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
&& !input.StartsWith("http", StringComparison.OrdinalIgnoreCase)
|
2022-03-10 11:35:13 +01:00
|
|
|
&& !input.Contains('/', StringComparison.OrdinalIgnoreCase)
|
2022-01-11 12:13:41 +00:00
|
|
|
&& !input.All(char.IsDigit)
|
|
|
|
|
&& Regex.IsMatch(input, schemeRegex))
|
2021-11-17 06:06:45 +08:00
|
|
|
{
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
systemUri = new System.Uri(input);
|
2021-11-17 06:06:45 +08:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-11 00:53:43 +02:00
|
|
|
// Handle common cases UriBuilder does not handle
|
2020-10-30 16:43:09 -07:00
|
|
|
// Using CurrentCulture since this is a user typed string
|
|
|
|
|
if (input.EndsWith(":", StringComparison.CurrentCulture)
|
|
|
|
|
|| input.EndsWith(".", StringComparison.CurrentCulture)
|
2021-07-05 16:26:31 +02:00
|
|
|
|| input.EndsWith(":/", StringComparison.CurrentCulture)
|
2021-11-17 06:06:45 +08:00
|
|
|
|| input.EndsWith("://", StringComparison.CurrentCulture)
|
2021-07-05 16:26:31 +02:00
|
|
|
|| input.All(char.IsDigit))
|
2020-08-11 00:53:43 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
string isDomainPortRegex = @"^[\w\.]+:\d+";
|
|
|
|
|
string isIPv6PortRegex = @"^\[([\w:]+:+)+[\w]+\]:\d+";
|
2020-08-11 00:53:43 +02:00
|
|
|
var urlBuilder = new UriBuilder(input);
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
urlBuilder.Port = urlBuilder.Uri.IsDefaultPort ? -1 : urlBuilder.Port;
|
2021-07-16 06:38:26 -05:00
|
|
|
|
2021-11-17 06:06:45 +08:00
|
|
|
if (input.StartsWith("HTTP://", StringComparison.OrdinalIgnoreCase))
|
2021-10-05 01:56:27 +08:00
|
|
|
{
|
|
|
|
|
urlBuilder.Scheme = System.Uri.UriSchemeHttp;
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
}
|
|
|
|
|
else if (Regex.IsMatch(input, isDomainPortRegex) ||
|
|
|
|
|
Regex.IsMatch(input, isIPv6PortRegex))
|
|
|
|
|
{
|
|
|
|
|
var secondUrlBuilder = urlBuilder;
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
urlBuilder = new UriBuilder("https://" + input);
|
|
|
|
|
|
|
|
|
|
if (urlBuilder.Port == 80)
|
|
|
|
|
{
|
|
|
|
|
urlBuilder.Scheme = System.Uri.UriSchemeHttp;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (UriFormatException)
|
|
|
|
|
{
|
|
|
|
|
// This handles the situation in tel:xxxx and others
|
|
|
|
|
// When xxxx > 65535, it will throw UriFormatException
|
|
|
|
|
// The catch ensures it will at least still try to return a systemUri
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string singleLabelRegex = @"[\.:]+|^http$|^https$|^localhost$";
|
|
|
|
|
systemUri = Regex.IsMatch(urlBuilder.Host, singleLabelRegex) ? null : secondUrlBuilder.Uri;
|
2021-10-05 01:56:27 +08:00
|
|
|
}
|
2022-03-10 11:35:13 +01:00
|
|
|
else if (input.Contains(':', StringComparison.OrdinalIgnoreCase) &&
|
2021-11-17 06:06:45 +08:00
|
|
|
!input.StartsWith("http", StringComparison.OrdinalIgnoreCase) &&
|
2022-03-10 11:35:13 +01:00
|
|
|
!input.Contains('[', StringComparison.OrdinalIgnoreCase))
|
2021-10-05 01:56:27 +08:00
|
|
|
{
|
|
|
|
|
// Do nothing, leave unchanged
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
systemUri = urlBuilder.Uri;
|
2021-10-05 01:56:27 +08:00
|
|
|
}
|
|
|
|
|
else
|
2021-07-16 06:38:26 -05:00
|
|
|
{
|
|
|
|
|
urlBuilder.Scheme = System.Uri.UriSchemeHttps;
|
|
|
|
|
}
|
2020-08-11 00:53:43 +02:00
|
|
|
|
[PTRun][URL]Fix web link with ports support (#19809)
* [PT Run] Fix web link with ports support (#14260)
* URL in the format of `domain:port` now directs to default browser
* Add tests to verify web link with ports scenario
* Fix test case and scenario where mismatching schema and port for IPv6 does not result in correct output
* [PT Run][Tests] Change and add more UriParser Tests
* Specifically of note is line 56, where [IPv6]:80 diverts to https instead of http.
* [PT Run][Tests] Add UriParser tests
* Add more tests targeting port handling
* [PT Run] Fix http handling
* This also fixes oddity with IPv4 and IPv6 handling
* [PT Run] Add second results depending on condition
* Test: update all test to reflect updated functions & add a little more tests
* Update function to show two results when URI is in the format of `domain:port` (situation where it can also be `schema:path`)
* Update regex style to follow previous code
* [PT Run] Change tests and filter localhost from certain results
* Add tests for 127.0.0.1, localhost, and ::1
* Move test around into more logical arrangement
* Filter localhost out from showing double results
* [PT Run] Fix spelling on comments
* [PT Run] Add some words to expect.txt
* [PT Toys] Clarify comment regarding [::]
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Run] Remove tests regarding tel protocol
* [PT Run] Clarify UriParser parameter
* [PT Run] Add UriParser tests for tel protocol
* Current code has a regression bug where tel:xxxx, if xxxx is more than 65536 it will break. Will fix in follow up commit.
* [PT Run] Refactor ExtendedUriParser and its tests
* Remove `isWebUri` from ExtendedUriParser, keeping only webUri and systemUri
* Tel protocol regression bug still exists
* [PT Run] Fix wrong icon when webUri result
* [PT Run] Fix regression bug for tel protocol
* Tel protocol will sometimes bug out when tel:xxxx if xxxxx is more than 65535, as UriBuilder will throw error thinking the port number has been exceeded
* [PT Toy] Fix tel test
* [PT Run] Changes to tests
* Add test for application uri to include ports, for all non-protocol, http and https variants
* Rearrange some more test to make more logical sense, and add comments
* [PT Run] Simplify code
* Move webUri and systemUri to be global, as per htcfreek's recommendation
* Add comment to empty catch
* Change null to default
* [PT Toy] Update test name
Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
* [PT Toy] Change result prompt when empty string
* [PT Toy] Fix typo in comment
* [PT Toy] Simplify line
* [PT Toy] Change result prompt when empty string
2022-08-12 00:04:39 +08:00
|
|
|
if (urlBuilder.Scheme.Equals(System.Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) ||
|
|
|
|
|
urlBuilder.Scheme.Equals(System.Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
webUri = urlBuilder.Uri;
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-11 00:53:43 +02:00
|
|
|
return true;
|
|
|
|
|
}
|
2021-11-17 06:06:45 +08:00
|
|
|
catch (UriFormatException)
|
2020-08-11 00:53:43 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|