diff --git a/.github/workflows/prepare-gocat-release.yml b/.github/workflows/prepare-gocat-release.yml deleted file mode 100644 index f4d05ce..0000000 --- a/.github/workflows/prepare-gocat-release.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Prepare QCW gocat (from revision) - -on: workflow_dispatch - -env: - GOCAT_GITURL: https://github.com/sumup-oss/gocat.git - GOCAT_SHA: cc6fb8a5db72948af31628b019575478522f4425 - -jobs: - build: - runs-on: windows-latest - - steps: - - name: "๐Ÿ—๏ธ Install msys2" - uses: msys2/setup-msys2@v2 - with: - msystem: UCRT64 - update: true - install: >- - make - git - unzip - base-devel - mingw-w64-ucrt-x86_64-toolchain - zip - mingw-w64-ucrt-x86_64-go - - - name: "๐Ÿ“ Configure checkout" - run: git config --global core.autocrlf input - - - name: "๐Ÿ“ Checkout" - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - name: "๐Ÿ“ Fetch sources" - shell: msys2 {0} - run: | - mkdir gocat-release - cd gocat-release - git init - git remote add origin $GOCAT_GITURL - git fetch --depth 1 origin $GOCAT_SHA - git checkout FETCH_HEAD - patch --binary -l -p 1 < ../patches/gocat/0001-Updating-deps.patch - - - name: "๐Ÿ› ๏ธ Build gocat" - working-directory: gocat-release - shell: msys2 {0} - run: | - go build - - - name: "๐Ÿ“ฆ Pack gocat" - shell: msys2 {0} - run: | - mkdir -p qcw - mkdir -p qcw-tmp - cp "gocat-release/gocat.exe" qcw-tmp/ - cp "gocat-release/LICENSE" qcw-tmp/ - cd qcw-tmp/ - zip -9 -r ../qcw/gocat.zip . - cd ../qcw - find . -type f \( ! -iname "*.checksums" \) -exec sha256sum -b {} \; > sha.checksums - find . -type f \( ! -iname "*.checksums" \) -exec sha512sum -b {} \; >> sha.checksums - cat sha.checksums - - - name: "๐Ÿš€ Upload artifact" - uses: actions/upload-artifact@v4 - with: - name: qcw-gocat - path: qcw diff --git a/.github/workflows/prepare-msys2-tools.yml b/.github/workflows/prepare-msys2-tools.yml deleted file mode 100644 index a44dd82..0000000 --- a/.github/workflows/prepare-msys2-tools.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Prepare QCW msys2-tools - -on: workflow_dispatch - -jobs: - build: - runs-on: windows-latest - - steps: - - name: "๐Ÿ—๏ธ Install msys2" - uses: msys2/setup-msys2@v2 - with: - msystem: MSYS - update: true - install: >- - zip - - - name: "๐Ÿ“ Checkout" - uses: actions/checkout@v4 - with: - fetch-depth: 1 - - - name: "๐Ÿ“ฆ Pack msys2-tools" - shell: msys2 {0} - run: | - mkdir -p ./qcw - mkdir -p ./qcw-tmp/var/lib/pacman - pacman -r ./qcw-tmp --noconfirm -Sy - pacman -r ./qcw-tmp --noconfirm -S msys2-runtime openssh filesystem coreutils - rm -rf ./qcw-tmp/var ./qcw-tmp/usr/share/doc ./qcw-tmp/usr/share/man ./qcw-tmp/usr/share/info - cd qcw-tmp/ - zip -9 -r ../qcw/msys2-tools.zip . - cd ../qcw - find . -type f \( ! -iname "*.checksums" \) -exec sha256sum -b {} \; > sha.checksums - find . -type f \( ! -iname "*.checksums" \) -exec sha512sum -b {} \; >> sha.checksums - cat sha.checksums - - - name: "๐Ÿš€ Upload artifact" - uses: actions/upload-artifact@v4 - with: - name: qcw-msys2-tools - path: qcw diff --git a/.github/workflows/prepare-winsocat-release.yml b/.github/workflows/prepare-winsocat-release.yml new file mode 100644 index 0000000..72fc72c --- /dev/null +++ b/.github/workflows/prepare-winsocat-release.yml @@ -0,0 +1,96 @@ +name: Prepare QCW WinSocat (from revision) + +on: + workflow_dispatch: + workflow_call: + outputs: + winsocat_version: + description: WinSocat version" + value: ${{ jobs.build.outputs.winsocat_version }} + +env: + WINSOCAT_GITURL: https://github.com/firejox/WinSocat.git + WINSOCAT_SHA: ad84bd28b6721c6415b73a37bb4a23aa53936062 # v0.1.3 + WINSOCAT_VERSION: 0.1.3 + +jobs: + build: + runs-on: windows-latest + outputs: + winsocat_version: ${{ steps.make_versions.outputs.winsocat }} + + steps: + - name: "๐Ÿ—๏ธ Install msys2" + uses: msys2/setup-msys2@v2 + with: + msystem: UCRT64 + update: true + install: >- + git + dos2unix + + - name: "๐Ÿ—๏ธ Install dotnet" + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.0.x' + dotnet-quality: 'ga' + + - name: "๐Ÿ“ Configure checkout" + run: git config --global core.autocrlf input + + - name: "๐Ÿ“ Checkout" + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: "๐Ÿ“ Fetch sources" + shell: msys2 {0} + run: | + mkdir winsocat-release + cd winsocat-release + git init + git remote add origin $WINSOCAT_GITURL + git fetch --depth 1 origin $WINSOCAT_SHA + git checkout FETCH_HEAD + find . -type f -print0 | xargs -0 dos2unix + patch --binary -l -p 1 < ../patches/WinSocat/0001-Pending-0.1.3.patch + patch --binary -l -p 1 < ../patches/WinSocat/0002-Upgrade-to-dontent8.patch + patch --binary -l -p 1 < ../patches/WinSocat/0003-Improve-solution-setup.patch + + - name: "๐Ÿงช Test WinSocat" + working-directory: winsocat-release + shell: pwsh + run: | + dotnet restore + dotnet build --no-restore + dotnet test --no-build + + - name: "๐Ÿ› ๏ธ Build WinSocat" + working-directory: winsocat-release + shell: pwsh + run: | + dotnet restore + dotnet build -c Release --no-restore + dotnet publish winsocat -c Release -r win-x64 -p:PublishDir=../build/x64 -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true -p:PublishReadyToRun=true -p:PublishTrimmed=true --self-contained true + + - name: "๐Ÿ“ฆ Pack WinSocat" + shell: msys2 {0} + run: | + mkdir -p qcw + cp "winsocat-release/build/x64/"*".exe" qcw/ + cd qcw + find . -type f \( ! -iname "*.checksums" \) -exec sha256sum -b {} \; > sha.checksums + find . -type f \( ! -iname "*.checksums" \) -exec sha512sum -b {} \; >> sha.checksums + cat sha.checksums + + - id: make_versions + name: "๐Ÿ“Œ Export versions" + shell: msys2 {0} + run: | + echo "winsocat=$WINSOCAT_VERSION" >> "$GITHUB_OUTPUT" + + - name: "๐Ÿš€ Upload artifact" + uses: actions/upload-artifact@v4 + with: + name: qcw-winsocat + path: qcw diff --git a/README.md b/README.md index bd84118..d6a9346 100644 --- a/README.md +++ b/README.md @@ -29,18 +29,18 @@ default. Ordered alphabetically -* `docker-cli` - [Github](https://github.com/docker/cli) `docker` command line interface; -* `docker-compose` - [Github](https://github.com/docker/compose) orchestration tool for containers; -* `gocat` - [Github](https://github.com/sumup-oss/gocat) multipurpose networking relay; -* `gvisor-tap-vsock` - [Github](https://github.com/containers/gvisor-tap-vsock) the tool to provide networking for +* `docker-cli` - [GitHub](https://github.com/docker/cli) `docker` command line interface; +* `docker-compose` - [GitHub](https://github.com/docker/compose) orchestration tool for containers; +* `gvisor-tap-vsock` - [GitHub](https://github.com/containers/gvisor-tap-vsock) the tool to provide networking for accessing containers from Windows; -* `OpenSSH` - [home page](https://www.openssh.com/) SSH connectivity tool fork from [Powershell Github](https://github.com/PowerShell/openssh-portable); -* `Podman` - [home page](https://podman.io/) and [Github](https://github.com/containers/podman) free and open source +* `OpenSSH` - [home page](https://www.openssh.com/) SSH connectivity tool fork from [Powershell GitHub](https://github.com/PowerShell/openssh-portable); +* `Podman` - [home page](https://podman.io/) and [GitHub](https://github.com/containers/podman) free and open source container runtime; -* `Podman Desktop` - [home page](https://podman-desktop.io/) and [Github](https://github.com/containers/podman-desktop) +* `Podman Desktop` - [home page](https://podman-desktop.io/) and [GitHub](https://github.com/containers/podman-desktop) GUI companion to Podman; -* `QEMU` - [home page](https://www.qemu.org/) and [Github (mirror)](https://github.com/qemu/qemu) free and open source +* `QEMU` - [home page](https://www.qemu.org/) and [GitHub (mirror)](https://github.com/qemu/qemu) free and open source feature rich machine emulator; +* `WinSocat` - [GitHub](https://github.com/firejox/WinSocat) socat-like windows-specific program; * `Zlib` - [home page](https://www.zlib.net/) compression library. ### Versions and patches @@ -53,10 +53,6 @@ Version `v27.4.0`. Rebuilt for Windows amd64 platform. Version `v2.31.0`. Rebuilt for Windows amd64 platform. -#### `gocat` - -Built from HEAD of the development branch. Added patch with updated dependencies. - #### `gvisor-tap-vsock` Version bundled with Podman is used @@ -86,6 +82,13 @@ Version `9.2.0` with 3 patch sets from QEMU mailing list: * WHPX: Add support for device backed memory regions https://lists.gnu.org/archive/html/qemu-devel/2022-07/msg04837.html; * Windows installer: keep dependency cache https://lists.gnu.org/archive/html/qemu-devel/2023-01/msg03125.html. +#### `WinSocat` + +Version `0.1.3` with 3 patch sets: +* Pending commits after the release https://github.com/firejox/WinSocat/compare/v0.1.3...b7e32fa8f782ae38475cfc7cf1eed25de1fad339 +* Dependency updates from https://github.com/firejox/WinSocat/pull/16 +* Some additinal cleanups for VisualStudio solution setup + #### `Zlib` Version `1.3` with 2 patches from main after release and from Powershell fork: diff --git a/patches/WinSocat/0001-Pending-0.1.3.patch b/patches/WinSocat/0001-Pending-0.1.3.patch new file mode 100644 index 0000000..d009598 --- /dev/null +++ b/patches/WinSocat/0001-Pending-0.1.3.patch @@ -0,0 +1,123 @@ +From 0580ae45c013b66d88d51aa1de5715d51f796d43 Mon Sep 17 00:00:00 2001 +From: Firejox +Date: Sun, 28 May 2023 20:59:16 +0800 +Subject: [PATCH 1/2] Update README.md + +--- + README.md | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/README.md b/README.md +index 5df26da..f7ecfb4 100644 +--- a/README.md ++++ b/README.md +@@ -10,13 +10,21 @@ + WinSocat is a socat-like program specific on Windows platform. It can bridge Windows named pipe and other general I/O, e.g., STDIO, TCP, the STDIO of Process. + + ## Installation ++There are several ways to install WinSocat. + ++### .NET CLI + [Install .NET 6 or newer](https://get.dot.net) and install via `dotnet tool` + + ``` + dotnet tool install -g winsocat + ``` + ++### Windows Package Manager ++Install via `winget` ++``` ++winget install -e --id Firejox.WinSocat ++``` ++ + ## Command Form + + The WinSocat is accept two address pattern + +From b7e32fa8f782ae38475cfc7cf1eed25de1fad339 Mon Sep 17 00:00:00 2001 +From: Firejox +Date: Sun, 21 Apr 2024 21:27:31 +0800 +Subject: [PATCH 2/2] Fix the bug when exe path contains space will result + error (#11) + +--- + Tests/ProcPiperInfoTest.cs | 2 ++ + winsocat/AddressElement.cs | 2 +- + winsocat/Process.cs | 22 ++++++---------------- + 3 files changed, 9 insertions(+), 17 deletions(-) + +diff --git a/Tests/ProcPiperInfoTest.cs b/Tests/ProcPiperInfoTest.cs +index 16bafe0..2b1e122 100644 +--- a/Tests/ProcPiperInfoTest.cs ++++ b/Tests/ProcPiperInfoTest.cs +@@ -34,6 +34,7 @@ public void InvalidInputParseTest(string input) + + [TestCase(@"EXEC:C:\Foo.exe bar", ExpectedResult = @"C:\Foo.exe")] + [TestCase(@"EXEC:C:\Foo.exe", ExpectedResult = @"C:\Foo.exe")] ++ [TestCase(@"EXEC:""C:\foo\space dir\bar.exe"" arg1 arg2", ExpectedResult = @"C:\foo\space dir\bar.exe")] + public string FileNamePatternMatchTest(string input) + { + var element = AddressElement.TryParse(input); +@@ -41,6 +42,7 @@ public string FileNamePatternMatchTest(string input) + } + + [TestCase(@"EXEC:C:\Foo.exe bar1 bar2", ExpectedResult = "bar1 bar2")] ++ [TestCase(@"EXEC:""C:\foo\space dir\bar.exe"" arg1 arg2", ExpectedResult = @"arg1 arg2")] + public string ArgumentPatternMatchTest(string input) + { + var element = AddressElement.TryParse(input); +diff --git a/winsocat/AddressElement.cs b/winsocat/AddressElement.cs +index a768ba5..094ccff 100644 +--- a/winsocat/AddressElement.cs ++++ b/winsocat/AddressElement.cs +@@ -36,7 +36,7 @@ public static AddressElement TryParse(string input) + return null!; + + string tag = tagSplits[0]; +- string address = tagSplits[1].Substring(0, addressSepOffset); ++ string address = tagSplits[1].Substring(0, addressSepOffset).Trim(); + var options = GetOptions(tagSplits[1].Substring(addressSepOffset)); + + return new AddressElement(tag, address, options); +diff --git a/winsocat/Process.cs b/winsocat/Process.cs +index fe0ef28..84f3a4b 100644 +--- a/winsocat/Process.cs ++++ b/winsocat/Process.cs +@@ -1,5 +1,6 @@ + using System.Diagnostics; + using System.IO.Pipelines; ++using System.CommandLine.Parsing; + + namespace Firejox.App.WinSocat; + +@@ -20,25 +21,14 @@ public ProcPiperInfo(string filename, string arguments) + public static ProcPiperInfo TryParse(AddressElement element) + { + if (!element.Tag.Equals("EXEC", StringComparison.OrdinalIgnoreCase)) return null!; +- +- string execPattern = element.Address.Trim('\'', '\"'); +- int sepIndex = execPattern.IndexOf(' '); +- string filename; +- string arguments; +- +- if (sepIndex != -1) +- { +- filename = execPattern.Substring(0, sepIndex); +- arguments = execPattern.Substring(sepIndex + 1); +- } +- else +- { +- filename = execPattern; +- arguments = ""; +- } ++ var execPattern = element.Address; ++ var cmdLine = CommandLineStringSplitter.Instance.Split(execPattern); ++ string filename = cmdLine.First(); ++ string arguments = String.Join(' ', cmdLine.Skip(1)); + + return new ProcPiperInfo(filename, arguments); + } ++ + } + + public class ProcPiper : IPiper diff --git a/patches/WinSocat/0002-Upgrade-to-dontent8.patch b/patches/WinSocat/0002-Upgrade-to-dontent8.patch new file mode 100644 index 0000000..6e05259 --- /dev/null +++ b/patches/WinSocat/0002-Upgrade-to-dontent8.patch @@ -0,0 +1,1026 @@ +From 51ddd72c397ca3a297ee5c811ac2c62c35b31e2f Mon Sep 17 00:00:00 2001 +From: Ionut Stoica +Date: Thu, 3 Oct 2024 15:17:57 +0200 +Subject: [PATCH 1/2] Only allow current user + +--- + README.md | 2 ++ + Tests/NamedPipeListenPiperInfoTest.cs | 38 +++++++++++++++++++++------ + Tests/NamedPipeStreamPiperInfoTest.cs | 2 +- + winsocat/NamedPipe.cs | 37 ++++++++++++++++++++++---- + 4 files changed, 65 insertions(+), 14 deletions(-) + +diff --git a/README.md b/README.md +index f7ecfb4..f0a2f26 100644 +--- a/README.md ++++ b/README.md +@@ -37,6 +37,8 @@ The `address1` can accept `STDIO`, `TCP-LISTEN`, `TCP`, `NPIPE`, `NPIPE-LISTEN`, + + The `address2` can accept `STDIO`, `TCP`, `NPIPE`, `EXEC`, `WSL`, `UNIX`, `HVSOCK`, `SP` socket types. + ++`NPIPE-LISTEN` supports the `ACL=AllowCurrentUser` parameter, in this case, no other user that is connected to the machine can read / write from / to the pipe. The default is `ACL=AllowEveryone`. ++ + ## Examples + + * It can bridge standard input/output and tcp connection to address **127.0.0.1** on port **80**. +diff --git a/Tests/NamedPipeListenPiperInfoTest.cs b/Tests/NamedPipeListenPiperInfoTest.cs +index 2d84ef9..9f0d3d4 100644 +--- a/Tests/NamedPipeListenPiperInfoTest.cs ++++ b/Tests/NamedPipeListenPiperInfoTest.cs +@@ -5,6 +5,8 @@ namespace APPTest; + public class NamedPipeListenPiperInfoTest + { + [TestCase("NPIPE-LISTEN:fooPipe")] ++ [TestCase("NPIPE-LISTEN:fooPipe,ACL=AllowEveryone")] ++ [TestCase("NPIPE-LISTEN:fooPipe,ACL=AllowCurrentUser")] + public void VaildInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +@@ -18,22 +20,42 @@ public void CaseInsensitiveValidInputParseTest(string input) + var element = AddressElement.TryParse(input); + Assert.NotNull(Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element)); + } +- ++ + [TestCase("STDIO")] + [TestCase("TCP:127.0.0.1:80")] + [TestCase("TCP-LISTEN:127.0.0.1:80")] + [TestCase("NPIPE:fooServer:barPipe")] ++ [TestCase("NPIPE:fooServer:barPipe")] ++ [TestCase("NPIPE:fooServer:barPipe")] + [TestCase(@"EXEC:'C:\Foo.exe bar'")] + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); + Assert.Null(Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element)); +- } +- +- [TestCase("NPIPE-LISTEN:fooPipe", ExpectedResult = "fooPipe")] +- public string PipePatternMatchTest(string input) ++ } ++ ++ [TestCase("NPIPE-LISTEN:fooPipe")] ++ [TestCase("NPIPE-LISTEN:fooPipe,ACL=AllowEveryone")] ++ [TestCase("NPIPE-LISTEN:fooPipe,ACL=AllowCurrentUser")] ++ public void PipePatternMatchTest(string input) + { +- var element = AddressElement.TryParse(input); +- return Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element).PipeName; ++ // Case 1 - Default ACL ++ var element = AddressElement.TryParse("NPIPE-LISTEN:fooPipe"); ++ var parsed = Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element); ++ Assert.That(parsed.PipeName, Is.EqualTo("fooPipe")); ++ Assert.That(parsed.ACL, Is.EqualTo("AllowEveryone")); ++ ++ // Case 2 - AllowEveryone ACL ++ element = AddressElement.TryParse("NPIPE-LISTEN:fooPipe,ACL=AllowEveryone"); ++ parsed = Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element); ++ Assert.That(parsed.PipeName, Is.EqualTo("fooPipe")); ++ Assert.That(parsed.ACL, Is.EqualTo("AllowEveryone")); ++ ++ // Case 3 - AllowCurrentUser ACL ++ element = AddressElement.TryParse("NPIPE-LISTEN:fooPipe,ACL=AllowCurrentUser"); ++ parsed = Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element); ++ Assert.That(parsed.PipeName, Is.EqualTo("fooPipe")); ++ Assert.That(parsed.ACL, Is.EqualTo("AllowCurrentUser")); ++ + } +-} +\ No newline at end of file ++} +diff --git a/Tests/NamedPipeStreamPiperInfoTest.cs b/Tests/NamedPipeStreamPiperInfoTest.cs +index 868694c..ec76eb0 100644 +--- a/Tests/NamedPipeStreamPiperInfoTest.cs ++++ b/Tests/NamedPipeStreamPiperInfoTest.cs +@@ -24,7 +24,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + [TestCase("STDIO")] + [TestCase("TCP:127.0.0.1:80")] + [TestCase("TCP-LISTEN:127.0.0.1:80")] +- [TestCase("NPIPE-LISTEN:fooPipe")] ++ [TestCase("NPIPE-LISTEN:fooPipe")] + [TestCase(@"EXEC:'C:\Foo.exe bar'")] + public void InvalidInputParseTest(string input) + { +diff --git a/winsocat/NamedPipe.cs b/winsocat/NamedPipe.cs +index a3c28dd..8548248 100644 +--- a/winsocat/NamedPipe.cs ++++ b/winsocat/NamedPipe.cs +@@ -1,4 +1,5 @@ + using System.IO.Pipes; ++using System.Security.Principal; + + namespace Firejox.App.WinSocat; + +@@ -6,14 +7,17 @@ public class NamedPipeStreamPiperInfo + { + private readonly string _serverName; + private readonly string _pipeName; ++ private readonly string _acl; + + public string ServerName => _serverName; + public string PipeName => _pipeName; ++ public string ACL => _acl; + +- public NamedPipeStreamPiperInfo(string serverName, string pipeName) ++ public NamedPipeStreamPiperInfo(string serverName, string pipeName, string acl) + { + _serverName = serverName; + _pipeName = pipeName; ++ _acl = acl; + } + public static NamedPipeStreamPiperInfo TryParse(AddressElement element) + { +@@ -31,24 +35,28 @@ public static NamedPipeStreamPiperInfo TryParse(AddressElement element) + + pipeName = element.Address.Substring(sepIndex + 1); + +- return new NamedPipeStreamPiperInfo(serverName, pipeName); ++ return new NamedPipeStreamPiperInfo(serverName, pipeName, element.Options.GetValueOrDefault("ACL", "AllowEveryone")); + } + } + + public class NamedPipeListenPiperInfo + { + private readonly string _pipeName; ++ private readonly string _acl = "AllowEveryone"; ++ + public string PipeName => _pipeName; ++ public string ACL => _acl; + +- public NamedPipeListenPiperInfo(string pipeName) ++ public NamedPipeListenPiperInfo(string pipeName, string acl = "AllowEveryone") + { + _pipeName = pipeName; ++ _acl = acl; + } + + public static NamedPipeListenPiperInfo TryParse(AddressElement element) + { + if (element.Tag.Equals("NPIPE-LISTEN", StringComparison.OrdinalIgnoreCase)) +- return new NamedPipeListenPiperInfo(element.Address); ++ return new NamedPipeListenPiperInfo(element.Address, element.Options.GetValueOrDefault("ACL", "AllowEveryone")); + + return null!; + } +@@ -135,6 +143,24 @@ public NamedPipeListenPiper(NamedPipeListenPiperInfo info) + _closed = false; + } + ++ public void SetPermissions(NamedPipeServerStream _serverStream) ++ { ++ if (OperatingSystem.IsWindows()) ++ { ++ // Only allow current user ++ if (_info.ACL.Equals("AllowCurrentUser", StringComparison.OrdinalIgnoreCase)) ++ { ++ var securityIdentifier = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); ++ var pipeAcl = new PipeAccessRule(securityIdentifier, ++ PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, ++ System.Security.AccessControl.AccessControlType.Allow); ++ var pipeSecurity = new PipeSecurity(); ++ pipeSecurity.AddAccessRule(pipeAcl); ++ _serverStream.SetAccessControl(pipeSecurity); ++ } ++ } ++ } ++ + public IPiper NewIncomingPiper() + { + _serverStream = new NamedPipeServerStream( +@@ -143,8 +169,8 @@ public IPiper NewIncomingPiper() + -1, + PipeTransmissionMode.Byte, + PipeOptions.Asynchronous); ++ SetPermissions(_serverStream); + _serverStream.WaitForConnection(); +- + var tmpServerStream = _serverStream; + _serverStream = null; + return new StreamPiper(tmpServerStream); +@@ -161,6 +187,7 @@ public async Task NewIncomingPiperAsync() + -1, + PipeTransmissionMode.Byte, + PipeOptions.Asynchronous); ++ SetPermissions(_serverStream); + await _serverStream.WaitForConnectionAsync(); + + var tmpServerStream = _serverStream; + +From aa192a8507d4e6a7a1800a29d47d21d45a492b70 Mon Sep 17 00:00:00 2001 +From: Ionut Stoica +Date: Thu, 3 Oct 2024 17:18:18 +0200 +Subject: [PATCH 2/2] Update all dependencies - migrate to dotnet 8.0 + +--- + .../publish-executable-on-release.yaml | 4 ++-- + .github/workflows/unit-test.yml | 4 ++-- + .gitignore | 1 + + .idea/.idea.WinSocat/.idea/.gitignore | 13 ----------- + .idea/.idea.WinSocat/.idea/.name | 1 - + .idea/.idea.WinSocat/.idea/encodings.xml | 4 ---- + .idea/.idea.WinSocat/.idea/indexLayout.xml | 8 ------- + .idea/.idea.WinSocat/.idea/vcs.xml | 6 ----- + Tests/AddressElementTest.cs | 4 ++-- + Tests/HyperVListenPiperInfoTest.cs | 6 ++--- + Tests/HyperVStreamPiperInfoTest.cs | 7 +++--- + Tests/NamedPipeListenPiperInfoTest.cs | 12 +++++----- + Tests/NamedPipeListenPiperStrategyTest.cs | 6 +++-- + Tests/NamedPipeStreamPiperInfoTest.cs | 12 +++++----- + Tests/PiperStrategyTest.cs | 23 +++++++++++-------- + Tests/ProcPiperInfoTest.cs | 10 ++++---- + Tests/SerialPortPiperInfoTest.cs | 6 ++--- + Tests/StdPiperInfoTest.cs | 6 ++--- + Tests/TcpListenPiperInfoTest.cs | 6 ++--- + Tests/TcpListenPiperStrategyTest.cs | 7 +++--- + Tests/TcpStreamPiperInfoTest.cs | 12 +++++----- + Tests/Tests.csproj | 22 +++++++++++------- + Tests/UnixSocketListenPiperInfoTest.cs | 6 ++--- + Tests/UnixSocketListenPiperStrategyTest.cs | 5 ++-- + Tests/UnixSocketStreamPiperInfoTest.cs | 7 +++--- + global.json | 2 +- + winsocat/Program.cs | 8 ++++--- + winsocat/winsocat.csproj | 8 +++---- + 28 files changed, 101 insertions(+), 115 deletions(-) + delete mode 100644 .idea/.idea.WinSocat/.idea/.gitignore + delete mode 100644 .idea/.idea.WinSocat/.idea/.name + delete mode 100644 .idea/.idea.WinSocat/.idea/encodings.xml + delete mode 100644 .idea/.idea.WinSocat/.idea/indexLayout.xml + delete mode 100644 .idea/.idea.WinSocat/.idea/vcs.xml + +diff --git a/.github/workflows/publish-executable-on-release.yaml b/.github/workflows/publish-executable-on-release.yaml +index 0657e34..b881a65 100644 +--- a/.github/workflows/publish-executable-on-release.yaml ++++ b/.github/workflows/publish-executable-on-release.yaml +@@ -15,10 +15,10 @@ jobs: + result-encoding: string + script: return context.payload.release.tag_name.substring(1) # remove `v` + - uses: actions/checkout@v3 +- - name: Setup .Net 6.0 ++ - name: Setup .Net 8.0 + uses: actions/setup-dotnet@v3 + with: +- dotnet-version: '6.0' ++ dotnet-version: '8.0' + - name: Install dependencies + run: dotnet restore + - name: Build WinSocat +diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml +index 22d5cc1..90e6d8e 100644 +--- a/.github/workflows/unit-test.yml ++++ b/.github/workflows/unit-test.yml +@@ -18,10 +18,10 @@ jobs: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 +- - name: Setup .Net 6.0 ++ - name: Setup .Net 8.0 + uses: actions/setup-dotnet@v3 + with: +- dotnet-version: '6.0' ++ dotnet-version: '8.0' + - name: Install dependencies + run: dotnet restore + - name: Build +diff --git a/.gitignore b/.gitignore +index 813e24b..7571bbc 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -2,4 +2,5 @@ + /winsocat/bin/ + /Tests/obj + /Tests/bin ++/.vs + *.user +\ No newline at end of file +diff --git a/.idea/.idea.WinSocat/.idea/.gitignore b/.idea/.idea.WinSocat/.idea/.gitignore +deleted file mode 100644 +index 0275247..0000000 +--- a/.idea/.idea.WinSocat/.idea/.gitignore ++++ /dev/null +@@ -1,13 +0,0 @@ +-# Default ignored files +-/shelf/ +-/workspace.xml +-# Rider ignored files +-/modules.xml +-/projectSettingsUpdater.xml +-/.idea.Solution1.iml +-/contentModel.xml +-# Editor-based HTTP Client requests +-/httpRequests/ +-# Datasource local storage ignored files +-/dataSources/ +-/dataSources.local.xml +diff --git a/.idea/.idea.WinSocat/.idea/.name b/.idea/.idea.WinSocat/.idea/.name +deleted file mode 100644 +index b843923..0000000 +--- a/.idea/.idea.WinSocat/.idea/.name ++++ /dev/null +@@ -1 +0,0 @@ +-WinSocat +\ No newline at end of file +diff --git a/.idea/.idea.WinSocat/.idea/encodings.xml b/.idea/.idea.WinSocat/.idea/encodings.xml +deleted file mode 100644 +index df87cf9..0000000 +--- a/.idea/.idea.WinSocat/.idea/encodings.xml ++++ /dev/null +@@ -1,4 +0,0 @@ +- +- +- +- +\ No newline at end of file +diff --git a/.idea/.idea.WinSocat/.idea/indexLayout.xml b/.idea/.idea.WinSocat/.idea/indexLayout.xml +deleted file mode 100644 +index 7b08163..0000000 +--- a/.idea/.idea.WinSocat/.idea/indexLayout.xml ++++ /dev/null +@@ -1,8 +0,0 @@ +- +- +- +- +- +- +- +- +\ No newline at end of file +diff --git a/.idea/.idea.WinSocat/.idea/vcs.xml b/.idea/.idea.WinSocat/.idea/vcs.xml +deleted file mode 100644 +index 94a25f7..0000000 +--- a/.idea/.idea.WinSocat/.idea/vcs.xml ++++ /dev/null +@@ -1,6 +0,0 @@ +- +- +- +- +- +- +\ No newline at end of file +diff --git a/Tests/AddressElementTest.cs b/Tests/AddressElementTest.cs +index d9d6dbd..56be0fb 100644 +--- a/Tests/AddressElementTest.cs ++++ b/Tests/AddressElementTest.cs +@@ -13,7 +13,7 @@ public class AddressElementTest + [TestCase("tag:\'foo \"bar\"\',opt1,opt2")] + public void ValidInputParseTest(string input) + { +- Assert.NotNull(AddressElement.TryParse(input)); ++ Assert.That(AddressElement.TryParse(input), Is.Not.Null); + } + + [TestCase("tag:\'foo\"")] +@@ -21,7 +21,7 @@ public void ValidInputParseTest(string input) + [TestCase("tag:\'foo \"bar\',opt1, opt2")] + public void InvalidInputParseTest(string input) + { +- Assert.Null(AddressElement.TryParse(input)); ++ Assert.That(AddressElement.TryParse(input), Is.Null); + } + + [TestCase("STDIO", ExpectedResult = "STDIO")] +diff --git a/Tests/HyperVListenPiperInfoTest.cs b/Tests/HyperVListenPiperInfoTest.cs +index 018ce76..05fc7f9 100644 +--- a/Tests/HyperVListenPiperInfoTest.cs ++++ b/Tests/HyperVListenPiperInfoTest.cs +@@ -25,7 +25,7 @@ public class HyperVListenPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(HyperVListenPiperInfo.TryParse(element)); ++ Assert.That(HyperVListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("HVSOCK-LISTEN:00000000-0000-0000-0000-000000000000:00000000-0000-0000-0000-000000000000")] +@@ -39,7 +39,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(HyperVListenPiperInfo.TryParse(element)); ++ Assert.That(HyperVListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -53,7 +53,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(HyperVListenPiperInfo.TryParse(element)); ++ Assert.That(HyperVListenPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("HVSOCK-LISTEN:00000000-0000-0000-0000-000000000000:00000000-0000-0000-0000-000000000000", ExpectedResult = "00000000-0000-0000-0000-000000000000")] +diff --git a/Tests/HyperVStreamPiperInfoTest.cs b/Tests/HyperVStreamPiperInfoTest.cs +index de32d3e..123c989 100644 +--- a/Tests/HyperVStreamPiperInfoTest.cs ++++ b/Tests/HyperVStreamPiperInfoTest.cs +@@ -1,4 +1,5 @@ + using Firejox.App.WinSocat; ++ + namespace APPTest; + + public class HyperVStreamPiperInfoTest +@@ -24,7 +25,7 @@ public class HyperVStreamPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(HyperVStreamPiperInfo.TryParse(element)); ++ Assert.That(HyperVStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("HVSOCK:00000000-0000-0000-0000-000000000000:00000000-0000-0000-0000-000000000000")] +@@ -38,7 +39,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(HyperVStreamPiperInfo.TryParse(element)); ++ Assert.That(HyperVStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -52,7 +53,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(HyperVStreamPiperInfo.TryParse(element)); ++ Assert.That(HyperVStreamPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("HVSOCK:00000000-0000-0000-0000-000000000000:00000000-0000-0000-0000-000000000000", ExpectedResult = "00000000-0000-0000-0000-000000000000")] +diff --git a/Tests/NamedPipeListenPiperInfoTest.cs b/Tests/NamedPipeListenPiperInfoTest.cs +index 9f0d3d4..7d793fa 100644 +--- a/Tests/NamedPipeListenPiperInfoTest.cs ++++ b/Tests/NamedPipeListenPiperInfoTest.cs +@@ -10,7 +10,7 @@ public class NamedPipeListenPiperInfoTest + public void VaildInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element)); ++ Assert.That(NamedPipeListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("NPIPE-LISTEN:fooPipe")] +@@ -18,7 +18,7 @@ public void VaildInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element)); ++ Assert.That(NamedPipeListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -31,7 +31,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element)); ++ Assert.That(NamedPipeListenPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("NPIPE-LISTEN:fooPipe")] +@@ -41,19 +41,19 @@ public void PipePatternMatchTest(string input) + { + // Case 1 - Default ACL + var element = AddressElement.TryParse("NPIPE-LISTEN:fooPipe"); +- var parsed = Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element); ++ var parsed = NamedPipeListenPiperInfo.TryParse(element); + Assert.That(parsed.PipeName, Is.EqualTo("fooPipe")); + Assert.That(parsed.ACL, Is.EqualTo("AllowEveryone")); + + // Case 2 - AllowEveryone ACL + element = AddressElement.TryParse("NPIPE-LISTEN:fooPipe,ACL=AllowEveryone"); +- parsed = Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element); ++ parsed = NamedPipeListenPiperInfo.TryParse(element); + Assert.That(parsed.PipeName, Is.EqualTo("fooPipe")); + Assert.That(parsed.ACL, Is.EqualTo("AllowEveryone")); + + // Case 3 - AllowCurrentUser ACL + element = AddressElement.TryParse("NPIPE-LISTEN:fooPipe,ACL=AllowCurrentUser"); +- parsed = Firejox.App.WinSocat.NamedPipeListenPiperInfo.TryParse(element); ++ parsed = NamedPipeListenPiperInfo.TryParse(element); + Assert.That(parsed.PipeName, Is.EqualTo("fooPipe")); + Assert.That(parsed.ACL, Is.EqualTo("AllowCurrentUser")); + +diff --git a/Tests/NamedPipeListenPiperStrategyTest.cs b/Tests/NamedPipeListenPiperStrategyTest.cs +index 4b631bd..379a6ba 100644 +--- a/Tests/NamedPipeListenPiperStrategyTest.cs ++++ b/Tests/NamedPipeListenPiperStrategyTest.cs +@@ -52,8 +52,8 @@ public void EchoPiperTest() + + writer.WriteLine("Foo"); + writer.Flush(); +- +- StringAssert.AreEqualIgnoringCase("Foo", reader.ReadLine()); ++ ++ Assert.That(reader.ReadLine(), Is.EqualTo("Foo").IgnoreCase); + } + } + +@@ -61,5 +61,7 @@ public void EchoPiperTest() + public void CleanUp() + { + _source.Cancel(); ++ _source.Dispose(); + } ++ + } +\ No newline at end of file +diff --git a/Tests/NamedPipeStreamPiperInfoTest.cs b/Tests/NamedPipeStreamPiperInfoTest.cs +index ec76eb0..b6268f1 100644 +--- a/Tests/NamedPipeStreamPiperInfoTest.cs ++++ b/Tests/NamedPipeStreamPiperInfoTest.cs +@@ -9,16 +9,16 @@ public class NamedPipeStreamPiperInfoTest + [TestCase("NPIPE:barPipe")] + public void ValidInputParseTest(string input) + { +- var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.NamedPipeStreamPiperInfo.TryParse(element)); ++ var element = AddressElement.TryParse(input); ++ Assert.That(NamedPipeStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("NPIPE:fooServer:barPipe")] + [TestCase("npipe:fooServer:barPipe")] + public void CaseInsensitiveValidInputParseTest(string input) + { +- var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.NamedPipeStreamPiperInfo.TryParse(element)); ++ var element = AddressElement.TryParse(input); ++ Assert.That(NamedPipeStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -28,8 +28,8 @@ public void CaseInsensitiveValidInputParseTest(string input) + [TestCase(@"EXEC:'C:\Foo.exe bar'")] + public void InvalidInputParseTest(string input) + { +- var element = AddressElement.TryParse(input); +- Assert.Null(Firejox.App.WinSocat.NamedPipeStreamPiperInfo.TryParse(element)); ++ var element = AddressElement.TryParse(input); ++ Assert.That(NamedPipeStreamPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("NPIPE:fooServer:barPipe", ExpectedResult = "fooServer")] +diff --git a/Tests/PiperStrategyTest.cs b/Tests/PiperStrategyTest.cs +index 0c851d4..cf19170 100644 +--- a/Tests/PiperStrategyTest.cs ++++ b/Tests/PiperStrategyTest.cs +@@ -104,7 +104,7 @@ public void EchoPiperTest() + _writeStream.Seek(0, SeekOrigin.Begin); + var reader = new StreamReader(_writeStream); + +- StringAssert.AreEqualIgnoringCase("Foo", reader.ReadToEnd()); ++ Assert.That(reader.ReadToEnd(), Is.EqualTo("Foo").IgnoreCase); + } + + [Test] +@@ -149,10 +149,10 @@ public void TcpStreamPiperTest() + serverThread.Join(); + + _writeStream.Seek(0, SeekOrigin.Begin); +- var reader = new StreamReader(_writeStream); +- +- StringAssert.AreEqualIgnoringCase("Foo", tcs.Task.Result); +- StringAssert.AreEqualIgnoringCase("Bar", reader.ReadToEnd()); ++ var reader = new StreamReader(_writeStream); ++ ++ Assert.That(tcs.Task.Result, Is.EqualTo("Foo").IgnoreCase); ++ Assert.That(reader.ReadToEnd(), Is.EqualTo("Bar").IgnoreCase); + } + + [Test] +@@ -188,8 +188,9 @@ public void NamedPipeStreamPiperTest() + + _writeStream.Seek(0, SeekOrigin.Begin); + var reader = new StreamReader(_writeStream); +- StringAssert.AreEqualIgnoringCase("Bar", reader.ReadToEnd()); +- StringAssert.AreEqualIgnoringCase("Foo", tcs.Task.Result); ++ ++ Assert.That(reader.ReadToEnd(), Is.EqualTo("Bar").IgnoreCase); ++ Assert.That(tcs.Task.Result, Is.EqualTo("Foo").IgnoreCase); + } + + [Test] +@@ -241,14 +242,16 @@ public void UnixSocketStreamPiperTest() + _strategy.Execute(factory); + + _writeStream.Seek(0, SeekOrigin.Begin); +- var reader = new StreamReader(_writeStream); +- StringAssert.AreEqualIgnoringCase("Bar", reader.ReadToEnd()); +- StringAssert.AreEqualIgnoringCase("Foo", tcs.Task.Result); ++ var reader = new StreamReader(_writeStream); ++ ++ Assert.That(reader.ReadToEnd(), Is.EqualTo("Bar").IgnoreCase); ++ Assert.That(tcs.Task.Result, Is.EqualTo("Foo").IgnoreCase); + } + + [TearDown] + public void CleanUp() + { + _writeStream.Dispose(); ++ _writer.Dispose(); + } + } +\ No newline at end of file +diff --git a/Tests/ProcPiperInfoTest.cs b/Tests/ProcPiperInfoTest.cs +index 2b1e122..eda201a 100644 +--- a/Tests/ProcPiperInfoTest.cs ++++ b/Tests/ProcPiperInfoTest.cs +@@ -10,7 +10,7 @@ public class ProcPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.ProcPiperInfo.TryParse(element)); ++ Assert.That(ProcPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase(@"EXEC:C:\Foo.exe bar")] +@@ -18,7 +18,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.ProcPiperInfo.TryParse(element)); ++ Assert.That(ProcPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -29,7 +29,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(Firejox.App.WinSocat.ProcPiperInfo.TryParse(element)); ++ Assert.That(ProcPiperInfo.TryParse(element), Is.Null); + } + + [TestCase(@"EXEC:C:\Foo.exe bar", ExpectedResult = @"C:\Foo.exe")] +@@ -38,7 +38,7 @@ public void InvalidInputParseTest(string input) + public string FileNamePatternMatchTest(string input) + { + var element = AddressElement.TryParse(input); +- return Firejox.App.WinSocat.ProcPiperInfo.TryParse(element).FileName; ++ return ProcPiperInfo.TryParse(element).FileName; + } + + [TestCase(@"EXEC:C:\Foo.exe bar1 bar2", ExpectedResult = "bar1 bar2")] +@@ -46,6 +46,6 @@ public string FileNamePatternMatchTest(string input) + public string ArgumentPatternMatchTest(string input) + { + var element = AddressElement.TryParse(input); +- return Firejox.App.WinSocat.ProcPiperInfo.TryParse(element).Arguments; ++ return ProcPiperInfo.TryParse(element).Arguments; + } + } +\ No newline at end of file +diff --git a/Tests/SerialPortPiperInfoTest.cs b/Tests/SerialPortPiperInfoTest.cs +index 77e8764..9f3c0e0 100644 +--- a/Tests/SerialPortPiperInfoTest.cs ++++ b/Tests/SerialPortPiperInfoTest.cs +@@ -11,7 +11,7 @@ public class SerialPortPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(SerialPortPiperInfo.TryParse(element)); ++ Assert.That(SerialPortPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("sp:COM1")] +@@ -19,7 +19,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(SerialPortPiperInfo.TryParse(element)); ++ Assert.That(SerialPortPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -33,7 +33,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(SerialPortPiperInfo.TryParse(element)); ++ Assert.That(SerialPortPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("sp:COM1", ExpectedResult = "COM1")] +diff --git a/Tests/StdPiperInfoTest.cs b/Tests/StdPiperInfoTest.cs +index c910e77..ec0cfc6 100644 +--- a/Tests/StdPiperInfoTest.cs ++++ b/Tests/StdPiperInfoTest.cs +@@ -9,7 +9,7 @@ public class StdPiperInfoTest + public void VaildInputCheckTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.IsTrue(Firejox.App.WinSocat.StdPiperInfo.Check(element)); ++ Assert.That(Firejox.App.WinSocat.StdPiperInfo.Check(element), Is.True); + } + + [TestCase("STDIO")] +@@ -17,7 +17,7 @@ public void VaildInputCheckTest(string input) + public void CaseInsensitiveValidInputCheckTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.IsTrue(Firejox.App.WinSocat.StdPiperInfo.Check(element)); ++ Assert.That(Firejox.App.WinSocat.StdPiperInfo.Check(element), Is.True); + } + + [TestCase("TCP:127.0.0.1:80")] +@@ -28,6 +28,6 @@ public void CaseInsensitiveValidInputCheckTest(string input) + public void InvalidInputCheckTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.IsFalse(Firejox.App.WinSocat.StdPiperInfo.Check(element)); ++ Assert.That(Firejox.App.WinSocat.StdPiperInfo.Check(element), Is.False); + } + } +\ No newline at end of file +diff --git a/Tests/TcpListenPiperInfoTest.cs b/Tests/TcpListenPiperInfoTest.cs +index 40f0614..2751d21 100644 +--- a/Tests/TcpListenPiperInfoTest.cs ++++ b/Tests/TcpListenPiperInfoTest.cs +@@ -11,7 +11,7 @@ public class TcpListenPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.TcpListenPiperInfo.TryParse(element)); ++ Assert.That(Firejox.App.WinSocat.TcpListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("TCP-LISTEN:127.0.0.1:80")] +@@ -19,7 +19,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.TcpListenPiperInfo.TryParse(element)); ++ Assert.That(Firejox.App.WinSocat.TcpListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -30,7 +30,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(Firejox.App.WinSocat.TcpListenPiperInfo.TryParse(element)); ++ Assert.That(Firejox.App.WinSocat.TcpListenPiperInfo.TryParse(element), Is.Null); + } + + [TestCaseSource(nameof(AddressCases))] +diff --git a/Tests/TcpListenPiperStrategyTest.cs b/Tests/TcpListenPiperStrategyTest.cs +index 28102c9..c792d25 100644 +--- a/Tests/TcpListenPiperStrategyTest.cs ++++ b/Tests/TcpListenPiperStrategyTest.cs +@@ -50,15 +50,16 @@ public void EchoPiperTest() + var reader = new StreamReader(stream); + + writer.WriteLine("Foo"); +- writer.Flush(); +- +- StringAssert.AreEqualIgnoringCase("Foo", reader.ReadLine()); ++ writer.Flush(); ++ ++ Assert.That(reader.ReadLine(), Is.EqualTo("Foo").IgnoreCase); + } + + [TearDown] + public void CleanUp() + { + _source.Cancel(); ++ _source.Dispose(); + } + + +diff --git a/Tests/TcpStreamPiperInfoTest.cs b/Tests/TcpStreamPiperInfoTest.cs +index db22c95..19a1b2e 100644 +--- a/Tests/TcpStreamPiperInfoTest.cs ++++ b/Tests/TcpStreamPiperInfoTest.cs +@@ -9,8 +9,8 @@ public class TcpStreamPiperInfoTest + [TestCase("TCP:80")] + public void ValidInputParseTest(string input) + { +- var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.TcpStreamPiperInfo.TryParse(element)); ++ var element = AddressElement.TryParse(input); ++ Assert.That(TcpStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("TCP:127.0.0.1:80")] +@@ -18,7 +18,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(Firejox.App.WinSocat.TcpStreamPiperInfo.TryParse(element)); ++ Assert.That(TcpStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -29,7 +29,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(Firejox.App.WinSocat.TcpStreamPiperInfo.TryParse(element)); ++ Assert.That(TcpStreamPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("TCP:127.0.0.1:80", ExpectedResult = "127.0.0.1")] +@@ -38,7 +38,7 @@ public void InvalidInputParseTest(string input) + public string HostPatternMatchTest(string input) + { + var element = AddressElement.TryParse(input); +- return Firejox.App.WinSocat.TcpStreamPiperInfo.TryParse(element).Host; ++ return TcpStreamPiperInfo.TryParse(element).Host; + } + + [TestCase("TCP:127.0.0.1:80", ExpectedResult = 80)] +@@ -47,6 +47,6 @@ public string HostPatternMatchTest(string input) + public int PortPatternMatchTest(string input) + { + var element = AddressElement.TryParse(input); +- return Firejox.App.WinSocat.TcpStreamPiperInfo.TryParse(element).Port; ++ return TcpStreamPiperInfo.TryParse(element).Port; + } + } +\ No newline at end of file +diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj +index 44c45b5..3c29060 100644 +--- a/Tests/Tests.csproj ++++ b/Tests/Tests.csproj +@@ -1,7 +1,7 @@ + + + +- net6.0 ++ net8.0 + enable + enable + +@@ -11,13 +11,19 @@ + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ all ++ runtime; build; native; contentfiles; analyzers; buildtransitive ++ ++ ++ all ++ runtime; build; native; contentfiles; analyzers; buildtransitive ++ ++ ++ + + + +diff --git a/Tests/UnixSocketListenPiperInfoTest.cs b/Tests/UnixSocketListenPiperInfoTest.cs +index 22cbe30..7227e74 100644 +--- a/Tests/UnixSocketListenPiperInfoTest.cs ++++ b/Tests/UnixSocketListenPiperInfoTest.cs +@@ -9,7 +9,7 @@ public class UnixSocketListenPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(UnixSocketListenPiperInfo.TryParse(element)); ++ Assert.That(UnixSocketListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("UNIX-LISTEN:foo.sock")] +@@ -17,7 +17,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(UnixSocketListenPiperInfo.TryParse(element)); ++ Assert.That(UnixSocketListenPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -30,7 +30,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(UnixSocketListenPiperInfo.TryParse(element)); ++ Assert.That(UnixSocketListenPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("UNIX-LISTEN:foo.sock", ExpectedResult = "foo.sock")] +diff --git a/Tests/UnixSocketListenPiperStrategyTest.cs b/Tests/UnixSocketListenPiperStrategyTest.cs +index 495409c..f5ac13d 100644 +--- a/Tests/UnixSocketListenPiperStrategyTest.cs ++++ b/Tests/UnixSocketListenPiperStrategyTest.cs +@@ -55,13 +55,14 @@ public void EchoPiperTest() + + writer.WriteLine("Foo"); + writer.Flush(); +- +- StringAssert.AreEqualIgnoringCase("Foo", reader.ReadLine()); ++ ++ Assert.That(reader.ReadLine(), Is.EqualTo("Foo").IgnoreCase); + } + + [TearDown] + public void CleanUp() + { + _source.Cancel(); ++ _source.Dispose(); + } + } +\ No newline at end of file +diff --git a/Tests/UnixSocketStreamPiperInfoTest.cs b/Tests/UnixSocketStreamPiperInfoTest.cs +index 028766c..2bdaea7 100644 +--- a/Tests/UnixSocketStreamPiperInfoTest.cs ++++ b/Tests/UnixSocketStreamPiperInfoTest.cs +@@ -9,7 +9,8 @@ public class UnixSocketStreamPiperInfoTest + public void ValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(UnixSocketStreamPiperInfo.TryParse(element)); ++ Assert.That(UnixSocketStreamPiperInfo.TryParse(element), Is.Not.Null); ++ + } + + [TestCase("UNIX:foo.sock")] +@@ -17,7 +18,7 @@ public void ValidInputParseTest(string input) + public void CaseInsensitiveValidInputParseTest(string input) + { + var element = AddressElement.TryParse(input); +- Assert.NotNull(UnixSocketStreamPiperInfo.TryParse(element)); ++ Assert.That(UnixSocketStreamPiperInfo.TryParse(element), Is.Not.Null); + } + + [TestCase("STDIO")] +@@ -29,7 +30,7 @@ public void CaseInsensitiveValidInputParseTest(string input) + public void InvalidInputParse(string input) + { + var element = AddressElement.TryParse(input); +- Assert.Null(UnixSocketStreamPiperInfo.TryParse(element)); ++ Assert.That(UnixSocketStreamPiperInfo.TryParse(element), Is.Null); + } + + [TestCase("UNIX:foo.sock", ExpectedResult = "foo.sock")] +diff --git a/global.json b/global.json +index 9e5e1fd..dad2db5 100644 +--- a/global.json ++++ b/global.json +@@ -1,6 +1,6 @@ + { + "sdk": { +- "version": "6.0.0", ++ "version": "8.0.0", + "rollForward": "latestMajor", + "allowPrerelease": true + } +diff --git a/winsocat/Program.cs b/winsocat/Program.cs +index f0778c9..6c13aa6 100644 +--- a/winsocat/Program.cs ++++ b/winsocat/Program.cs +@@ -9,9 +9,11 @@ public static async Task Main(string[] args) + var arg1 = new Argument("address1"); + var arg2 = new Argument("address2"); + +- var rootCommand = new RootCommand(); +- rootCommand.Add(arg1); +- rootCommand.Add(arg2); ++ var rootCommand = new RootCommand ++ { ++ arg1, ++ arg2 ++ }; + + rootCommand.SetHandler(async (address1, address2) => + { +diff --git a/winsocat/winsocat.csproj b/winsocat/winsocat.csproj +index fdc1716..c8ac7cb 100644 +--- a/winsocat/winsocat.csproj ++++ b/winsocat/winsocat.csproj +@@ -2,7 +2,7 @@ + + + Exe +- net6.0 ++ net8.0 + enable + enable + true +@@ -27,11 +27,11 @@ + + + +- ++ + + +- +- ++ ++ + + + diff --git a/patches/WinSocat/0003-Improve-solution-setup.patch b/patches/WinSocat/0003-Improve-solution-setup.patch new file mode 100644 index 0000000..13e7f89 --- /dev/null +++ b/patches/WinSocat/0003-Improve-solution-setup.patch @@ -0,0 +1,76 @@ +From fc0baba25d8c7a118381f8a0675444445af7722b Mon Sep 17 00:00:00 2001 +From: Arthur Sengileyev +Date: Wed, 15 Jan 2025 17:21:42 +0200 +Subject: [PATCH] Improve solution setup + +--- + .editorconfig | 10 ++++++++++ + .gitignore | 10 +++++----- + .../PublishProfiles/AppProfile.pubxml | 20 +++++++++++++++++++ + 3 files changed, 35 insertions(+), 5 deletions(-) + create mode 100644 .editorconfig + create mode 100644 winsocat/Properties/PublishProfiles/AppProfile.pubxml + +diff --git a/.editorconfig b/.editorconfig +new file mode 100644 +index 0000000..47af143 +--- /dev/null ++++ b/.editorconfig +@@ -0,0 +1,10 @@ ++# EditorConfig is awesome: https://editorconfig.org ++ ++# top-most EditorConfig file ++root = true ++ ++# Unix-style newlines with a newline ending every file ++[*] ++end_of_line = lf ++insert_final_newline = true ++charset = utf-8 +diff --git a/.gitignore b/.gitignore +index a5a99dd..6e97d64 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -1,6 +1,6 @@ +-/winsocat/obj/ +-/winsocat/bin/ +-/Tests/obj +-/Tests/bin +-/.vs ++obj/ ++bin/ ++.vs/ ++.idea/ ++build/ + *.user +\ No newline at end of file +diff --git a/winsocat/Properties/PublishProfiles/AppProfile.pubxml b/winsocat/Properties/PublishProfiles/AppProfile.pubxml +new file mode 100644 +index 0000000..ef9eb0f +--- /dev/null ++++ b/winsocat/Properties/PublishProfiles/AppProfile.pubxml +@@ -0,0 +1,20 @@ ++ ++ ++ ++ ++ Release ++ Any CPU ++ ..\build\x64 ++ FileSystem ++ <_TargetId>Folder ++ net8.0 ++ win-x64 ++ true ++ true ++ true ++ true ++ true ++ ++ +\ No newline at end of file +-- +2.48.1 + diff --git a/patches/gocat/0001-Updating-deps.patch b/patches/gocat/0001-Updating-deps.patch deleted file mode 100644 index f5aea1c..0000000 --- a/patches/gocat/0001-Updating-deps.patch +++ /dev/null @@ -1,523 +0,0 @@ -From 00683f13b183d9a8be534103cc1b5af145a27802 Mon Sep 17 00:00:00 2001 -From: Arthur Sengileyev -Date: Thu, 18 Aug 2022 14:34:09 +0300 -Subject: [PATCH] Updating deps - ---- - .go-version | 2 +- - go.mod | 48 +++++++++-- - go.sum | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 287 insertions(+), 7 deletions(-) - -diff --git a/.go-version b/.go-version -index 850e742..815d5ca 100644 ---- a/.go-version -+++ b/.go-version -@@ -1 +1 @@ --1.14.0 -+1.19.0 -diff --git a/go.mod b/go.mod -index 42bb04b..9235a87 100644 ---- a/go.mod -+++ b/go.mod -@@ -1,12 +1,48 @@ - module github.com/sumup-oss/gocat - - require ( -- github.com/kelseyhightower/envconfig v1.3.0 -- github.com/magefile/mage v1.8.0 -+ github.com/kelseyhightower/envconfig v1.4.0 -+ github.com/magefile/mage v1.14.0 - github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 -- github.com/spf13/cobra v0.0.3 -- github.com/stretchr/testify v1.4.0 -- github.com/sumup-oss/go-pkgs v0.0.0-20200306132509-b949afdfe2fe -+ github.com/spf13/cobra v1.6.1 -+ github.com/stretchr/testify v1.8.1 -+ github.com/sumup-oss/go-pkgs v0.0.0-20221109153329-2185c70b9df4 -+) -+ -+require ( -+ github.com/davecgh/go-spew v1.1.1 // indirect -+ github.com/elliotchance/orderedmap v1.2.0 // indirect -+ github.com/googleapis/gnostic v0.2.0 // indirect -+ github.com/hashicorp/go-syslog v1.0.0 // indirect -+ github.com/hashicorp/vault/api v1.0.1 // indirect -+ github.com/imdario/mergo v0.3.7 // indirect -+ github.com/inconshreveable/mousetrap v1.1.0 // indirect -+ github.com/konsorten/go-windows-terminal-sequences v1.0.3 // indirect -+ github.com/mattes/go-expand-tilde v0.0.0-20150330173918-cb884138e64c // indirect -+ github.com/mitchellh/go-homedir v1.1.0 // indirect -+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect -+ github.com/modern-go/reflect2 v1.0.1 // indirect -+ github.com/pmezard/go-difflib v1.0.0 // indirect -+ github.com/sirupsen/logrus v1.9.0 // indirect -+ github.com/spf13/pflag v1.0.5 // indirect -+ github.com/sumup-oss/go-pkgs/errors v0.0.0-20221109153329-2185c70b9df4 // indirect -+ github.com/tchap/zapext/v2 v2.1.1 // indirect -+ go.uber.org/atomic v1.10.0 // indirect -+ go.uber.org/multierr v1.9.0 // indirect -+ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee // indirect -+ go.uber.org/zap v1.24.0 // indirect -+ golang.org/x/crypto v0.4.0 // indirect -+ golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a // indirect -+ golang.org/x/sys v0.3.0 // indirect -+ gopkg.in/inf.v0 v0.9.0 // indirect -+ gopkg.in/yaml.v3 v3.0.1 // indirect -+ honnef.co/go/tools v0.0.1-2019.2.3 // indirect -+ k8s.io/api v0.0.0-20190313235455-40a48860b5ab // indirect -+ k8s.io/apimachinery v0.0.0-20190313205120-d7deff9243b1 // indirect -+ k8s.io/client-go v11.0.0+incompatible // indirect -+ k8s.io/klog v0.3.0 // indirect -+ k8s.io/utils v0.0.0-20190308190857-21c4ce38f2a7 // indirect -+ sigs.k8s.io/yaml v1.1.0 // indirect - ) - - replace ( -@@ -15,4 +51,4 @@ replace ( - golang.org/x/text => golang.org/x/text v0.3.3 - ) - --go 1.13 -+go 1.19 -diff --git a/go.sum b/go.sum -index 5eb9543..6836840 100644 ---- a/go.sum -+++ b/go.sum -@@ -1,32 +1,73 @@ - cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= - cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -+github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= - github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= - github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -+github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -+github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= -+github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= -+github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= -+github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= - github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= - github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -+github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= -+github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= - github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= - github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -+github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -+github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= - github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= - github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= - github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= - github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -+github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -+github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -+github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= - github.com/elliotchance/orderedmap v1.2.0 h1:Z2kiPPgjjlS8NN+1EFzE4ZO/HpW02gl9ZH3MHL+bNkg= - github.com/elliotchance/orderedmap v1.2.0/go.mod h1:8hdSl6jmveQw8ScByd3AaNHNk51RhbTazdqtTty+NFw= -+github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -+github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= - github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= - github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= - github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -+github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -+github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -+github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= -+github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -+github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -+github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= - github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -+github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= - github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -+github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -+github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -+github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= - github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= - github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -+github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= - github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= - github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= - github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= - github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -+github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -+github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= - github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= - github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -+github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= - github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -+github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= - github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= - github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= - github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -@@ -38,9 +79,12 @@ github.com/hashicorp/go-plugin v1.0.0/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn - github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= - github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= - github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -+github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= -+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= - github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= - github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= - github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -+github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= - github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= - github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= - github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -@@ -48,29 +92,71 @@ github.com/hashicorp/vault/api v1.0.1/go.mod h1:AV/+M5VPDpB90arloVX0rVDUIHkONiwz - github.com/hashicorp/vault/sdk v0.1.8/go.mod h1:tHZfc6St71twLizWNHvnnbiGFo1aq0eD2jGPLtP8kAU= - github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= - github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= - github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -+github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= - github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= - github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -+github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -+github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -+github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -+github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -+github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -+github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= - github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -+github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -+github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -+github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -+github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -+github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -+github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -+github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= - github.com/kelseyhightower/envconfig v1.3.0 h1:IvRS4f2VcIQy6j4ORGIf9145T/AsUB+oY8LyvN8BXNM= - github.com/kelseyhightower/envconfig v1.3.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -+github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= -+github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= - github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= - github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -+github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -+github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -+github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= - github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= - github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= - github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= - github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -+github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= -+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= - github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= - github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= - github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= - github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= - github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -+github.com/labstack/echo/v4 v4.5.0/go.mod h1:czIriw4a0C1dFun+ObrXp7ok03xON0N1awStJ6ArI7Y= -+github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= - github.com/magefile/mage v1.8.0 h1:mzL+xIopvPURVBwHG9A50JcjBO+xV3b5iZ7khFRI+5E= - github.com/magefile/mage v1.8.0/go.mod h1:IUDi13rsHje59lecXokTfGX0QIzO45uVPlXnJYsXepA= -+github.com/magefile/mage v1.14.0 h1:6QDX3g6z1YvJ4olPhT1wksUcSa/V0a1B+pJb73fBjyo= -+github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= - github.com/mattes/go-expand-tilde v0.0.0-20150330173918-cb884138e64c h1:dI7rYuIgdL8CzoQMKUx6PmUGqnNI2YWVRxrLp7jjoJo= - github.com/mattes/go-expand-tilde v0.0.0-20150330173918-cb884138e64c/go.mod h1:PMwMv7KfNS0jrwgY3VfZGqynI/tZpGNzBHne+hjlU6s= - github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -+github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -+github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= - github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -+github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -+github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -+github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -+github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -+github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -+github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= - github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= - github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= - github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -@@ -80,49 +166,140 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI - github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= - github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= - github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= - github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -+github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -+github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -+github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -+github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -+github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= - github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -+github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= - github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 h1:nRlQD0u1871kaznCnn1EvYiMbum36v7hw1DLPEjds4o= - github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177/go.mod h1:ao5zGxj8Z4x60IOVYZUbDSmt3R8Ddo080vEgPosHpak= - github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= - github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= - github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= - github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= - github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= - github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= - github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= - github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= - github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= - github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -+github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= -+github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= - github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k= - github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -+github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -+github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -+github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -+github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= - github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= - github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -+github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= -+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -+github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -+github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= - github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= - github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -+github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -+github.com/streadway/amqp v0.0.0-20200108173154-1c71cc93ed71/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= - github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= - github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= - github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= - github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= - github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= - github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= - github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= - github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -+github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= - github.com/sumup-oss/go-pkgs v0.0.0-20200306132509-b949afdfe2fe h1:65jMFTmY5ihRqQAQyE2yX5JhwA9RJEaYOUIM7tvgS08= - github.com/sumup-oss/go-pkgs v0.0.0-20200306132509-b949afdfe2fe/go.mod h1:H8Ut4TCoM/c8xCxWJ9nd/8O3WKYFcJN/IPrfL9q/PDs= -+github.com/sumup-oss/go-pkgs v0.0.0-20220623082236-d65190f8c3fa h1:MvMtNfePUik2OjQZTIjaje1GI2QPXQkh1cFeWsKzHu0= -+github.com/sumup-oss/go-pkgs v0.0.0-20220623082236-d65190f8c3fa/go.mod h1:8X4N7XGJ3ttYuylGnVQAyN4bS9pVFX4Gwe7c1BmW4tw= -+github.com/sumup-oss/go-pkgs v0.0.0-20221109153329-2185c70b9df4 h1:MwOOQawHYTzRu3WExaO9O4LHdNMY/d8B8tlnWgqsv1o= -+github.com/sumup-oss/go-pkgs v0.0.0-20221109153329-2185c70b9df4/go.mod h1:8X4N7XGJ3ttYuylGnVQAyN4bS9pVFX4Gwe7c1BmW4tw= -+github.com/sumup-oss/go-pkgs/errors v0.0.0-20210806131309-dd59fc2fd123 h1:+HYRug21MM3QydM/ufdctM9o1Kaew8f1aKTrBKJw1tc= -+github.com/sumup-oss/go-pkgs/errors v0.0.0-20210806131309-dd59fc2fd123/go.mod h1:85LbkrQPwjndGq7rHRBERb4o5Lw6bCLaeuJfD3IQf/0= -+github.com/sumup-oss/go-pkgs/errors v0.0.0-20221109153329-2185c70b9df4 h1:b+kiww6codZvI1iXDk0u9U0LOMdp5jAZYqW8u9aaVp0= -+github.com/sumup-oss/go-pkgs/errors v0.0.0-20221109153329-2185c70b9df4/go.mod h1:85LbkrQPwjndGq7rHRBERb4o5Lw6bCLaeuJfD3IQf/0= - github.com/tchap/zapext v0.0.0-20180117141735-e61c0c882339 h1:5Njn1a7r5mR51ovnu7TBcmoUffg6DyKzzCoVPZHsU+Q= - github.com/tchap/zapext v0.0.0-20180117141735-e61c0c882339/go.mod h1:0VgDSQ0xHJRqkxrwu3G2i2762jSnAJMz7rYxiZGpW1U= -+github.com/tchap/zapext/v2 v2.1.1 h1:b+F48/0QFBqV0Vr8AJYH2nAmgggQncv0SJIESn6+FMw= -+github.com/tchap/zapext/v2 v2.1.1/go.mod h1:YM6t4NfOcMAE9Eo1wSlYIoC017zit9UQinf733BBFEs= -+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -+github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -+github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -+github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -+github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -+github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -+github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -+github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -+github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -+github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -+github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -+github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -+github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -+github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -+github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= - github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= - github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -+github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -+github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= - go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= - go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -+go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -+go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -+go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= -+go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -+go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -+go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= - go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= - go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -+go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -+go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -+go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= -+go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= - go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= - go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= - go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= - go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -+go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -+go.uber.org/zap v1.20.0 h1:N4oPlghZwYG55MlU6LXk/Zp00FVNE9X9wrYO8CEs4lc= -+go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -+go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= -+go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= - golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f h1:aZp0e2vLN4MToVqnjNEYEtrEA8RH8U8FN1CU7JgqsPU= - golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= - golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -@@ -130,19 +307,34 @@ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTk - golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= - golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= - golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= - golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= - golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= - golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= - golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -+golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= -+golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= - golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= - golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= - golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= - golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= - golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -+golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= - golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= - golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= - golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= - golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -+golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -+golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= - golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= - golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= - golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -@@ -152,34 +344,70 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ - golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= - golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= - golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= - golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= - golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= - golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33 h1:I6FyU15t786LL7oL/hn43zqTuEGr4PN7F4XJ1p4E3Y8= - golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= - golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= - golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= - golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= - golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a h1:XCr/YX7O0uxRkLq2k1ApNQMims9eCioF9UpzIPBDmuo= - golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= - golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= - golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= - golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8= -+golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -+golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= - golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM= - golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= -+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= - golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -+golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= - golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -+golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= - golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= - golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= - golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -+golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= - golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= - golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= - golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= - golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -+golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= - golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= - golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= - golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= - golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -+golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -+golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= -+golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= - golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= - golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= - golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -@@ -197,11 +425,27 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+ - gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= - gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -+gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -+gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= - gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -+gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -+gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= - gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= - gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= - gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -+gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= - honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= - honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= - honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= --- -2.39.0 -