1
0
mirror of https://github.com/ncblakely/GiantsTools synced 2024-12-04 18:43:10 +01:00

Compare commits

...

13 Commits

Author SHA1 Message Date
ncblakely
374805a39a
Merge pull request #10 from ncblakely/users/tos/configfile
Clean up out of date .csproj items and move GiantsDefault.config to launcher project.
2022-09-05 16:58:55 -07:00
Nick Blakely
595866fe7a Clean up out of date .csproj items and move GiantsDefault.config to launcher project. 2022-09-05 16:58:24 -07:00
ncblakely
21118bec3b
Merge pull request #9 from ncblakely/users/tos/builder
Use new-style web application builder.
2022-09-05 16:42:02 -07:00
Nick Blakely
3b5c7ce0e1 Use new-style web application builder. 2022-09-05 16:41:46 -07:00
ncblakely
ee40ff8b60
Merge pull request #8 from ncblakely/users/tos/imagecopy
Adjust condition for image copy target and copy dependencies.
2022-09-05 16:18:27 -07:00
Nick Blakely
547318d196 Adjust condition for image copy target and copy dependencies. 2022-09-05 16:18:08 -07:00
ncblakely
666d128787
Merge pull request #7 from ncblakely/users/tos/packageupdate
Update all NuGet packages.
2022-09-05 15:15:50 -07:00
Nick Blakely
a2c20eeee8 Update all NuGet packages. 2022-09-05 14:45:33 -07:00
ncblakely
470d21ec09
Merge pull request #6 from ncblakely/users/tos/fixconfig
Fix config defaulting logic.
2022-09-05 14:41:11 -07:00
Nick Blakely
77719159d0 Fix config defaulting logic. 2022-09-05 14:40:36 -07:00
ncblakely
d5eff87ae2
Merge pull request #5 from ncblakely/users/tos/versioning
Support updating version information.
2022-09-05 14:35:48 -07:00
Nick Blakely
79e5e42527 Support updating version information. 2022-09-05 14:33:14 -07:00
Nick Blakely
24e547fde2 Add event source logging. 2022-09-05 13:04:34 -07:00
36 changed files with 1480 additions and 1907 deletions

1
.gitignore vendored
View File

@ -13,6 +13,7 @@ vcpkg_installed
*.userosscache *.userosscache
*.sln.docstates *.sln.docstates
appsettings.Development.json appsettings.Development.json
appsettings.Production.json
profile.arm.json profile.arm.json
# User-specific files (MonoDevelop/Xamarin Studio) # User-specific files (MonoDevelop/Xamarin Studio)

View File

@ -6,8 +6,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.4" /> <PackageReference Include="NLog" Version="5.0.4" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -4,15 +4,15 @@
"net6.0": { "net6.0": {
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Direct", "type": "Direct",
"requested": "[12.0.3, )", "requested": "[13.0.1, )",
"resolved": "12.0.3", "resolved": "13.0.1",
"contentHash": "6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==" "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}, },
"NLog": { "NLog": {
"type": "Direct", "type": "Direct",
"requested": "[4.7.4, )", "requested": "[5.0.4, )",
"resolved": "4.7.4", "resolved": "5.0.4",
"contentHash": "gSGX/ur0P3jp17H37HW7ycXR6L1578tQbilf4HLX1t2viCDFgtwEsfHMPf0/jcuf7/qqGgoU/vKgyQ9hzxuOEQ==" "contentHash": "hMyC7jq1m7c339DZXTRz96b+0YsIYSwAUB8sAWMtqXd2uwJjYe+y1k74fbItODPqDuE/krd6A4mxew9gLMS+PQ=="
} }
} }
} }

View File

@ -35,5 +35,15 @@
{ {
return new Version(this.Major, this.Minor, this.Build, this.Revision); return new Version(this.Major, this.Minor, this.Build, this.Revision);
} }
public static bool operator<(AppVersion a, AppVersion b)
{
return a.ToVersion() < b.ToVersion();
}
public static bool operator>(AppVersion a, AppVersion b)
{
return a.ToVersion() > b.ToVersion();
}
} }
} }

View File

@ -0,0 +1,6 @@
using Giants.DataContract.V1;
namespace Giants.DataContract.Contracts.V1
{
public record VersionInfoUpdate(string AppName, AppVersion AppVersion, string FileName);
}

View File

@ -7,10 +7,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" /> <PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" /> <PackageReference Include="MSTest.TestFramework" Version="2.2.10" />
<PackageReference Include="coverlet.collector" Version="1.2.0" /> <PackageReference Include="coverlet.collector" Version="3.1.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -4,40 +4,40 @@
"net6.0": { "net6.0": {
"coverlet.collector": { "coverlet.collector": {
"type": "Direct", "type": "Direct",
"requested": "[1.2.0, )", "requested": "[3.1.2, )",
"resolved": "1.2.0", "resolved": "3.1.2",
"contentHash": "ZB+EGXsVBIn8cew7D3S2c+rgIlokKv1dSwsXEoiFQaNXF/BSxp9Rlfz/jV1ehSWH5XpLitfRxFNW3ok7uPDOXA==" "contentHash": "wuLDIDKD5XMt0A7lE31JPenT7QQwZPFkP5rRpdJeblyXZ9MGLI8rYjvm5fvAKln+2/X+4IxxQDxBtwdrqKNLZw=="
}, },
"Microsoft.NET.Test.Sdk": { "Microsoft.NET.Test.Sdk": {
"type": "Direct", "type": "Direct",
"requested": "[16.5.0, )", "requested": "[17.3.1, )",
"resolved": "16.5.0", "resolved": "17.3.1",
"contentHash": "yHZOhVSPuGqgHi+KhHiAZqNY08avkQraXKvgKgDU8c/ztmGzw7gmukkv49EaTq6T3xmp4XroWk3gAlbJHMxl8w==", "contentHash": "jH9W5uYannaJ3HhrPBkzSidf3WkqP6XI+Yke0ODYVuFWM6GLVtBAyNgXvU/uQXPBsHq4aysLTsrN1FvG2hlKoQ==",
"dependencies": { "dependencies": {
"Microsoft.CodeCoverage": "16.5.0", "Microsoft.CodeCoverage": "17.3.1",
"Microsoft.TestPlatform.TestHost": "16.5.0" "Microsoft.TestPlatform.TestHost": "17.3.1"
} }
}, },
"MSTest.TestAdapter": { "MSTest.TestAdapter": {
"type": "Direct", "type": "Direct",
"requested": "[2.1.0, )", "requested": "[2.2.10, )",
"resolved": "2.1.0", "resolved": "2.2.10",
"contentHash": "roxWjDyH5S+XlibaHM96VswxYq4vfbB53Ys9k3Qr2F1uNH+VpgIbygNQvtZUxSoAaI7aNSMMKA/HBfZPg5QDCA==", "contentHash": "KOc7XVNM0Q5GrTAx4RhxTgwdt9O5gOqSzmLpUMyl9ywa6vvUNFVQ9nCjtEE7qDQW54MZdc82e287PzZDc7yQtA==",
"dependencies": { "dependencies": {
"NETStandard.Library": "1.6.1", "Newtonsoft.Json": "10.0.3",
"System.Diagnostics.TextWriterTraceListener": "4.3.0" "System.Diagnostics.TextWriterTraceListener": "4.3.0"
} }
}, },
"MSTest.TestFramework": { "MSTest.TestFramework": {
"type": "Direct", "type": "Direct",
"requested": "[2.1.0, )", "requested": "[2.2.10, )",
"resolved": "2.1.0", "resolved": "2.2.10",
"contentHash": "FcW3sokxmi52e4gzBdv4bv59yQWJ0Lg2F579U82O4V9Pr7aNwTe7HxlHChzQqvcqgnH69XH8aDfMlfM3Y1wjAg==" "contentHash": "JZRVXKq19uRhkj8MuzsU8zJhPV2JV3ZToFPAIg+BU53L1L9mNDfm9jXerdRfbrE4HBcf2M54Ij80zPOdlha3+Q=="
}, },
"Microsoft.CodeCoverage": { "Microsoft.CodeCoverage": {
"type": "Transitive", "type": "Transitive",
"resolved": "16.5.0", "resolved": "17.3.1",
"contentHash": "PM5YLtyN45EyUGePJpaNogndlaQPrMgQQXHKMhMESC6KfSVvt+j7+dxBi8NYC6X6dZVysf7ngwhSW3wwvPJRSQ==" "contentHash": "WqB7Ik4v8ku0Y9HZShqTStZdq8R1lyhsZr7IMp8zV/OcL5sHVYvlMnardQR+SDQc3dmbniCIl9mYxYM+V7x8MA=="
}, },
"Microsoft.CSharp": { "Microsoft.CSharp": {
"type": "Transitive", "type": "Transitive",
@ -56,111 +56,36 @@
}, },
"Microsoft.TestPlatform.ObjectModel": { "Microsoft.TestPlatform.ObjectModel": {
"type": "Transitive", "type": "Transitive",
"resolved": "16.5.0", "resolved": "17.3.1",
"contentHash": "NnLFxmFBCAS6kye2JFszD5WKgj4Zve5KX/R0mhYwh6BVnSeybI2unRnjEPtLyY3CAVhwrY4bh/8LNFtslAcGZg==", "contentHash": "n1WSFCMiFt6KmD5JzV+Wye5Ntomez3YP2+d15bu5PS5Z1U0g+V7VBLdJIaJRnahz5BsXJDTnLYNVOUdntwjx6Q==",
"dependencies": { "dependencies": {
"NuGet.Frameworks": "5.0.0" "NuGet.Frameworks": "5.11.0",
"System.Reflection.Metadata": "1.6.0"
} }
}, },
"Microsoft.TestPlatform.TestHost": { "Microsoft.TestPlatform.TestHost": {
"type": "Transitive", "type": "Transitive",
"resolved": "16.5.0", "resolved": "17.3.1",
"contentHash": "ytGymboQIvjNX5pLC0yp/Bz9sGDHqSnLQgBRtd4VrqOUgKmmcfxMYZ6p0TBZgAT1oijdC6xqUZ7rl8mbaaXTJw==", "contentHash": "co/GMz6rGxpzn2aJYTDDim61HvEk+SHBVtbXnu2RSrz20HxkaraEh0kltCsMkmLAX/6Hz5sa6NquLngBlURTow==",
"dependencies": { "dependencies": {
"Microsoft.TestPlatform.ObjectModel": "16.5.0", "Microsoft.TestPlatform.ObjectModel": "17.3.1",
"Newtonsoft.Json": "9.0.1" "Newtonsoft.Json": "9.0.1"
} }
}, },
"Microsoft.Win32.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"NETStandard.Library": {
"type": "Transitive",
"resolved": "1.6.1",
"contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.Win32.Primitives": "4.3.0",
"System.AppContext": "4.3.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Console": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tools": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Calendars": "4.3.0",
"System.IO": "4.3.0",
"System.IO.Compression": "4.3.0",
"System.IO.Compression.ZipFile": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Linq": "4.3.0",
"System.Linq.Expressions": "4.3.0",
"System.Net.Http": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Net.Sockets": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Security.Cryptography.X509Certificates": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Timer": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0",
"System.Xml.XDocument": "4.3.0"
}
},
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "12.0.3", "resolved": "13.0.1",
"contentHash": "6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==" "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}, },
"NLog": { "NLog": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.4", "resolved": "5.0.4",
"contentHash": "gSGX/ur0P3jp17H37HW7ycXR6L1578tQbilf4HLX1t2viCDFgtwEsfHMPf0/jcuf7/qqGgoU/vKgyQ9hzxuOEQ==" "contentHash": "hMyC7jq1m7c339DZXTRz96b+0YsIYSwAUB8sAWMtqXd2uwJjYe+y1k74fbItODPqDuE/krd6A4mxew9gLMS+PQ=="
}, },
"NuGet.Frameworks": { "NuGet.Frameworks": {
"type": "Transitive", "type": "Transitive",
"resolved": "5.0.0", "resolved": "5.11.0",
"contentHash": "c5JVjuVAm4f7E9Vj+v09Z9s2ZsqFDjBpcsyS3M9xRo0bEdm/LVZSzLxxNvfvAwRiiE8nwe1h2G4OwiwlzFKXlA==" "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q=="
},
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q=="
},
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA=="
},
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw=="
}, },
"runtime.native.System": { "runtime.native.System": {
"type": "Transitive", "type": "Transitive",
@ -171,109 +96,6 @@
"Microsoft.NETCore.Targets": "1.1.0" "Microsoft.NETCore.Targets": "1.1.0"
} }
}, },
"runtime.native.System.IO.Compression": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.Net.Http": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0"
}
},
"runtime.native.System.Security.Cryptography.Apple": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
"dependencies": {
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
}
},
"runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
"dependencies": {
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A=="
},
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ=="
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ=="
},
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g=="
},
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg=="
},
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ=="
},
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A=="
},
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg=="
},
"System.AppContext": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Buffers": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Collections": { "System.Collections": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -284,23 +106,6 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Collections.Concurrent": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.CommandLine": { "System.CommandLine": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.0-beta1.20427.1", "resolved": "2.0.0-beta1.20427.1",
@ -327,18 +132,6 @@
"System.CommandLine": "2.0.0-beta1.20427.1" "System.CommandLine": "2.0.0-beta1.20427.1"
} }
}, },
"System.Console": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Diagnostics.Debug": { "System.Diagnostics.Debug": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -349,18 +142,6 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Diagnostics.DiagnosticSource": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Diagnostics.TextWriterTraceListener": { "System.Diagnostics.TextWriterTraceListener": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -374,16 +155,6 @@
"System.Threading": "4.3.0" "System.Threading": "4.3.0"
} }
}, },
"System.Diagnostics.Tools": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Diagnostics.TraceSource": { "System.Diagnostics.TraceSource": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -400,16 +171,6 @@
"runtime.native.System": "4.3.0" "runtime.native.System": "4.3.0"
} }
}, },
"System.Diagnostics.Tracing": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization": { "System.Globalization": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -420,30 +181,6 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Globalization.Calendars": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Globalization": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Globalization.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0"
}
},
"System.IO": { "System.IO": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -456,177 +193,11 @@
"System.Threading.Tasks": "4.3.0" "System.Threading.Tasks": "4.3.0"
} }
}, },
"System.IO.Compression": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Buffers": "4.3.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.IO.Compression": "4.3.0"
}
},
"System.IO.Compression.ZipFile": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
"dependencies": {
"System.Buffers": "4.3.0",
"System.IO": "4.3.0",
"System.IO.Compression": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.IO.FileSystem": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.IO.FileSystem.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Linq": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
}
},
"System.Linq.Expressions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Linq": "4.3.0",
"System.ObjectModel": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Emit.Lightweight": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Reflection.TypeExtensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Memory": { "System.Memory": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.5.4", "resolved": "4.5.4",
"contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==" "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
}, },
"System.Net.Http": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.DiagnosticSource": "4.3.0",
"System.Diagnostics.Tracing": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Extensions": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.OpenSsl": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Security.Cryptography.X509Certificates": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.Net.Http": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Net.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Net.Sockets": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.IO": "4.3.0",
"System.Net.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.ObjectModel": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Reflection": { "System.Reflection": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -639,49 +210,10 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Reflection.Emit": { "System.Reflection.Metadata": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "1.6.0",
"contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==", "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit.ILGeneration": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Emit.Lightweight": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Reflection.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
}, },
"System.Reflection.Primitives": { "System.Reflection.Primitives": {
"type": "Transitive", "type": "Transitive",
@ -693,15 +225,6 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Reflection.TypeExtensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Runtime": "4.3.0"
}
},
"System.Resources.ResourceManager": { "System.Resources.ResourceManager": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -733,198 +256,6 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Runtime.Handles": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Runtime.InteropServices": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Reflection": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Handles": "4.3.0"
}
},
"System.Runtime.InteropServices.RuntimeInformation": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
"dependencies": {
"System.Reflection": "4.3.0",
"System.Reflection.Extensions": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Threading": "4.3.0",
"runtime.native.System": "4.3.0"
}
},
"System.Runtime.Numerics": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
"dependencies": {
"System.Globalization": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0"
}
},
"System.Security.Cryptography.Algorithms": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.Apple": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Cng": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Security.Cryptography.Csp": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0"
}
},
"System.Security.Cryptography.Encoding": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.Collections.Concurrent": "4.3.0",
"System.Linq": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.OpenSsl": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
"dependencies": {
"System.Collections": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Security.Cryptography.Primitives": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
"dependencies": {
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Security.Cryptography.X509Certificates": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.Globalization.Calendars": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.Handles": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Runtime.Numerics": "4.3.0",
"System.Security.Cryptography.Algorithms": "4.3.0",
"System.Security.Cryptography.Cng": "4.3.0",
"System.Security.Cryptography.Csp": "4.3.0",
"System.Security.Cryptography.Encoding": "4.3.0",
"System.Security.Cryptography.OpenSsl": "4.3.0",
"System.Security.Cryptography.Primitives": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"runtime.native.System": "4.3.0",
"runtime.native.System.Net.Http": "4.3.0",
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
}
},
"System.Text.Encoding": { "System.Text.Encoding": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -935,25 +266,6 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Text.Encoding.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0",
"System.Text.Encoding": "4.3.0"
}
},
"System.Text.RegularExpressions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
"dependencies": {
"System.Runtime": "4.3.0"
}
},
"System.Threading": { "System.Threading": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -973,72 +285,11 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Runtime": "4.3.0",
"System.Threading.Tasks": "4.3.0"
}
},
"System.Threading.Timer": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0",
"Microsoft.NETCore.Targets": "1.1.0",
"System.Runtime": "4.3.0"
}
},
"System.Xml.ReaderWriter": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.IO.FileSystem": "4.3.0",
"System.IO.FileSystem.Primitives": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Runtime.InteropServices": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Text.Encoding.Extensions": "4.3.0",
"System.Text.RegularExpressions": "4.3.0",
"System.Threading.Tasks": "4.3.0",
"System.Threading.Tasks.Extensions": "4.3.0"
}
},
"System.Xml.XDocument": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
"dependencies": {
"System.Collections": "4.3.0",
"System.Diagnostics.Debug": "4.3.0",
"System.Diagnostics.Tools": "4.3.0",
"System.Globalization": "4.3.0",
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Resources.ResourceManager": "4.3.0",
"System.Runtime": "4.3.0",
"System.Runtime.Extensions": "4.3.0",
"System.Text.Encoding": "4.3.0",
"System.Threading": "4.3.0",
"System.Xml.ReaderWriter": "4.3.0"
}
},
"fxbc": { "fxbc": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"Giants.BinTools": "[1.0.0, )", "Giants.BinTools": "[1.0.0, )",
"Newtonsoft.Json": "[12.0.3, )", "Newtonsoft.Json": "[13.0.1, )",
"System.CommandLine": "[2.0.0-beta1.20427.1, )", "System.CommandLine": "[2.0.0-beta1.20427.1, )",
"System.CommandLine.DragonFruit": "[0.3.0-alpha.20427.1, )" "System.CommandLine.DragonFruit": "[0.3.0-alpha.20427.1, )"
} }
@ -1046,8 +297,8 @@
"giants.bintools": { "giants.bintools": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"NLog": "[4.7.4, )", "NLog": "[5.0.4, )",
"Newtonsoft.Json": "[12.0.3, )" "Newtonsoft.Json": "[13.0.1, )"
} }
} }
} }

View File

@ -19,7 +19,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20427.1" /> <PackageReference Include="System.CommandLine" Version="2.0.0-beta1.20427.1" />
<PackageReference Include="System.CommandLine.DragonFruit" Version="0.3.0-alpha.20427.1" /> <PackageReference Include="System.CommandLine.DragonFruit" Version="0.3.0-alpha.20427.1" />
</ItemGroup> </ItemGroup>

View File

@ -4,9 +4,9 @@
"net6.0": { "net6.0": {
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Direct", "type": "Direct",
"requested": "[12.0.3, )", "requested": "[13.0.1, )",
"resolved": "12.0.3", "resolved": "13.0.1",
"contentHash": "6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==" "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}, },
"System.CommandLine": { "System.CommandLine": {
"type": "Direct", "type": "Direct",
@ -35,8 +35,8 @@
}, },
"NLog": { "NLog": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.4", "resolved": "5.0.4",
"contentHash": "gSGX/ur0P3jp17H37HW7ycXR6L1578tQbilf4HLX1t2viCDFgtwEsfHMPf0/jcuf7/qqGgoU/vKgyQ9hzxuOEQ==" "contentHash": "hMyC7jq1m7c339DZXTRz96b+0YsIYSwAUB8sAWMtqXd2uwJjYe+y1k74fbItODPqDuE/krd6A4mxew9gLMS+PQ=="
}, },
"System.CommandLine.Rendering": { "System.CommandLine.Rendering": {
"type": "Transitive", "type": "Transitive",
@ -54,8 +54,8 @@
"giants.bintools": { "giants.bintools": {
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"NLog": "[4.7.4, )", "NLog": "[5.0.4, )",
"Newtonsoft.Json": "[12.0.3, )" "Newtonsoft.Json": "[13.0.1, )"
} }
} }
} }

View File

@ -39,13 +39,22 @@
if (this.userConfig.ContainsKey(section)) if (this.userConfig.ContainsKey(section))
{ {
dynamic sectionObject = this.userConfig[section]; dynamic sectionObject = this.userConfig[section];
if (sectionObject != null) if (sectionObject != null && sectionObject.ContainsKey(key))
{ {
return sectionObject.ContainsKey(key) ? (string)sectionObject[key] : ""; return (string)sectionObject[key];
} }
} }
return this.defaultConfig[section][key]; if (this.defaultConfig.ContainsKey(section))
{
dynamic sectionObject = this.defaultConfig[section];
if (sectionObject != null && sectionObject.ContainsKey(key))
{
return (string)sectionObject[key];
}
}
return string.Empty;
} }
// TODO: other accessors unimplemented as we only need master server host name for now // TODO: other accessors unimplemented as we only need master server host name for now

View File

@ -3,8 +3,6 @@
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{612FD606-F072-4A04-9054-65BC592E9D3E}</ProjectGuid> <ProjectGuid>{612FD606-F072-4A04-9054-65BC592E9D3E}</ProjectGuid>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
@ -13,27 +11,8 @@
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<ApplicationIcon>Resources\giants.ico</ApplicationIcon> <ApplicationIcon>Resources\giants.ico</ApplicationIcon>
<IsWebBootstrapper>false</IsWebBootstrapper> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<FileUpgradeFlags> <Deterministic>true</Deterministic>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
@ -79,20 +58,15 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core"> <Reference Include="System.Core" />
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
<Reference Include="System.Xml.Linq"> <Reference Include="System.Xml.Linq" />
<RequiredTargetFramework>3.5</RequiredTargetFramework> <Reference Include="System.Data.DataSetExtensions" />
</Reference> <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Deployment" /> <Reference Include="System.Deployment" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
@ -157,6 +131,10 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="packages.lock.json" />
<None Include="GiantsDefault.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Resources\LauncherStart.wav" /> <None Include="Resources\LauncherStart.wav" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@ -193,38 +171,6 @@
<ItemGroup> <ItemGroup>
<Content Include="Resources\giants.ico" /> <Content Include="Resources\giants.ico" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
<Visible>False</Visible>
<ProductName>Windows Installer 3.1</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Giants.WebApi.Clients\Giants.WebApi.Clients.csproj"> <ProjectReference Include="..\Giants.WebApi.Clients\Giants.WebApi.Clients.csproj">
<Project>{d4c21170-82d4-4d1f-81ec-036835ac1238}</Project> <Project>{d4c21170-82d4-4d1f-81ec-036835ac1238}</Project>
@ -233,7 +179,9 @@
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="PostBuild" AfterTargets="Build"> <Target Name="PostBuild" AfterTargets="Build">
<Copy Condition="$(CopyToImageOutputPath) == 'true'" SourceFiles="$(TargetPath)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" /> <Copy Condition="$(GameImagePath) != ''" SourceFiles="$(TargetPath)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" />
<Copy Condition="$(GameImagePath) != ''" SourceFiles="@(ReferenceCopyLocalPaths)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" />
<Copy Condition="$(GameImagePath) != ''" SourceFiles="@(_SourceItemsToCopyToOutputDirectory)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" />
<CallTarget Condition="$(GIANTS_PATH) != ''" Targets="CopyTargetToGameFolder" /> <CallTarget Condition="$(GIANTS_PATH) != ''" Targets="CopyTargetToGameFolder" />
</Target> </Target>
</Project> </Project>

View File

@ -0,0 +1,5 @@
{
"network": {
"masterServerHostName": "https://giants.azurewebsites.net/"
}
}

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.1" targetFramework="net472" />
</packages> </packages>

View File

@ -0,0 +1,13 @@
{
"version": 1,
"dependencies": {
".NETFramework,Version=v4.7.2": {
"Newtonsoft.Json": {
"type": "Direct",
"requested": "[13.0.1, 13.0.1]",
"resolved": "13.0.1",
"contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}
}
}
}

View File

@ -17,8 +17,8 @@
services.AddSingleton<IServerRegistryStore, CosmosDbServerRegistryStore>(); services.AddSingleton<IServerRegistryStore, CosmosDbServerRegistryStore>();
services.AddSingleton<IDateTimeProvider, DefaultDateTimeProvider>(); services.AddSingleton<IDateTimeProvider, DefaultDateTimeProvider>();
services.AddSingleton<IMemoryCache, MemoryCache>(); services.AddSingleton<IMemoryCache, MemoryCache>();
services.AddSingleton<IUpdaterStore, CosmosDbUpdaterStore>(); services.AddSingleton<IVersioningStore, CosmosDbVersioningStore>();
services.AddSingleton<IUpdaterService, UpdaterService>(); services.AddSingleton<IVersioningService, VersioningService>();
services.AddSingleton<ICommunityService, CommunityService>(); services.AddSingleton<ICommunityService, CommunityService>();
services.AddSingleton<ICrashReportService, CrashReportService>(); services.AddSingleton<ICrashReportService, CrashReportService>();

View File

@ -5,17 +5,17 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="10.0.0" /> <PackageReference Include="AutoMapper" Version="11.0.1" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.5.1" /> <PackageReference Include="Azure.Storage.Blobs" Version="12.13.1" />
<PackageReference Include="Microsoft.Azure.Cosmos" Version="3.12.0" /> <PackageReference Include="Microsoft.Azure.Cosmos" Version="3.30.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="3.1.7" /> <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
<PackageReference Include="System.Runtime.Caching" Version="4.7.0" /> <PackageReference Include="System.Runtime.Caching" Version="6.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -1,9 +0,0 @@
namespace Giants.Services
{
using System.Threading.Tasks;
public interface IUpdaterService
{
Task<VersionInfo> GetVersionInfo(string gameName);
}
}

View File

@ -0,0 +1,12 @@
namespace Giants.Services
{
using Giants.DataContract.V1;
using System.Threading.Tasks;
public interface IVersioningService
{
Task<VersionInfo> GetVersionInfo(string appName);
Task UpdateVersionInfo(string appName, AppVersion appVersion, string fileName);
}
}

View File

@ -6,11 +6,11 @@
public class InitializerService : IHostedService public class InitializerService : IHostedService
{ {
private readonly IUpdaterStore updaterStore; private readonly IVersioningStore updaterStore;
private readonly IServerRegistryStore serverRegistryStore; private readonly IServerRegistryStore serverRegistryStore;
public InitializerService( public InitializerService(
IUpdaterStore updaterStore, IVersioningStore updaterStore,
IServerRegistryStore serverRegistryStore) IServerRegistryStore serverRegistryStore)
{ {
// TODO: Pick these up from reflection and auto initialize // TODO: Pick these up from reflection and auto initialize

View File

@ -1,21 +0,0 @@
using System.Threading.Tasks;
namespace Giants.Services
{
public class UpdaterService : IUpdaterService
{
private readonly IUpdaterStore updaterStore;
public UpdaterService(IUpdaterStore updaterStore)
{
this.updaterStore = updaterStore;
}
public async Task<VersionInfo> GetVersionInfo(string appName)
{
ArgumentUtility.CheckStringForNullOrEmpty(appName, nameof(appName));
return await this.updaterStore.GetVersionInfo(appName);
}
}
}

View File

@ -0,0 +1,71 @@
using Giants.DataContract.V1;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Giants.Services
{
public class VersioningService : IVersioningService
{
private readonly IVersioningStore versioningStore;
private readonly IConfiguration configuration;
private readonly ILogger<VersioningService> logger;
private const string InstallerContainerName = "public";
public VersioningService(
IVersioningStore updaterStore,
IConfiguration configuration,
ILogger<VersioningService> logger)
{
this.versioningStore = updaterStore;
this.configuration = configuration;
this.logger = logger;
}
public Task<VersionInfo> GetVersionInfo(string appName)
{
ArgumentUtility.CheckStringForNullOrEmpty(appName);
return this.versioningStore.GetVersionInfo(appName);
}
public async Task UpdateVersionInfo(string appName, AppVersion appVersion, string fileName)
{
ArgumentUtility.CheckStringForNullOrEmpty(appName);
ArgumentUtility.CheckForNull(appVersion);
ArgumentUtility.CheckStringForNullOrEmpty(fileName);
Uri storageAccountUri = new Uri(this.configuration["StorageAccountUri"]);
VersionInfo versionInfo = await this.GetVersionInfo(appName);
if (versionInfo == null)
{
throw new ArgumentException($"No version information for {appName} found.", nameof(appName));
}
if (appVersion < versionInfo.Version)
{
throw new ArgumentException($"Version {appVersion.SerializeToJson()} is less than current version {versionInfo.Version.SerializeToJson()}", nameof(appVersion));
}
if (fileName.Contains('/') || fileName.Contains('\\'))
{
throw new ArgumentException("File name must be relative to configured storage account.", nameof(fileName));
}
var installerUri = new Uri(storageAccountUri, $"{InstallerContainerName}/{fileName}");
var newVersionInfo = new VersionInfo()
{
AppName = appName,
Version = appVersion,
InstallerUri = installerUri,
};
this.logger.LogInformation("Updating version info for {appName}: {versionInfo}", appName, newVersionInfo.SerializeToJson());
await this.versioningStore.UpdateVersionInfo(newVersionInfo);
}
}
}

View File

@ -6,14 +6,14 @@
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
public class CosmosDbUpdaterStore : IUpdaterStore public class CosmosDbVersioningStore : IVersioningStore
{ {
private readonly ILogger<CosmosDbServerRegistryStore> logger; private readonly ILogger<CosmosDbServerRegistryStore> logger;
private readonly IMemoryCache memoryCache; private readonly IMemoryCache memoryCache;
private readonly IConfiguration configuration; private readonly IConfiguration configuration;
private CosmosDbClient client; private CosmosDbClient client;
public CosmosDbUpdaterStore( public CosmosDbVersioningStore(
ILogger<CosmosDbServerRegistryStore> logger, ILogger<CosmosDbServerRegistryStore> logger,
IMemoryCache memoryCache, IMemoryCache memoryCache,
IConfiguration configuration) IConfiguration configuration)
@ -39,6 +39,11 @@
return versionInfo; return versionInfo;
} }
public async Task UpdateVersionInfo(VersionInfo versionInfo)
{
await this.client.UpsertItem(versionInfo);
}
public async Task Initialize() public async Task Initialize()
{ {
this.client = new CosmosDbClient( this.client = new CosmosDbClient(

View File

@ -3,13 +3,18 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
public class FileUpdaterStore : IUpdaterStore public class FileVersioningStore : IVersioningStore
{ {
public Task<VersionInfo> GetVersionInfo(string appName) public Task<VersionInfo> GetVersionInfo(string appName)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task UpdateVersionInfo(VersionInfo versionInfo)
{
throw new NotImplementedException();
}
public Task Initialize() public Task Initialize()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

View File

@ -2,10 +2,12 @@
{ {
using System.Threading.Tasks; using System.Threading.Tasks;
public interface IUpdaterStore public interface IVersioningStore
{ {
Task<VersionInfo> GetVersionInfo(string appName); Task<VersionInfo> GetVersionInfo(string appName);
Task UpdateVersionInfo(VersionInfo versionInfo);
Task Initialize(); Task Initialize();
} }
} }

View File

@ -1,10 +1,5 @@
namespace Giants.Services namespace Giants.Services
{ {
// Decompiled with JetBrains decompiler
// Type: Microsoft.VisualStudio.Services.Common.ArgumentUtility
// Assembly: Microsoft.VisualStudio.Services.Common, Version=16.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// MVID: 8C174B92-2E1F-4F71-9E6B-FC8D9F2C517A
using System; using System;
using System.Collections; using System.Collections;
using System.ComponentModel; using System.ComponentModel;
@ -14,7 +9,7 @@
public static class ArgumentUtility public static class ArgumentUtility
{ {
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForNull(object var, string varName) public static void CheckForNull(object var, [CallerArgumentExpression("var")] string varName = null)
{ {
if (var == null) if (var == null)
throw new ArgumentNullException(varName); throw new ArgumentNullException(varName);
@ -23,18 +18,18 @@
public static void CheckStringForNullOrEmpty( public static void CheckStringForNullOrEmpty(
string stringVar, string stringVar,
string stringVarName) [CallerArgumentExpression("stringVar")] string stringVarName = null)
{ {
ArgumentUtility.CheckStringForNullOrEmpty(stringVar, stringVarName, false); ArgumentUtility.CheckStringForNullOrEmpty(stringVar, false, stringVarName);
} }
public static void CheckForNonnegativeInt(int var, string varName) public static void CheckForNonnegativeInt(int var, [CallerArgumentExpression("var")] string varName = null)
{ {
if (var < 0) if (var < 0)
throw new ArgumentOutOfRangeException(varName); throw new ArgumentOutOfRangeException(varName);
} }
public static void CheckForNonPositiveInt(int var, string varName) public static void CheckForNonPositiveInt(int var, [CallerArgumentExpression("var")] string varName = null)
{ {
if (var <= 0) if (var <= 0)
throw new ArgumentOutOfRangeException(varName); throw new ArgumentOutOfRangeException(varName);
@ -42,8 +37,8 @@
public static void CheckStringForNullOrEmpty( public static void CheckStringForNullOrEmpty(
string stringVar, string stringVar,
string stringVarName, bool trim,
bool trim) [CallerArgumentExpression("stringVar")] string stringVarName = null)
{ {
ArgumentUtility.CheckForNull((object)stringVar, stringVarName); ArgumentUtility.CheckForNull((object)stringVar, stringVarName);
if (trim) if (trim)
@ -54,9 +49,9 @@
public static void CheckStringLength( public static void CheckStringLength(
string stringVar, string stringVar,
string stringVarName,
int maxLength, int maxLength,
int minLength = 0) int minLength = 0,
[CallerArgumentExpression("stringVar")] string stringVarName = null)
{ {
ArgumentUtility.CheckForNull((object)stringVar, stringVarName); ArgumentUtility.CheckForNull((object)stringVar, stringVarName);
if (stringVar.Length < minLength || stringVar.Length > maxLength) if (stringVar.Length < minLength || stringVar.Length > maxLength)
@ -65,7 +60,7 @@
public static void CheckEnumerableForNullOrEmpty( public static void CheckEnumerableForNullOrEmpty(
IEnumerable enumerable, IEnumerable enumerable,
string enumerableName) [CallerArgumentExpression("enumerable")] string enumerableName = null)
{ {
ArgumentUtility.CheckForNull((object)enumerable, enumerableName); ArgumentUtility.CheckForNull((object)enumerable, enumerableName);
if (!enumerable.GetEnumerator().MoveNext()) if (!enumerable.GetEnumerator().MoveNext())
@ -74,7 +69,7 @@
public static void CheckEnumerableForNullElement( public static void CheckEnumerableForNullElement(
IEnumerable enumerable, IEnumerable enumerable,
string enumerableName) [CallerArgumentExpression("enumerable")] string enumerableName = null)
{ {
ArgumentUtility.CheckForNull((object)enumerable, enumerableName); ArgumentUtility.CheckForNull((object)enumerable, enumerableName);
foreach (object obj in enumerable) foreach (object obj in enumerable)
@ -84,7 +79,7 @@
} }
} }
public static void CheckForEmptyGuid(Guid guid, string varName) public static void CheckForEmptyGuid(Guid guid, [CallerArgumentExpression("guid")] string varName = null)
{ {
if (guid.Equals(Guid.Empty)) if (guid.Equals(Guid.Empty))
throw new ArgumentException("EmptyGuidNotAllowed", varName); throw new ArgumentException("EmptyGuidNotAllowed", varName);
@ -94,7 +89,7 @@
int value, int value,
int minValue, int minValue,
int maxValue, int maxValue,
string varName) [CallerArgumentExpression("value")] string varName = null)
{ {
if (value < minValue || value > maxValue) if (value < minValue || value > maxValue)
throw new ArgumentOutOfRangeException(varName, "ValueOutOfRange"); throw new ArgumentOutOfRangeException(varName, "ValueOutOfRange");
@ -103,8 +98,8 @@
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForOutOfRange<T>( public static void CheckForOutOfRange<T>(
T var, T var,
string varName, T minimum,
T minimum) [CallerArgumentExpression("var")] string varName = null)
where T : IComparable<T> where T : IComparable<T>
{ {
ArgumentUtility.CheckForNull((object)var, varName); ArgumentUtility.CheckForNull((object)var, varName);
@ -115,9 +110,9 @@
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForOutOfRange( public static void CheckForOutOfRange(
int var, int var,
string varName,
int minimum, int minimum,
int maximum) int maximum,
[CallerArgumentExpression("var")] string varName = null)
{ {
if (var < minimum || var > maximum) if (var < minimum || var > maximum)
throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange"); throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange");
@ -126,9 +121,9 @@
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void CheckForOutOfRange( public static void CheckForOutOfRange(
long var, long var,
string varName,
long minimum, long minimum,
long maximum) long maximum,
[CallerArgumentExpression("var")] string varName = null)
{ {
if (var < minimum || var > maximum) if (var < minimum || var > maximum)
throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange"); throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange");
@ -136,18 +131,12 @@
public static void CheckForDateTimeRange( public static void CheckForDateTimeRange(
DateTime var, DateTime var,
string varName,
DateTime minimum, DateTime minimum,
DateTime maximum) DateTime maximum,
[CallerArgumentExpression("var")] string varName = null)
{ {
if (var < minimum || var > maximum) if (var < minimum || var > maximum)
throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange"); throw new ArgumentOutOfRangeException(varName, (object)var, "OutOfRange");
} }
public static void EnsureIsNull(object var, string varName)
{
if (var != null)
throw new ArgumentException("NullValueNecessary");
}
} }
} }

View File

@ -0,0 +1,12 @@
using System.Text.Json;
namespace Giants.Services
{
public static class ObjectExtensions
{
public static string SerializeToJson(this object obj)
{
return JsonSerializer.Serialize(obj);
}
}
}

View File

@ -4,144 +4,155 @@
"net6.0": { "net6.0": {
"AutoMapper": { "AutoMapper": {
"type": "Direct", "type": "Direct",
"requested": "[10.0.0, )", "requested": "[11.0.1, )",
"resolved": "10.0.0", "resolved": "11.0.1",
"contentHash": "T09NoqMZBqw0/JEauXulxnmmerl0Zj03e0r6VCcJ0LURWBIaYxZPPoiDv8bHf5Y4x2xcXJp4JPXoCaeOMJfHEA==", "contentHash": "WIadGC1pIwbnyTubvI577p3F++Bsj9q2Q3OaAc1I0QS+JhupN1xkdrPBhI9bPIeg63zM81tZplUNYkqU1HE5jQ==",
"dependencies": { "dependencies": {
"Microsoft.CSharp": "4.7.0", "Microsoft.CSharp": "4.7.0"
"System.Reflection.Emit": "4.7.0"
} }
}, },
"Azure.Storage.Blobs": { "Azure.Storage.Blobs": {
"type": "Direct", "type": "Direct",
"requested": "[12.5.1, )", "requested": "[12.13.1, )",
"resolved": "12.5.1", "resolved": "12.13.1",
"contentHash": "q2OtsHdFxm95fQeQNY+Jag3FLi9HL7MiNr4MBupBEjMqhkniIUtiH8XgxAMVWEj+KBDNqI1Tu/zJrl09/+MohQ==", "contentHash": "bEJUFBS9wTk/ZJmJBsm/GktZenl2GVkxLHNC7SkeCd0cfKC1MP11EXV7e0NDySsFDEEjjGACb8Fau6lPTmXdsg==",
"dependencies": { "dependencies": {
"Azure.Core": "1.4.1", "Azure.Storage.Common": "12.12.0",
"Azure.Storage.Common": "12.5.1", "System.Text.Json": "4.7.2"
"System.Text.Json": "4.6.0"
} }
}, },
"Microsoft.Azure.Cosmos": { "Microsoft.Azure.Cosmos": {
"type": "Direct", "type": "Direct",
"requested": "[3.12.0, )", "requested": "[3.30.1, )",
"resolved": "3.12.0", "resolved": "3.30.1",
"contentHash": "28uyt7aXVoEqIFEFpxmRpF/AesXXrCA03TPZStM4lZ8D1Y+I91xX5aB9891y3s5J8pGV5HN+j//P/iGQAGJKdA==", "contentHash": "8q0qZiji27JMZ8zDbW7ZUPomNnUhRHJr17aZpXhuZYxMGQicRpxPgC6xUduh8c76kkyPrK4LpQ64khUXgjvOAA==",
"dependencies": { "dependencies": {
"Azure.Core": "1.19.0",
"Microsoft.Bcl.AsyncInterfaces": "1.0.0",
"Microsoft.Bcl.HashCode": "1.1.0",
"Newtonsoft.Json": "10.0.2", "Newtonsoft.Json": "10.0.2",
"System.Buffers": "4.5.1", "System.Buffers": "4.5.1",
"System.Configuration.ConfigurationManager": "4.5.0", "System.Collections.Immutable": "1.7.0",
"System.Memory": "4.5.1", "System.Configuration.ConfigurationManager": "6.0.0",
"System.Memory": "4.5.4",
"System.Numerics.Vectors": "4.5.0", "System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "4.5.1", "System.Runtime.CompilerServices.Unsafe": "4.6.0",
"System.Threading.Tasks.Extensions": "4.5.1", "System.Threading.Tasks.Extensions": "4.5.4",
"System.ValueTuple": "4.5.0" "System.ValueTuple": "4.5.0"
} }
}, },
"Microsoft.Extensions.Caching.Abstractions": { "Microsoft.Extensions.Caching.Abstractions": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.0, )",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "Uj/0fmq7FWi7B7RfLkn2UJE1SThJ60mOlChx9P5nRjP/EbeYNm+LoyiOr6yPhDsArwHttKyun18TXXJ2C9EE/g==", "contentHash": "bcz5sSFJbganH0+YrfvIjJDIcKNW7TL07C4d1eTmXy/wOt52iz4LVogJb6pazs7W0+74j0YpXFErvp++Aq5Bsw==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "3.1.7" "Microsoft.Extensions.Primitives": "6.0.0"
} }
}, },
"Microsoft.Extensions.Caching.Memory": { "Microsoft.Extensions.Caching.Memory": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.1, )",
"resolved": "3.1.7", "resolved": "6.0.1",
"contentHash": "EvNcJWk0KKSqyXefiUTgF5D94r40rmmtAvo5/yhy7u5/CtRjqyN7wQBSKz2ezWlu5vbuMGyaMktANgkk4kEkaw==", "contentHash": "B4y+Cev05eMcjf1na0v9gza6GUtahXbtY1JCypIgx3B4Ea/KAgsWyXEmW4q6zMbmTMtKzmPVk09rvFJirvMwTg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Caching.Abstractions": "3.1.7", "Microsoft.Extensions.Caching.Abstractions": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "3.1.7", "Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "3.1.7" "Microsoft.Extensions.Options": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
} }
}, },
"Microsoft.Extensions.Configuration": { "Microsoft.Extensions.Configuration": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.1, )",
"resolved": "3.1.7", "resolved": "6.0.1",
"contentHash": "JCVsQYNZNGeLXWMw6tkCZ8Wa2IQKF9AiLKeq9Ff2XvGJTMzhYEHAzF/FvHdeBBhPiOf+Kl1t6mdcHL93kUz6MA==", "contentHash": "BUyFU9t+HzlSE7ri4B+AQN2BgTgHv/uM82s5ZkgU1BApyzWzIl48nDsG5wR1t0pniNuuyTBzG3qCW8152/NtSw==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "3.1.7" "Microsoft.Extensions.Configuration.Abstractions": "6.0.0",
"Microsoft.Extensions.Primitives": "6.0.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection": { "Microsoft.Extensions.DependencyInjection": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.0, )",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "yp38AFc5tJQZkjINjXBcxq+dANU06lo27D84duitZthtRPsgKJL87uf9RWRsDdRsWd+kXflmdMWFLKFjyKx6Pw==", "contentHash": "k6PWQMuoBDGGHOQTtyois2u4AwyVcIwL2LaSLlTZQm2CYcJ1pxbt6jfAnpWmzENA/wfrYRI/X9DTLoUkE4AsLw==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7" "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
} }
}, },
"Microsoft.Extensions.DependencyInjection.Abstractions": { "Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.0, )",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "oKL2yNtTN1/cOp+cbdyv5TeLzO+GkO9B3fvbcPzKWTNCkDoH3ccYS3FWC1p4KSYe9frW4WsyfSTeM8X+xftOig==" "contentHash": "xlzi2IYREJH3/m6+lUrQlujzX8wDitm4QGnUu6kUXTQAWPuZY8i+ticFJbzfqaetLA6KR/rO6Ew/HuYD+bxifg=="
}, },
"Microsoft.Extensions.Hosting.Abstractions": { "Microsoft.Extensions.Hosting.Abstractions": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.0, )",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "4j6lSyPJF2emznd7Y4nZp8UbVyhe/defMPyFBV+YfINbAgJ3HgUPWp2QdsO87WOzWjlXTU4ZFwL2fuuMbwdR5g==", "contentHash": "GcT5l2CYXL6Sa27KCSh0TixsRfADUgth+ojQSD5EkzisZxmGFh7CwzkcYuGwvmXLjr27uWRNrJ2vuuEjMhU05Q==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "3.1.7", "Microsoft.Extensions.Configuration.Abstractions": "6.0.0",
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "3.1.7", "Microsoft.Extensions.FileProviders.Abstractions": "6.0.0"
"Microsoft.Extensions.Logging.Abstractions": "3.1.7"
} }
}, },
"Microsoft.Extensions.Http": { "Microsoft.Extensions.Http": {
"type": "Direct", "type": "Direct",
"requested": "[3.1.7, )", "requested": "[6.0.0, )",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "yGaFZpLkIxXKp96eyCMieyrWzKKMr4SxOQi0Zo0RiaoiB3l/dOqqeYJ7RMD31djx61lnd7ocqV4j93WtUye/wA==", "contentHash": "15+pa2G0bAMHbHewaQIdr/y6ag2H3yh4rd9hTXavtWDzQBkvpe2RMqFg8BxDpcQWssmjmBApGPcw93QRz6YcMg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging": "3.1.7", "Microsoft.Extensions.Logging": "6.0.0",
"Microsoft.Extensions.Options": "3.1.7" "Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "6.0.0"
} }
}, },
"System.Runtime.Caching": { "System.Runtime.Caching": {
"type": "Direct", "type": "Direct",
"requested": "[4.7.0, )", "requested": "[6.0.0, )",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "NdvNRjTPxYvIEhXQszT9L9vJhdQoX6AQ0AlhjTU+5NqFQVuacJTfhPVAvtGWNA2OJCqRiR/okBcZgMwI6MqcZg==", "contentHash": "E0e03kUp5X2k+UAoVl6efmI7uU7JRBWi5EIdlQ7cr0NpBGjHG4fWII35PgsBY9T4fJQ8E4QPsL0rKksU9gcL5A==",
"dependencies": { "dependencies": {
"System.Configuration.ConfigurationManager": "4.7.0" "System.Configuration.ConfigurationManager": "6.0.0"
} }
}, },
"Azure.Core": { "Azure.Core": {
"type": "Transitive", "type": "Transitive",
"resolved": "1.4.1", "resolved": "1.25.0",
"contentHash": "6LbGLiZwlU6SfOaINCfrQ+f91bRWZ8XvB90Qfm69x1t3z+5D4jmXnQiuPYPZcgtxFjPKA3IwyHGuDZRkSo1Urg==", "contentHash": "X8Dd4sAggS84KScWIjEbFAdt2U1KDolQopTPoHVubG2y3CM54f9l6asVrP5Uy384NWXjsspPYaJgz5xHc+KvTA==",
"dependencies": { "dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "1.0.0", "Microsoft.Bcl.AsyncInterfaces": "1.1.1",
"System.Buffers": "4.5.0",
"System.Diagnostics.DiagnosticSource": "4.6.0", "System.Diagnostics.DiagnosticSource": "4.6.0",
"System.Memory": "4.5.3", "System.Memory.Data": "1.0.2",
"System.Numerics.Vectors": "4.5.0", "System.Numerics.Vectors": "4.5.0",
"System.Text.Json": "4.6.0", "System.Text.Encodings.Web": "4.7.2",
"System.Threading.Tasks.Extensions": "4.5.2" "System.Text.Json": "4.7.2",
"System.Threading.Tasks.Extensions": "4.5.4"
} }
}, },
"Azure.Storage.Common": { "Azure.Storage.Common": {
"type": "Transitive", "type": "Transitive",
"resolved": "12.5.1", "resolved": "12.12.0",
"contentHash": "CxlvHBnmoyk4TZUtLO9UQGAYqZJ5CzQ443lBOUseFSnvz11W7U0yg3evmfFMjeSEHbQj/5d6Nhu1UEO1W0cMTg==", "contentHash": "Ms0XsZ/D9Pcudfbqj+rWeCkhx/ITEq8isY0jkor9JFmDAEHsItFa2XrWkzP3vmJU6EsXQrk4snH63HkW/Jksvg==",
"dependencies": { "dependencies": {
"Azure.Core": "1.4.1" "Azure.Core": "1.25.0",
"System.IO.Hashing": "6.0.0"
} }
}, },
"Microsoft.Bcl.AsyncInterfaces": { "Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive", "type": "Transitive",
"resolved": "1.0.0", "resolved": "1.1.1",
"contentHash": "K63Y4hORbBcKLWH5wnKgzyn7TOfYzevIEwIedQHBIkmkEBA9SCqgvom+XTuE+fAFGvINGkhFItaZ2dvMGdT5iw==" "contentHash": "yuvf07qFWFqtK3P/MRkEKLhn5r2UbSpVueRziSqj0yJQIKFwG1pq9mOayK3zE5qZCTs0CbrwL9M6R8VwqyGy2w=="
},
"Microsoft.Bcl.HashCode": {
"type": "Transitive",
"resolved": "1.1.0",
"contentHash": "J2G1k+u5unBV+aYcwxo94ip16Rkp65pgWFb0R6zwJipzWNMgvqlWeuI7/+R+e8bob66LnSG+llLJ+z8wI94cHg=="
}, },
"Microsoft.CSharp": { "Microsoft.CSharp": {
"type": "Transitive", "type": "Transitive",
@ -150,62 +161,58 @@
}, },
"Microsoft.Extensions.Configuration.Abstractions": { "Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "WJEbrrIgly95D9rM8Gwr4w8sbYla6/iOcCZ0UE7+Qg/Q8NnQJwAJ60Lq1A26zbNE8Fm1fkbGU90LDl8e+BoRSQ==", "contentHash": "qWzV9o+ZRWq+pGm+1dF+R7qTgTYoXvbyowRoBxQJGfqTpqDun2eteerjRQhq5PQ/14S+lqto3Ft4gYaRyl4rdQ==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "3.1.7" "Microsoft.Extensions.Primitives": "6.0.0"
}
},
"Microsoft.Extensions.Configuration.Binder": {
"type": "Transitive",
"resolved": "3.1.7",
"contentHash": "FYQ64i7DwYO6XDdOFi+VkoRDDzel570I+X/vTYt6mVJWNj1SAstXwZ71P5d6P2Cei+cT950NiScOwj4F8EUeTA==",
"dependencies": {
"Microsoft.Extensions.Configuration": "3.1.7"
} }
}, },
"Microsoft.Extensions.FileProviders.Abstractions": { "Microsoft.Extensions.FileProviders.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "nasMSdDlIIBcKgGVHoZdFSmfUY1bI0zkvfZTsWLlEFcMCVD0fzcgsVlkeZTzPLJV0w7Uwq3okOgMWpU1nFEhxg==", "contentHash": "0pd4/fho0gC12rQswaGQxbU34jOS1TPS8lZPpkFCH68ppQjHNHYle9iRuHeev1LhrJ94YPvzcRd8UmIuFk23Qw==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Primitives": "3.1.7" "Microsoft.Extensions.Primitives": "6.0.0"
} }
}, },
"Microsoft.Extensions.Logging": { "Microsoft.Extensions.Logging": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "p68Hvr8S+t+bGUeXRX6wcjlkK961w0YRXWy8O6pkTsucdNpnzB8mwLIgcnQ7oj0biw8S1Ftv4PREzPIwo1UwpA==", "contentHash": "eIbyj40QDg1NDz0HBW0S5f3wrLVnKWnDJ/JtZ+yJDFnDj90VoPuoPmFkeaXrtu+0cKm5GRAwoDf+dBWXK0TUdg==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.Configuration.Binder": "3.1.7", "Microsoft.Extensions.DependencyInjection": "6.0.0",
"Microsoft.Extensions.DependencyInjection": "3.1.7", "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Logging.Abstractions": "3.1.7", "Microsoft.Extensions.Logging.Abstractions": "6.0.0",
"Microsoft.Extensions.Options": "3.1.7" "Microsoft.Extensions.Options": "6.0.0",
"System.Diagnostics.DiagnosticSource": "6.0.0"
} }
}, },
"Microsoft.Extensions.Logging.Abstractions": { "Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "oD7LQbMuaqq/yAz8PKX0hl4+H/vDFTQHo8rxbKB36P1/bG8FG7JUVKBoHkSt1MaJUtgyiHrH1AlAhaucKUKyEg==" "contentHash": "/HggWBbTwy8TgebGSX5DBZ24ndhzi93sHUBDvP1IxbZD7FDokYzdAr6+vbWGjw2XAfR2EJ1sfKUotpjHnFWPxA=="
}, },
"Microsoft.Extensions.Options": { "Microsoft.Extensions.Options": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "O5TXu1D79hbaZuKCIK4mswSP86MtmiIQjuOZnVhPdbjOVILsoQwZUtnmU2xRfX1E0QWuFEI0umhw3mDDn6dNHw==", "contentHash": "dzXN0+V1AyjOe2xcJ86Qbo233KHuLEY0njf/P2Kw8SfJU+d45HNS2ctJdnEnrWbM9Ye2eFgaC5Mj9otRMU6IsQ==",
"dependencies": { "dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.7", "Microsoft.Extensions.DependencyInjection.Abstractions": "6.0.0",
"Microsoft.Extensions.Primitives": "3.1.7" "Microsoft.Extensions.Primitives": "6.0.0"
} }
}, },
"Microsoft.Extensions.Primitives": { "Microsoft.Extensions.Primitives": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.7", "resolved": "6.0.0",
"contentHash": "sa17s3vDAXTuIVGxuJcK713i0B0iaUoiwY4Sl2SLHhMqM8snznn0YVGiZAVkoKEUFWjvIg1Z/JNmAicBamI4mg==" "contentHash": "9+PnzmQFfEFNR9J2aDTfJGGupShHjOuGw4VUv+JB044biSHrnmCIMD+mJHmb2H7YryrfBEXDurxQ47gJZdCKNQ==",
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
}, },
"Microsoft.NETCore.Platforms": { "Microsoft.NETCore.Platforms": {
"type": "Transitive", "type": "Transitive",
"resolved": "3.1.0", "resolved": "1.1.0",
"contentHash": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==" "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
}, },
"Microsoft.NETCore.Targets": { "Microsoft.NETCore.Targets": {
"type": "Transitive", "type": "Transitive",
@ -224,11 +231,8 @@
}, },
"Microsoft.Win32.SystemEvents": { "Microsoft.Win32.SystemEvents": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "mtVirZr++rq+XCDITMUdnETD59XoeMxSpLRIII7JRI6Yj0LEDiO1pPn0ktlnIj12Ix8bfvQqQDMMIF9wC98oCA==", "contentHash": "hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A=="
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0"
}
}, },
"NETStandard.Library": { "NETStandard.Library": {
"type": "Transitive", "type": "Transitive",
@ -441,6 +445,11 @@
"System.Threading.Tasks": "4.3.0" "System.Threading.Tasks": "4.3.0"
} }
}, },
"System.Collections.Immutable": {
"type": "Transitive",
"resolved": "1.7.0",
"contentHash": "RVSM6wZUo6L2y6P3vN6gjUtyJ2IF2RVtrepF3J7nrDKfFQd5u/SnSUFclchYQis8/k5scHy9E+fVeKVQLnnkzw=="
},
"System.Collections.NonGeneric": { "System.Collections.NonGeneric": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -510,11 +519,11 @@
}, },
"System.Configuration.ConfigurationManager": { "System.Configuration.ConfigurationManager": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "/anOTeSZCNNI2zDilogWrZ8pNqCmYbzGNexUnNhjW8k0sHqEZ2nHJBp147jBV3hGYswu5lINpNg1vxR7bnqvVA==", "contentHash": "7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==",
"dependencies": { "dependencies": {
"System.Security.Cryptography.ProtectedData": "4.7.0", "System.Security.Cryptography.ProtectedData": "6.0.0",
"System.Security.Permissions": "4.7.0" "System.Security.Permissions": "6.0.0"
} }
}, },
"System.Console": { "System.Console": {
@ -541,8 +550,11 @@
}, },
"System.Diagnostics.DiagnosticSource": { "System.Diagnostics.DiagnosticSource": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.6.0", "resolved": "6.0.0",
"contentHash": "mbBgoR0rRfl2uimsZ2avZY8g7Xnh1Mza0rJZLPcxqiMWlkGukjmRkuMJ/er+AhQuiRIh80CR/Hpeztr80seV5g==" "contentHash": "frQDfv0rl209cKm1lnwTgFPzNigy2EKk1BS3uAvHvlBVKe5cymGyHO+Sj+NLv5VF/AhHsqPIUUwya5oV4CHMUw==",
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
}, },
"System.Diagnostics.Tools": { "System.Diagnostics.Tools": {
"type": "Transitive", "type": "Transitive",
@ -566,11 +578,10 @@
}, },
"System.Drawing.Common": { "System.Drawing.Common": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "v+XbyYHaZjDfn0ENmJEV1VYLgGgCTx1gnfOBcppowbpOAriglYgGCvFCPr2EEZyBvXlpxbEsTwkOlInl107ahA==", "contentHash": "NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==",
"dependencies": { "dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0", "Microsoft.Win32.SystemEvents": "6.0.0"
"Microsoft.Win32.SystemEvents": "4.7.0"
} }
}, },
"System.Globalization": { "System.Globalization": {
@ -680,6 +691,11 @@
"System.Runtime": "4.3.0" "System.Runtime": "4.3.0"
} }
}, },
"System.IO.Hashing": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g=="
},
"System.Linq": { "System.Linq": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -718,8 +734,17 @@
}, },
"System.Memory": { "System.Memory": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.5.3", "resolved": "4.5.4",
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==" "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
},
"System.Memory.Data": {
"type": "Transitive",
"resolved": "1.0.2",
"contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==",
"dependencies": {
"System.Text.Encodings.Web": "4.7.2",
"System.Text.Json": "4.6.0"
}
}, },
"System.Net.Http": { "System.Net.Http": {
"type": "Transitive", "type": "Transitive",
@ -809,8 +834,15 @@
}, },
"System.Reflection.Emit": { "System.Reflection.Emit": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "4.3.0",
"contentHash": "VR4kk8XLKebQ4MZuKuIni/7oh+QGFmZW3qORd1GvBq/8026OpW501SzT/oypwiQl4TvT8ErnReh/NzY9u+C6wQ==" "contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
"dependencies": {
"System.IO": "4.3.0",
"System.Reflection": "4.3.0",
"System.Reflection.Emit.ILGeneration": "4.3.0",
"System.Reflection.Primitives": "4.3.0",
"System.Runtime": "4.3.0"
}
}, },
"System.Reflection.Emit.ILGeneration": { "System.Reflection.Emit.ILGeneration": {
"type": "Transitive", "type": "Transitive",
@ -886,8 +918,8 @@
}, },
"System.Runtime.CompilerServices.Unsafe": { "System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.5.1", "resolved": "6.0.0",
"contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
}, },
"System.Runtime.Extensions": { "System.Runtime.Extensions": {
"type": "Transitive", "type": "Transitive",
@ -970,12 +1002,8 @@
}, },
"System.Security.AccessControl": { "System.Security.AccessControl": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", "contentHash": "AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ=="
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Security.Principal.Windows": "4.7.0"
}
}, },
"System.Security.Cryptography.Algorithms": { "System.Security.Cryptography.Algorithms": {
"type": "Transitive", "type": "Transitive",
@ -1091,8 +1119,8 @@
}, },
"System.Security.Cryptography.ProtectedData": { "System.Security.Cryptography.ProtectedData": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==" "contentHash": "rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ=="
}, },
"System.Security.Cryptography.X509Certificates": { "System.Security.Cryptography.X509Certificates": {
"type": "Transitive", "type": "Transitive",
@ -1128,18 +1156,13 @@
}, },
"System.Security.Permissions": { "System.Security.Permissions": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==", "contentHash": "T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==",
"dependencies": { "dependencies": {
"System.Security.AccessControl": "4.7.0", "System.Security.AccessControl": "6.0.0",
"System.Windows.Extensions": "4.7.0" "System.Windows.Extensions": "6.0.0"
} }
}, },
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "4.7.0",
"contentHash": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ=="
},
"System.Text.Encoding": { "System.Text.Encoding": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.3.0", "resolved": "4.3.0",
@ -1161,10 +1184,15 @@
"System.Text.Encoding": "4.3.0" "System.Text.Encoding": "4.3.0"
} }
}, },
"System.Text.Encodings.Web": {
"type": "Transitive",
"resolved": "4.7.2",
"contentHash": "iTUgB/WtrZ1sWZs84F2hwyQhiRH6QNjQv2DkwrH+WP6RoFga2Q1m3f9/Q7FG8cck8AdHitQkmkXSY8qylcDmuA=="
},
"System.Text.Json": { "System.Text.Json": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.6.0", "resolved": "4.7.2",
"contentHash": "4F8Xe+JIkVoDJ8hDAZ7HqLkjctN/6WItJIzQaifBwClC7wmoLSda/Sv2i6i1kycqDb3hWF4JCVbpAweyOKHEUA==" "contentHash": "TcMd95wcrubm9nHvJEQs70rC0H/8omiSGGpU4FQ/ZA1URIqD4pjmFJh2Mfv1yH1eHgJDWTi2hMDXwTET+zOOyg=="
}, },
"System.Text.RegularExpressions": { "System.Text.RegularExpressions": {
"type": "Transitive", "type": "Transitive",
@ -1195,8 +1223,8 @@
}, },
"System.Threading.Tasks.Extensions": { "System.Threading.Tasks.Extensions": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.5.2", "resolved": "4.5.4",
"contentHash": "BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==" "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
}, },
"System.Threading.Timer": { "System.Threading.Timer": {
"type": "Transitive", "type": "Transitive",
@ -1215,10 +1243,10 @@
}, },
"System.Windows.Extensions": { "System.Windows.Extensions": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "6.0.0",
"contentHash": "CeWTdRNfRaSh0pm2gDTJFwVaXfTq6Xwv/sA887iwPTneW7oMtMlpvDIO+U60+3GWTB7Aom6oQwv5VZVUhQRdPQ==", "contentHash": "IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==",
"dependencies": { "dependencies": {
"System.Drawing.Common": "4.7.0" "System.Drawing.Common": "6.0.0"
} }
}, },
"System.Xml.ReaderWriter": { "System.Xml.ReaderWriter": {

View File

@ -1,6 +1,6 @@
//---------------------- //----------------------
// <auto-generated> // <auto-generated>
// Generated using the NSwag toolchain v13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org) // Generated using the NSwag toolchain v13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)
// </auto-generated> // </auto-generated>
//---------------------- //----------------------
@ -9,70 +9,78 @@
#pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?' #pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?'
#pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ... #pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ...
#pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..." #pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..."
#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'"
#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant"
#pragma warning disable 8603 // Disable "CS8603 Possible null reference return"
namespace Giants.WebApi.Clients namespace Giants.WebApi.Clients
{ {
using System = global::System; using System = global::System;
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v11.0.0.0))")] [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class ServersClient public partial class ServersClient
{ {
private string _baseUrl = "https://localhost:44304"; private string _baseUrl = "https://localhost:44304";
private System.Net.Http.HttpClient _httpClient; private System.Net.Http.HttpClient _httpClient;
private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings; private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings;
public ServersClient(System.Net.Http.HttpClient httpClient) public ServersClient(System.Net.Http.HttpClient httpClient)
{ {
_httpClient = httpClient; _httpClient = httpClient;
_settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings); _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings);
} }
private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings()
{ {
var settings = new Newtonsoft.Json.JsonSerializerSettings(); var settings = new Newtonsoft.Json.JsonSerializerSettings();
UpdateJsonSerializerSettings(settings); UpdateJsonSerializerSettings(settings);
return settings; return settings;
} }
public string BaseUrl public string BaseUrl
{ {
get { return _baseUrl; } get { return _baseUrl; }
set { _baseUrl = value; } set { _baseUrl = value; }
} }
protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } }
partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder);
partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response);
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public System.Threading.Tasks.Task DeleteServerAsync() public virtual System.Threading.Tasks.Task DeleteServerAsync()
{ {
return DeleteServerAsync(System.Threading.CancellationToken.None); return DeleteServerAsync(System.Threading.CancellationToken.None);
} }
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public async System.Threading.Tasks.Task DeleteServerAsync(System.Threading.CancellationToken cancellationToken) public virtual async System.Threading.Tasks.Task DeleteServerAsync(System.Threading.CancellationToken cancellationToken)
{ {
var urlBuilder_ = new System.Text.StringBuilder(); var urlBuilder_ = new System.Text.StringBuilder();
urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Servers"); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Servers");
var client_ = _httpClient; var client_ = _httpClient;
var disposeClient_ = false;
try try
{ {
using (var request_ = new System.Net.Http.HttpRequestMessage()) using (var request_ = new System.Net.Http.HttpRequestMessage())
{ {
request_.Method = new System.Net.Http.HttpMethod("DELETE"); request_.Method = new System.Net.Http.HttpMethod("DELETE");
PrepareRequest(client_, request_, urlBuilder_); PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString(); var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_); PrepareRequest(client_, request_, url_);
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
try try
{ {
var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
@ -81,9 +89,9 @@ namespace Giants.WebApi.Clients
foreach (var item_ in response_.Content.Headers) foreach (var item_ in response_.Content.Headers)
headers_[item_.Key] = item_.Value; headers_[item_.Key] = item_.Value;
} }
ProcessResponse(client_, response_); ProcessResponse(client_, response_);
var status_ = (int)response_.StatusCode; var status_ = (int)response_.StatusCode;
if (status_ == 200) if (status_ == 200)
{ {
@ -91,49 +99,55 @@ namespace Giants.WebApi.Clients
} }
else else
{ {
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
} }
} }
finally finally
{ {
if (response_ != null) if (disposeResponse_)
response_.Dispose(); response_.Dispose();
} }
} }
} }
finally finally
{ {
if (disposeClient_)
client_.Dispose();
} }
} }
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public System.Threading.Tasks.Task<System.Collections.Generic.ICollection<ServerInfoWithHostAddress>> GetServersAsync() public virtual System.Threading.Tasks.Task<System.Collections.Generic.ICollection<ServerInfoWithHostAddress>> GetServersAsync()
{ {
return GetServersAsync(System.Threading.CancellationToken.None); return GetServersAsync(System.Threading.CancellationToken.None);
} }
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public async System.Threading.Tasks.Task<System.Collections.Generic.ICollection<ServerInfoWithHostAddress>> GetServersAsync(System.Threading.CancellationToken cancellationToken) public virtual async System.Threading.Tasks.Task<System.Collections.Generic.ICollection<ServerInfoWithHostAddress>> GetServersAsync(System.Threading.CancellationToken cancellationToken)
{ {
var urlBuilder_ = new System.Text.StringBuilder(); var urlBuilder_ = new System.Text.StringBuilder();
urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Servers"); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Servers");
var client_ = _httpClient; var client_ = _httpClient;
var disposeClient_ = false;
try try
{ {
using (var request_ = new System.Net.Http.HttpRequestMessage()) using (var request_ = new System.Net.Http.HttpRequestMessage())
{ {
request_.Method = new System.Net.Http.HttpMethod("GET"); request_.Method = new System.Net.Http.HttpMethod("GET");
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));
PrepareRequest(client_, request_, urlBuilder_); PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString(); var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_); PrepareRequest(client_, request_, url_);
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
try try
{ {
var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
@ -142,13 +156,13 @@ namespace Giants.WebApi.Clients
foreach (var item_ in response_.Content.Headers) foreach (var item_ in response_.Content.Headers)
headers_[item_.Key] = item_.Value; headers_[item_.Key] = item_.Value;
} }
ProcessResponse(client_, response_); ProcessResponse(client_, response_);
var status_ = (int)response_.StatusCode; var status_ = (int)response_.StatusCode;
if (status_ == 200) if (status_ == 200)
{ {
var objectResponse_ = await ReadObjectResponseAsync<System.Collections.Generic.ICollection<ServerInfoWithHostAddress>>(response_, headers_).ConfigureAwait(false); var objectResponse_ = await ReadObjectResponseAsync<System.Collections.Generic.ICollection<ServerInfoWithHostAddress>>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null) if (objectResponse_.Object == null)
{ {
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
@ -157,39 +171,42 @@ namespace Giants.WebApi.Clients
} }
else else
{ {
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
} }
} }
finally finally
{ {
if (response_ != null) if (disposeResponse_)
response_.Dispose(); response_.Dispose();
} }
} }
} }
finally finally
{ {
if (disposeClient_)
client_.Dispose();
} }
} }
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public System.Threading.Tasks.Task AddServerAsync(ServerInfo serverInfo) public virtual System.Threading.Tasks.Task AddServerAsync(ServerInfo serverInfo)
{ {
return AddServerAsync(serverInfo, System.Threading.CancellationToken.None); return AddServerAsync(serverInfo, System.Threading.CancellationToken.None);
} }
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public async System.Threading.Tasks.Task AddServerAsync(ServerInfo serverInfo, System.Threading.CancellationToken cancellationToken) public virtual async System.Threading.Tasks.Task AddServerAsync(ServerInfo serverInfo, System.Threading.CancellationToken cancellationToken)
{ {
if (serverInfo == null) if (serverInfo == null)
throw new System.ArgumentNullException("serverInfo"); throw new System.ArgumentNullException("serverInfo");
var urlBuilder_ = new System.Text.StringBuilder(); var urlBuilder_ = new System.Text.StringBuilder();
urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Servers"); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Servers");
var client_ = _httpClient; var client_ = _httpClient;
var disposeClient_ = false;
try try
{ {
using (var request_ = new System.Net.Http.HttpRequestMessage()) using (var request_ = new System.Net.Http.HttpRequestMessage())
@ -198,13 +215,16 @@ namespace Giants.WebApi.Clients
content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json"); content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
request_.Content = content_; request_.Content = content_;
request_.Method = new System.Net.Http.HttpMethod("POST"); request_.Method = new System.Net.Http.HttpMethod("POST");
PrepareRequest(client_, request_, urlBuilder_); PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString(); var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_); PrepareRequest(client_, request_, url_);
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
try try
{ {
var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
@ -213,9 +233,9 @@ namespace Giants.WebApi.Clients
foreach (var item_ in response_.Content.Headers) foreach (var item_ in response_.Content.Headers)
headers_[item_.Key] = item_.Value; headers_[item_.Key] = item_.Value;
} }
ProcessResponse(client_, response_); ProcessResponse(client_, response_);
var status_ = (int)response_.StatusCode; var status_ = (int)response_.StatusCode;
if (status_ == 200) if (status_ == 200)
{ {
@ -223,22 +243,24 @@ namespace Giants.WebApi.Clients
} }
else else
{ {
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
} }
} }
finally finally
{ {
if (response_ != null) if (disposeResponse_)
response_.Dispose(); response_.Dispose();
} }
} }
} }
finally finally
{ {
if (disposeClient_)
client_.Dispose();
} }
} }
protected struct ObjectResponseResult<T> protected struct ObjectResponseResult<T>
{ {
public ObjectResponseResult(T responseObject, string responseText) public ObjectResponseResult(T responseObject, string responseText)
@ -246,21 +268,21 @@ namespace Giants.WebApi.Clients
this.Object = responseObject; this.Object = responseObject;
this.Text = responseText; this.Text = responseText;
} }
public T Object { get; } public T Object { get; }
public string Text { get; } public string Text { get; }
} }
public bool ReadResponseAsString { get; set; } public bool ReadResponseAsString { get; set; }
protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers) protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.Threading.CancellationToken cancellationToken)
{ {
if (response == null || response.Content == null) if (response == null || response.Content == null)
{ {
return new ObjectResponseResult<T>(default(T), string.Empty); return new ObjectResponseResult<T>(default(T), string.Empty);
} }
if (ReadResponseAsString) if (ReadResponseAsString)
{ {
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
@ -295,14 +317,14 @@ namespace Giants.WebApi.Clients
} }
} }
} }
private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo) private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo)
{ {
if (value == null) if (value == null)
{ {
return null; return "";
} }
if (value is System.Enum) if (value is System.Enum)
{ {
var name = System.Enum.GetName(value.GetType(), value); var name = System.Enum.GetName(value.GetType(), value);
@ -318,8 +340,9 @@ namespace Giants.WebApi.Clients
return attribute.Value != null ? attribute.Value : name; return attribute.Value != null ? attribute.Value : name;
} }
} }
return System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo));
return converted == null ? string.Empty : converted;
} }
} }
else if (value is bool) else if (value is bool)
@ -335,72 +358,77 @@ namespace Giants.WebApi.Clients
var array = System.Linq.Enumerable.OfType<object>((System.Array) value); var array = System.Linq.Enumerable.OfType<object>((System.Array) value);
return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo)));
} }
var result = System.Convert.ToString(value, cultureInfo); var result = System.Convert.ToString(value, cultureInfo);
return (result is null) ? string.Empty : result; return result == null ? "" : result;
} }
} }
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v11.0.0.0))")] [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class CommunityClient public partial class CommunityClient
{ {
private string _baseUrl = "https://localhost:44304"; private string _baseUrl = "https://localhost:44304";
private System.Net.Http.HttpClient _httpClient; private System.Net.Http.HttpClient _httpClient;
private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings; private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings;
public CommunityClient(System.Net.Http.HttpClient httpClient) public CommunityClient(System.Net.Http.HttpClient httpClient)
{ {
_httpClient = httpClient; _httpClient = httpClient;
_settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings); _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings);
} }
private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings()
{ {
var settings = new Newtonsoft.Json.JsonSerializerSettings(); var settings = new Newtonsoft.Json.JsonSerializerSettings();
UpdateJsonSerializerSettings(settings); UpdateJsonSerializerSettings(settings);
return settings; return settings;
} }
public string BaseUrl public string BaseUrl
{ {
get { return _baseUrl; } get { return _baseUrl; }
set { _baseUrl = value; } set { _baseUrl = value; }
} }
protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } }
partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder);
partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response);
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public System.Threading.Tasks.Task<CommunityStatus> GetDiscordStatusAsync() public virtual System.Threading.Tasks.Task<CommunityStatus> GetDiscordStatusAsync()
{ {
return GetDiscordStatusAsync(System.Threading.CancellationToken.None); return GetDiscordStatusAsync(System.Threading.CancellationToken.None);
} }
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public async System.Threading.Tasks.Task<CommunityStatus> GetDiscordStatusAsync(System.Threading.CancellationToken cancellationToken) public virtual async System.Threading.Tasks.Task<CommunityStatus> GetDiscordStatusAsync(System.Threading.CancellationToken cancellationToken)
{ {
var urlBuilder_ = new System.Text.StringBuilder(); var urlBuilder_ = new System.Text.StringBuilder();
urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Community"); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Community");
var client_ = _httpClient; var client_ = _httpClient;
var disposeClient_ = false;
try try
{ {
using (var request_ = new System.Net.Http.HttpRequestMessage()) using (var request_ = new System.Net.Http.HttpRequestMessage())
{ {
request_.Method = new System.Net.Http.HttpMethod("GET"); request_.Method = new System.Net.Http.HttpMethod("GET");
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));
PrepareRequest(client_, request_, urlBuilder_); PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString(); var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_); PrepareRequest(client_, request_, url_);
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
try try
{ {
var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
@ -409,13 +437,13 @@ namespace Giants.WebApi.Clients
foreach (var item_ in response_.Content.Headers) foreach (var item_ in response_.Content.Headers)
headers_[item_.Key] = item_.Value; headers_[item_.Key] = item_.Value;
} }
ProcessResponse(client_, response_); ProcessResponse(client_, response_);
var status_ = (int)response_.StatusCode; var status_ = (int)response_.StatusCode;
if (status_ == 200) if (status_ == 200)
{ {
var objectResponse_ = await ReadObjectResponseAsync<CommunityStatus>(response_, headers_).ConfigureAwait(false); var objectResponse_ = await ReadObjectResponseAsync<CommunityStatus>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null) if (objectResponse_.Object == null)
{ {
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
@ -424,22 +452,24 @@ namespace Giants.WebApi.Clients
} }
else else
{ {
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
} }
} }
finally finally
{ {
if (response_ != null) if (disposeResponse_)
response_.Dispose(); response_.Dispose();
} }
} }
} }
finally finally
{ {
if (disposeClient_)
client_.Dispose();
} }
} }
protected struct ObjectResponseResult<T> protected struct ObjectResponseResult<T>
{ {
public ObjectResponseResult(T responseObject, string responseText) public ObjectResponseResult(T responseObject, string responseText)
@ -447,21 +477,21 @@ namespace Giants.WebApi.Clients
this.Object = responseObject; this.Object = responseObject;
this.Text = responseText; this.Text = responseText;
} }
public T Object { get; } public T Object { get; }
public string Text { get; } public string Text { get; }
} }
public bool ReadResponseAsString { get; set; } public bool ReadResponseAsString { get; set; }
protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers) protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.Threading.CancellationToken cancellationToken)
{ {
if (response == null || response.Content == null) if (response == null || response.Content == null)
{ {
return new ObjectResponseResult<T>(default(T), string.Empty); return new ObjectResponseResult<T>(default(T), string.Empty);
} }
if (ReadResponseAsString) if (ReadResponseAsString)
{ {
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
@ -496,14 +526,14 @@ namespace Giants.WebApi.Clients
} }
} }
} }
private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo) private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo)
{ {
if (value == null) if (value == null)
{ {
return null; return "";
} }
if (value is System.Enum) if (value is System.Enum)
{ {
var name = System.Enum.GetName(value.GetType(), value); var name = System.Enum.GetName(value.GetType(), value);
@ -519,8 +549,9 @@ namespace Giants.WebApi.Clients
return attribute.Value != null ? attribute.Value : name; return attribute.Value != null ? attribute.Value : name;
} }
} }
return System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo));
return converted == null ? string.Empty : converted;
} }
} }
else if (value is bool) else if (value is bool)
@ -536,77 +567,82 @@ namespace Giants.WebApi.Clients
var array = System.Linq.Enumerable.OfType<object>((System.Array) value); var array = System.Linq.Enumerable.OfType<object>((System.Array) value);
return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo)));
} }
var result = System.Convert.ToString(value, cultureInfo); var result = System.Convert.ToString(value, cultureInfo);
return (result is null) ? string.Empty : result; return result == null ? "" : result;
} }
} }
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v11.0.0.0))")] [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class VersionClient public partial class VersionClient
{ {
private string _baseUrl = "https://localhost:44304"; private string _baseUrl = "https://localhost:44304";
private System.Net.Http.HttpClient _httpClient; private System.Net.Http.HttpClient _httpClient;
private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings; private System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings;
public VersionClient(System.Net.Http.HttpClient httpClient) public VersionClient(System.Net.Http.HttpClient httpClient)
{ {
_httpClient = httpClient; _httpClient = httpClient;
_settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings); _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings);
} }
private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings() private Newtonsoft.Json.JsonSerializerSettings CreateSerializerSettings()
{ {
var settings = new Newtonsoft.Json.JsonSerializerSettings(); var settings = new Newtonsoft.Json.JsonSerializerSettings();
UpdateJsonSerializerSettings(settings); UpdateJsonSerializerSettings(settings);
return settings; return settings;
} }
public string BaseUrl public string BaseUrl
{ {
get { return _baseUrl; } get { return _baseUrl; }
set { _baseUrl = value; } set { _baseUrl = value; }
} }
protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } } protected Newtonsoft.Json.JsonSerializerSettings JsonSerializerSettings { get { return _settings.Value; } }
partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings); partial void UpdateJsonSerializerSettings(Newtonsoft.Json.JsonSerializerSettings settings);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url); partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, string url);
partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder); partial void PrepareRequest(System.Net.Http.HttpClient client, System.Net.Http.HttpRequestMessage request, System.Text.StringBuilder urlBuilder);
partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response); partial void ProcessResponse(System.Net.Http.HttpClient client, System.Net.Http.HttpResponseMessage response);
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public System.Threading.Tasks.Task<VersionInfo> GetVersionInfoAsync(string appName) public virtual System.Threading.Tasks.Task<VersionInfo> GetVersionInfoAsync(string appName)
{ {
return GetVersionInfoAsync(appName, System.Threading.CancellationToken.None); return GetVersionInfoAsync(appName, System.Threading.CancellationToken.None);
} }
/// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param> /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
/// <exception cref="ApiException">A server side error occurred.</exception> /// <exception cref="ApiException">A server side error occurred.</exception>
public async System.Threading.Tasks.Task<VersionInfo> GetVersionInfoAsync(string appName, System.Threading.CancellationToken cancellationToken) public virtual async System.Threading.Tasks.Task<VersionInfo> GetVersionInfoAsync(string appName, System.Threading.CancellationToken cancellationToken)
{ {
var urlBuilder_ = new System.Text.StringBuilder(); var urlBuilder_ = new System.Text.StringBuilder();
urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Version?"); urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Version?");
if (appName != null) if (appName != null)
{ {
urlBuilder_.Append(System.Uri.EscapeDataString("appName") + "=").Append(System.Uri.EscapeDataString(ConvertToString(appName, System.Globalization.CultureInfo.InvariantCulture))).Append("&"); urlBuilder_.Append(System.Uri.EscapeDataString("appName") + "=").Append(System.Uri.EscapeDataString(ConvertToString(appName, System.Globalization.CultureInfo.InvariantCulture))).Append("&");
} }
urlBuilder_.Length--; urlBuilder_.Length--;
var client_ = _httpClient; var client_ = _httpClient;
var disposeClient_ = false;
try try
{ {
using (var request_ = new System.Net.Http.HttpRequestMessage()) using (var request_ = new System.Net.Http.HttpRequestMessage())
{ {
request_.Method = new System.Net.Http.HttpMethod("GET"); request_.Method = new System.Net.Http.HttpMethod("GET");
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json")); request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));
PrepareRequest(client_, request_, urlBuilder_); PrepareRequest(client_, request_, urlBuilder_);
var url_ = urlBuilder_.ToString(); var url_ = urlBuilder_.ToString();
request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute); request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
PrepareRequest(client_, request_, url_); PrepareRequest(client_, request_, url_);
var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
var disposeResponse_ = true;
try try
{ {
var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value); var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
@ -615,13 +651,13 @@ namespace Giants.WebApi.Clients
foreach (var item_ in response_.Content.Headers) foreach (var item_ in response_.Content.Headers)
headers_[item_.Key] = item_.Value; headers_[item_.Key] = item_.Value;
} }
ProcessResponse(client_, response_); ProcessResponse(client_, response_);
var status_ = (int)response_.StatusCode; var status_ = (int)response_.StatusCode;
if (status_ == 200) if (status_ == 200)
{ {
var objectResponse_ = await ReadObjectResponseAsync<VersionInfo>(response_, headers_).ConfigureAwait(false); var objectResponse_ = await ReadObjectResponseAsync<VersionInfo>(response_, headers_, cancellationToken).ConfigureAwait(false);
if (objectResponse_.Object == null) if (objectResponse_.Object == null)
{ {
throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null); throw new ApiException("Response was null which was not expected.", status_, objectResponse_.Text, headers_, null);
@ -630,22 +666,24 @@ namespace Giants.WebApi.Clients
} }
else else
{ {
var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false); var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);
throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null); throw new ApiException("The HTTP status code of the response was not expected (" + status_ + ").", status_, responseData_, headers_, null);
} }
} }
finally finally
{ {
if (response_ != null) if (disposeResponse_)
response_.Dispose(); response_.Dispose();
} }
} }
} }
finally finally
{ {
if (disposeClient_)
client_.Dispose();
} }
} }
protected struct ObjectResponseResult<T> protected struct ObjectResponseResult<T>
{ {
public ObjectResponseResult(T responseObject, string responseText) public ObjectResponseResult(T responseObject, string responseText)
@ -653,21 +691,21 @@ namespace Giants.WebApi.Clients
this.Object = responseObject; this.Object = responseObject;
this.Text = responseText; this.Text = responseText;
} }
public T Object { get; } public T Object { get; }
public string Text { get; } public string Text { get; }
} }
public bool ReadResponseAsString { get; set; } public bool ReadResponseAsString { get; set; }
protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers) protected virtual async System.Threading.Tasks.Task<ObjectResponseResult<T>> ReadObjectResponseAsync<T>(System.Net.Http.HttpResponseMessage response, System.Collections.Generic.IReadOnlyDictionary<string, System.Collections.Generic.IEnumerable<string>> headers, System.Threading.CancellationToken cancellationToken)
{ {
if (response == null || response.Content == null) if (response == null || response.Content == null)
{ {
return new ObjectResponseResult<T>(default(T), string.Empty); return new ObjectResponseResult<T>(default(T), string.Empty);
} }
if (ReadResponseAsString) if (ReadResponseAsString)
{ {
var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var responseText = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
@ -702,14 +740,14 @@ namespace Giants.WebApi.Clients
} }
} }
} }
private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo) private string ConvertToString(object value, System.Globalization.CultureInfo cultureInfo)
{ {
if (value == null) if (value == null)
{ {
return null; return "";
} }
if (value is System.Enum) if (value is System.Enum)
{ {
var name = System.Enum.GetName(value.GetType(), value); var name = System.Enum.GetName(value.GetType(), value);
@ -725,8 +763,9 @@ namespace Giants.WebApi.Clients
return attribute.Value != null ? attribute.Value : name; return attribute.Value != null ? attribute.Value : name;
} }
} }
return System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo)); var converted = System.Convert.ToString(System.Convert.ChangeType(value, System.Enum.GetUnderlyingType(value.GetType()), cultureInfo));
return converted == null ? string.Empty : converted;
} }
} }
else if (value is bool) else if (value is bool)
@ -742,154 +781,150 @@ namespace Giants.WebApi.Clients
var array = System.Linq.Enumerable.OfType<object>((System.Array) value); var array = System.Linq.Enumerable.OfType<object>((System.Array) value);
return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo))); return string.Join(",", System.Linq.Enumerable.Select(array, o => ConvertToString(o, cultureInfo)));
} }
var result = System.Convert.ToString(value, cultureInfo); var result = System.Convert.ToString(value, cultureInfo);
return (result is null) ? string.Empty : result; return result == null ? "" : result;
} }
} }
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.24.0 (Newtonsoft.Json v11.0.0.0)")] [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class ServerInfoWithHostAddress : ServerInfo public partial class ServerInfoWithHostAddress : ServerInfo
{ {
[Newtonsoft.Json.JsonProperty("hostIpAddress", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("hostIpAddress", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public string HostIpAddress { get; set; } public string HostIpAddress { get; set; }
} }
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.24.0 (Newtonsoft.Json v11.0.0.0)")] [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class ServerInfo public partial class ServerInfo
{ {
[Newtonsoft.Json.JsonProperty("gameName", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("gameName", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)]
[System.ComponentModel.DataAnnotations.StringLength(100)] [System.ComponentModel.DataAnnotations.StringLength(100)]
public string GameName { get; set; } public string GameName { get; set; }
[Newtonsoft.Json.JsonProperty("version", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("version", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public AppVersion Version { get; set; } = new AppVersion(); public AppVersion Version { get; set; } = new AppVersion();
[Newtonsoft.Json.JsonProperty("sessionName", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("sessionName", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)]
[System.ComponentModel.DataAnnotations.StringLength(100)] [System.ComponentModel.DataAnnotations.StringLength(100)]
public string SessionName { get; set; } public string SessionName { get; set; }
[Newtonsoft.Json.JsonProperty("port", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("port", Required = Newtonsoft.Json.Required.Always)]
public int Port { get; set; } public int Port { get; set; }
[Newtonsoft.Json.JsonProperty("mapName", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("mapName", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)]
[System.ComponentModel.DataAnnotations.StringLength(300)] [System.ComponentModel.DataAnnotations.StringLength(300)]
public string MapName { get; set; } public string MapName { get; set; }
[Newtonsoft.Json.JsonProperty("gameType", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("gameType", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)]
[System.ComponentModel.DataAnnotations.StringLength(100)] [System.ComponentModel.DataAnnotations.StringLength(100)]
public string GameType { get; set; } public string GameType { get; set; }
[Newtonsoft.Json.JsonProperty("numPlayers", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("numPlayers", Required = Newtonsoft.Json.Required.Always)]
public int NumPlayers { get; set; } public int NumPlayers { get; set; }
[Newtonsoft.Json.JsonProperty("maxPlayers", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] [Newtonsoft.Json.JsonProperty("maxPlayers", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public int MaxPlayers { get; set; } public int MaxPlayers { get; set; }
[Newtonsoft.Json.JsonProperty("gameState", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("gameState", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)] [System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings = true)]
[System.ComponentModel.DataAnnotations.StringLength(100)] [System.ComponentModel.DataAnnotations.StringLength(100)]
public string GameState { get; set; } public string GameState { get; set; }
[Newtonsoft.Json.JsonProperty("timeLimit", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("timeLimit", Required = Newtonsoft.Json.Required.Always)]
public int TimeLimit { get; set; } public int TimeLimit { get; set; }
[Newtonsoft.Json.JsonProperty("fragLimit", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("fragLimit", Required = Newtonsoft.Json.Required.Always)]
public int FragLimit { get; set; } public int FragLimit { get; set; }
[Newtonsoft.Json.JsonProperty("teamFragLimit", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("teamFragLimit", Required = Newtonsoft.Json.Required.Always)]
public int TeamFragLimit { get; set; } public int TeamFragLimit { get; set; }
[Newtonsoft.Json.JsonProperty("firstBaseComplete", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("firstBaseComplete", Required = Newtonsoft.Json.Required.Always)]
public bool FirstBaseComplete { get; set; } public bool FirstBaseComplete { get; set; }
[Newtonsoft.Json.JsonProperty("playerInfo", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("playerInfo", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public System.Collections.Generic.ICollection<PlayerInfo> PlayerInfo { get; set; } = new System.Collections.ObjectModel.Collection<PlayerInfo>(); public System.Collections.Generic.ICollection<PlayerInfo> PlayerInfo { get; set; } = new System.Collections.ObjectModel.Collection<PlayerInfo>();
} }
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.24.0 (Newtonsoft.Json v11.0.0.0)")] [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class AppVersion public partial class AppVersion
{ {
[Newtonsoft.Json.JsonProperty("build", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("build", Required = Newtonsoft.Json.Required.Always)]
public int Build { get; set; } public int Build { get; set; }
[Newtonsoft.Json.JsonProperty("major", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("major", Required = Newtonsoft.Json.Required.Always)]
public int Major { get; set; } public int Major { get; set; }
[Newtonsoft.Json.JsonProperty("minor", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("minor", Required = Newtonsoft.Json.Required.Always)]
public int Minor { get; set; } public int Minor { get; set; }
[Newtonsoft.Json.JsonProperty("revision", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("revision", Required = Newtonsoft.Json.Required.Always)]
public int Revision { get; set; } public int Revision { get; set; }
} }
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.24.0 (Newtonsoft.Json v11.0.0.0)")] [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class PlayerInfo public partial class PlayerInfo
{ {
[Newtonsoft.Json.JsonProperty("index", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("index", Required = Newtonsoft.Json.Required.Always)]
public int Index { get; set; } public int Index { get; set; }
[Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("name", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public string Name { get; set; } public string Name { get; set; }
[Newtonsoft.Json.JsonProperty("frags", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("frags", Required = Newtonsoft.Json.Required.Always)]
public int Frags { get; set; } public int Frags { get; set; }
[Newtonsoft.Json.JsonProperty("deaths", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("deaths", Required = Newtonsoft.Json.Required.Always)]
public int Deaths { get; set; } public int Deaths { get; set; }
[Newtonsoft.Json.JsonProperty("teamName", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("teamName", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public string TeamName { get; set; } public string TeamName { get; set; }
} }
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.24.0 (Newtonsoft.Json v11.0.0.0)")] [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class CommunityStatus public partial class CommunityStatus
{ {
[Newtonsoft.Json.JsonProperty("communityAppName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] [Newtonsoft.Json.JsonProperty("communityAppName", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public string CommunityAppName { get; set; } public string CommunityAppName { get; set; }
[Newtonsoft.Json.JsonProperty("communityAppUri", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)] [Newtonsoft.Json.JsonProperty("communityAppUri", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public string CommunityAppUri { get; set; } public string CommunityAppUri { get; set; }
} }
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "10.1.24.0 (Newtonsoft.Json v11.0.0.0)")] [System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class VersionInfo public partial class VersionInfo
{ {
[Newtonsoft.Json.JsonProperty("appName", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("appName", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public string AppName { get; set; } public string AppName { get; set; }
[Newtonsoft.Json.JsonProperty("version", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("version", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public AppVersion Version { get; set; } = new AppVersion(); public AppVersion Version { get; set; } = new AppVersion();
[Newtonsoft.Json.JsonProperty("installerUri", Required = Newtonsoft.Json.Required.Always)] [Newtonsoft.Json.JsonProperty("installerUri", Required = Newtonsoft.Json.Required.Always)]
[System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Required]
public System.Uri InstallerUri { get; set; } public System.Uri InstallerUri { get; set; }
} }
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v11.0.0.0))")]
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class ApiException : System.Exception public partial class ApiException : System.Exception
{ {
public int StatusCode { get; private set; } public int StatusCode { get; private set; }
@ -902,7 +937,7 @@ namespace Giants.WebApi.Clients
: base(message + "\n\nStatus: " + statusCode + "\nResponse: \n" + ((response == null) ? "(null)" : response.Substring(0, response.Length >= 512 ? 512 : response.Length)), innerException) : base(message + "\n\nStatus: " + statusCode + "\nResponse: \n" + ((response == null) ? "(null)" : response.Substring(0, response.Length >= 512 ? 512 : response.Length)), innerException)
{ {
StatusCode = statusCode; StatusCode = statusCode;
Response = response; Response = response;
Headers = headers; Headers = headers;
} }
@ -912,7 +947,7 @@ namespace Giants.WebApi.Clients
} }
} }
[System.CodeDom.Compiler.GeneratedCode("NSwag", "13.7.0.0 (NJsonSchema v10.1.24.0 (Newtonsoft.Json v11.0.0.0))")] [System.CodeDom.Compiler.GeneratedCode("NSwag", "13.16.1.0 (NJsonSchema v10.7.2.0 (Newtonsoft.Json v11.0.0.0))")]
public partial class ApiException<TResult> : ApiException public partial class ApiException<TResult> : ApiException
{ {
public TResult Result { get; private set; } public TResult Result { get; private set; }
@ -930,4 +965,6 @@ namespace Giants.WebApi.Clients
#pragma warning restore 1573 #pragma warning restore 1573
#pragma warning restore 472 #pragma warning restore 472
#pragma warning restore 114 #pragma warning restore 114
#pragma warning restore 108 #pragma warning restore 108
#pragma warning restore 3016
#pragma warning restore 8603

View File

@ -18,8 +18,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NSwag.MSBuild" Version="13.7.0"> <PackageReference Include="NSwag.MSBuild" Version="13.16.1">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
@ -37,7 +37,8 @@
</Target> </Target>
<Target Name="PostBuild" AfterTargets="Build"> <Target Name="PostBuild" AfterTargets="Build">
<Copy Condition="$(CopyToImageOutputPath) == 'true'" SourceFiles="$(TargetPath)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" /> <Copy Condition="$(GameImagePath) != ''" SourceFiles="@(ReferenceCopyLocalPaths)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" />
<Copy Condition="$(GameImagePath) != ''" SourceFiles="@(_SourceItemsToCopyToOutputDirectory)" DestinationFolder="$(GameImagePath)" SkipUnchangedFiles="true" />
<CallTarget Condition="$(GIANTS_PATH) != ''" Targets="CopyTargetToGameFolder" /> <CallTarget Condition="$(GIANTS_PATH) != ''" Targets="CopyTargetToGameFolder" />
</Target> </Target>

View File

@ -4,15 +4,15 @@
".NETFramework,Version=v4.7.2": { ".NETFramework,Version=v4.7.2": {
"Newtonsoft.Json": { "Newtonsoft.Json": {
"type": "Direct", "type": "Direct",
"requested": "[12.0.3, )", "requested": "[13.0.1, )",
"resolved": "12.0.3", "resolved": "13.0.1",
"contentHash": "6mgjfnRB4jKMlzHSl+VD+oUc1IebOZabkbyWj2RiTgWwYPPuaK1H97G1sHqGwPlS5npiF5Q0OrxN1wni2n5QWg==" "contentHash": "ppPFpBcvxdsfUonNcvITKqLl3bqxWbDCZIzDWHzjpdAHRFfZe0Dw9HmA0+za13IdyrgJwpkDTDA9fHaxOrt20A=="
}, },
"NSwag.MSBuild": { "NSwag.MSBuild": {
"type": "Direct", "type": "Direct",
"requested": "[13.7.0, )", "requested": "[13.16.1, )",
"resolved": "13.7.0", "resolved": "13.16.1",
"contentHash": "X37HPT9ooe3f43fzSKefD6+1vn7dj/ginPQbMbsch5eA5I0UgpqBNq9kOGdoUuATmw9j3AyCIHkwY24qGyAj7Q==" "contentHash": "P5qkQRW7Vfu3YvbFs5K92/vsId1eXgL6VF/es9xugELKQZuhDMUwY9TkmkPMloEuEnLeau9qt7fLbxxP/ChQpg=="
} }
} }
} }

View File

@ -1,7 +1,10 @@
using System.Threading.Tasks; using AutoMapper;
using AutoMapper; using Giants.DataContract.Contracts.V1;
using Giants.Services; using Giants.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Web.Resource;
using System.Threading.Tasks;
namespace Giants.WebApi.Controllers namespace Giants.WebApi.Controllers
{ {
@ -12,22 +15,36 @@ namespace Giants.WebApi.Controllers
public class VersionController : ControllerBase public class VersionController : ControllerBase
{ {
private readonly IMapper mapper; private readonly IMapper mapper;
private readonly IUpdaterService updaterService; private readonly IVersioningService versioningService;
private const string VersionWriteScope = "App.Write";
public VersionController( public VersionController(
IMapper mapper, IMapper mapper,
IUpdaterService updaterService) IVersioningService versioningService)
{ {
this.mapper = mapper; this.mapper = mapper;
this.updaterService = updaterService; this.versioningService = versioningService;
} }
[HttpGet] [HttpGet]
public async Task<DataContract.V1.VersionInfo> GetVersionInfo(string appName) public async Task<DataContract.V1.VersionInfo> GetVersionInfo(string appName)
{ {
Services.VersionInfo versionInfo = await this.updaterService.GetVersionInfo(appName); ArgumentUtility.CheckStringForNullOrEmpty(appName);
Services.VersionInfo versionInfo = await this.versioningService.GetVersionInfo(appName);
return this.mapper.Map<DataContract.V1.VersionInfo>(versionInfo); return this.mapper.Map<DataContract.V1.VersionInfo>(versionInfo);
} }
[Authorize]
[RequiredScopeOrAppPermission(
AcceptedAppPermission = new[] { VersionWriteScope }) ]
[HttpPost]
public async Task UpdateVersionInfo([FromBody] VersionInfoUpdate versionInfoUpdate)
{
ArgumentUtility.CheckForNull(versionInfoUpdate);
await this.versioningService.UpdateVersionInfo(versionInfoUpdate.AppName, versionInfoUpdate.AppVersion, versionInfoUpdate.FileName);
}
} }
} }

View File

@ -10,10 +10,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="AutoMapper" Version="10.0.0" /> <PackageReference Include="AutoMapper" Version="11.0.1" />
<PackageReference Include="Microsoft.ApplicationInsights" Version="2.14.0" /> <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="4.1.1" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
<PackageReference Include="NSwag.AspNetCore" Version="13.7.0" /> <PackageReference Include="Microsoft.Identity.Web" Version="1.25.2" />
<PackageReference Include="NSwag.AspNetCore" Version="13.16.1" />
</ItemGroup> </ItemGroup>

View File

@ -1,20 +1,123 @@
namespace Giants.Web namespace Giants.Web
{ {
using AutoMapper;
using Giants.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web;
using Microsoft.IdentityModel.Logging;
using System;
using System.Linq;
using System.Threading.Tasks;
public class Program public class Program
{ {
public static void Main(string[] args) public static void Main(string[] args)
{ {
CreateHostBuilder(args).Build().Run(); var builder = WebApplication.CreateBuilder(args);
ConfigureServices(builder);
var app = builder.Build();
ConfigureApplication(app, app.Environment);
app.Run();
} }
public static IHostBuilder CreateHostBuilder(string[] args) => private static void ConfigureServices(WebApplicationBuilder builder)
Host.CreateDefaultBuilder(args) {
.ConfigureWebHostDefaults(webBuilder => var services = builder.Services;
{
webBuilder.UseStartup<Startup>(); services.AddControllers();
}); services.AddApiVersioning(config =>
{
config.DefaultApiVersion = new ApiVersion(1, 0);
config.AssumeDefaultVersionWhenUnspecified = true;
});
services.AddOpenApiDocument();
services.AddApplicationInsightsTelemetry();
IdentityModelEventSource.ShowPII = true;
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
builder.Configuration.Bind("AzureAd", options);
options.Events = new JwtBearerEvents();
options.Events.OnAuthenticationFailed = async context =>
{
await Task.CompletedTask;
};
options.Events.OnForbidden = async context =>
{
await Task.CompletedTask;
};
options.Events.OnChallenge = async context =>
{
await Task.CompletedTask;
};
options.Events.OnTokenValidated = async context =>
{
string[] allowedClientApps = builder.Configuration.GetValue<string>("AllowedClientIds").Split(',', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries);
string clientAppId = context?.Principal?.Claims
.FirstOrDefault(x => x.Type == "azp" || x.Type == "appid")?.Value;
if (clientAppId == null || !allowedClientApps.Contains(clientAppId))
{
throw new UnauthorizedAccessException("The client app is not permitted to access this API");
}
await Task.CompletedTask;
};
}, options =>
{
builder.Configuration.Bind("AzureAd", options);
});
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
ServicesModule.RegisterServices(services, builder.Configuration);
IMapper mapper = Services.Mapper.GetMapper();
services.AddSingleton(mapper);
builder.Logging.AddEventSourceLogger();
}
private static void ConfigureApplication(WebApplication app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
app.UseDeveloperExceptionPage();
app.UseOpenApi();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
} }
} }

View File

@ -1,65 +0,0 @@
using AutoMapper;
using Giants.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Hosting;
namespace Giants.Web
{
public class Startup
{
public Startup(IConfiguration configuration)
{
this.Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApiVersioning(config =>
{
config.DefaultApiVersion = new ApiVersion(1, 0);
config.AssumeDefaultVersionWhenUnspecified = true;
});
services.AddOpenApiDocument();
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
ServicesModule.RegisterServices(services, this.Configuration);
IMapper mapper = Services.Mapper.GetMapper();
services.AddSingleton(mapper);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseOpenApi();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}

View File

@ -12,7 +12,7 @@
"ServerTimeoutPeriodInMinutes": "7", "ServerTimeoutPeriodInMinutes": "7",
"ServerCleanupIntervalInMinutes": "1", "ServerCleanupIntervalInMinutes": "1",
"MaxServerCount": 1000, "MaxServerCount": 1000,
"MaxServersPerIp": 5, "MaxServersPerIp": 5,
"DiscordUri": "https://discord.gg/Avj4azU", "DiscordUri": "https://discord.gg/Avj4azU",
"BlobConnectionString": "", "BlobConnectionString": "",
"CrashBlobContainerName": "crashes" "CrashBlobContainerName": "crashes"

File diff suppressed because it is too large Load Diff