├── CommandAPIClient
├── obj
│ ├── Debug
│ │ └── netcoreapp3.1
│ │ │ ├── CommandAPIClient.csproj.CopyComplete
│ │ │ ├── CommandAPIClient.AssemblyInfoInputs.cache
│ │ │ ├── CommandAPIClient.genruntimeconfig.cache
│ │ │ ├── CommandAPIClient.csproj.CoreCompileInputs.cache
│ │ │ ├── CommandAPIClient
│ │ │ ├── CommandAPIClient.dll
│ │ │ ├── CommandAPIClient.exe
│ │ │ ├── CommandAPIClient.pdb
│ │ │ ├── CommandAPIClient.assets.cache
│ │ │ ├── CommandAPIClient.csprojAssemblyReference.cache
│ │ │ ├── .NETCoreApp,Version=v3.1.AssemblyAttributes.cs
│ │ │ ├── CommandAPIClient.AssemblyInfo.cs
│ │ │ └── CommandAPIClient.csproj.FileListAbsolute.txt
│ ├── CommandAPIClient.csproj.nuget.g.targets
│ ├── CommandAPIClient.csproj.nuget.g.props
│ ├── CommandAPIClient.csproj.nuget.dgspec.json
│ └── project.nuget.cache
├── bin
│ └── Debug
│ │ └── netcoreapp3.1
│ │ ├── CommandAPIClient.dll
│ │ ├── CommandAPIClient.exe
│ │ ├── CommandAPIClient.pdb
│ │ ├── Microsoft.Identity.Client.dll
│ │ ├── Microsoft.Extensions.Primitives.dll
│ │ ├── Microsoft.Extensions.Configuration.dll
│ │ ├── Microsoft.Extensions.Configuration.Json.dll
│ │ ├── Microsoft.Extensions.FileSystemGlobbing.dll
│ │ ├── Microsoft.Extensions.Configuration.Binder.dll
│ │ ├── CommandAPIClient.runtimeconfig.json
│ │ ├── Microsoft.Extensions.FileProviders.Physical.dll
│ │ ├── Microsoft.Extensions.Configuration.Abstractions.dll
│ │ ├── Microsoft.Extensions.FileProviders.Abstractions.dll
│ │ ├── Microsoft.Extensions.Configuration.FileExtensions.dll
│ │ ├── CommandAPIClient.runtimeconfig.dev.json
│ │ └── CommandAPIClient.deps.json
├── appsettings.json
├── CommandAPIClient.csproj
├── AuthConfig.cs
├── .vscode
│ ├── launch.json
│ └── tasks.json
└── Program.cs
├── .gitattributes
├── 9781484262542.jpg
├── CommandAPISolution
├── src
│ └── CommandAPI
│ │ ├── appsettings.json
│ │ ├── Dtos
│ │ ├── CommandReadDto.cs
│ │ ├── CommandCreateDto.cs
│ │ └── CommandUpdateDto.cs
│ │ ├── appsettings.Development.json
│ │ ├── Data
│ │ ├── CommandContext.cs
│ │ ├── ICommandAPIRepo.cs
│ │ ├── SqlCommandAPIRepo.cs
│ │ └── MockCommandAPIRepo.cs
│ │ ├── Models
│ │ └── Command.cs
│ │ ├── Profiles
│ │ └── CommandsProfile.cs
│ │ ├── Properties
│ │ └── launchSettings.json
│ │ ├── Program.cs
│ │ ├── CommandAPI.csproj
│ │ ├── Migrations
│ │ ├── 20200524224711_AddCommandsToDB.cs
│ │ ├── CommandContextModelSnapshot.cs
│ │ └── 20200524224711_AddCommandsToDB.Designer.cs
│ │ ├── Startup.cs
│ │ └── Controllers
│ │ └── CommandsController.cs
├── .gitignore
├── azure-pipelines.yml
├── .vscode
│ ├── launch.json
│ └── tasks.json
├── test
│ └── CommandAPI.Tests
│ │ ├── CommandAPI.Tests.csproj
│ │ ├── CommandTests.cs
│ │ └── CommandsControllerTests.cs
└── CommandAPISolution.sln
├── README.md
├── Contributing.md
└── LICENSE.txt
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CopyComplete:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/9781484262542.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/9781484262542.jpg
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfoInputs.cache:
--------------------------------------------------------------------------------
1 | 7c7558353174d3baae864bd1a48da8cae824b9a2
2 |
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.genruntimeconfig.cache:
--------------------------------------------------------------------------------
1 | 86c8e15dd33445635927cfaf398408205fd11473
2 |
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CoreCompileInputs.cache:
--------------------------------------------------------------------------------
1 | 887b4607ea5ff3f6ba269a4ae19b990087764611
2 |
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.exe
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.pdb
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.exe
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Identity.Client.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Identity.Client.dll
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.assets.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.assets.cache
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileSystemGlobbing.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileSystemGlobbing.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeOptions": {
3 | "tfm": "netcoreapp3.1",
4 | "framework": {
5 | "name": "Microsoft.NETCore.App",
6 | "version": "3.1.0"
7 | }
8 | }
9 | }
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Apress/complete-asp.net-core-3-api-tutorial/HEAD/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "AllowedHosts": "*"
10 | }
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs:
--------------------------------------------------------------------------------
1 | //
2 | using System;
3 | using System.Reflection;
4 | [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")]
5 |
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.dev.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeOptions": {
3 | "additionalProbingPaths": [
4 | "C:\\Users\\lesja\\.dotnet\\store\\|arch|\\|tfm|",
5 | "C:\\Users\\lesja\\.nuget\\packages",
6 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
7 | ]
8 | }
9 | }
--------------------------------------------------------------------------------
/CommandAPIClient/obj/CommandAPIClient.csproj.nuget.g.targets:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
5 |
6 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Dtos/CommandReadDto.cs:
--------------------------------------------------------------------------------
1 | namespace CommandAPI.Dtos
2 | {
3 | public class CommandReadDto
4 | {
5 | public int Id {get; set;}
6 |
7 | public string HowTo {get; set;}
8 |
9 | public string Platform {get; set;}
10 |
11 | public string CommandLine {get; set;}
12 | }
13 | }
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "Logging": {
3 | "LogLevel": {
4 | "Default": "Information",
5 | "Microsoft": "Warning",
6 | "Microsoft.Hosting.Lifetime": "Information"
7 | }
8 | },
9 | "ConnectionStrings": {
10 | "PostgreSqlConnection":"Host=localhost;Port=5432;Database=CmdAPI;Pooling=true;"
11 | }
12 | }
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/CommandAPIClient/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "Instance": "https://login.microsoftonline.com/{0}",
3 | "TenantId": "eea3aec8-2537-43fb-b476-2549abbc080d",
4 | "ClientId": "3371ecb2-c14d-474b-a1f8-f12d3e0e882c",
5 | "ClientSecret": "RFjRqDeI4t90DrNRkN~Q2Ewf4yKW8.K_S-",
6 | "BaseAddress": "https://localhost:5001/api/Commands/1",
7 | "ResourceId": "api://614c75ea-6b39-4bf4-b400-7a60bc3aa5a6/.default"
8 | }
9 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Data/CommandContext.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.EntityFrameworkCore;
2 | using CommandAPI.Models;
3 |
4 | namespace CommandAPI.Data
5 | {
6 | public class CommandContext : DbContext
7 | {
8 | public CommandContext(DbContextOptions options) : base(options)
9 | {
10 |
11 | }
12 |
13 | public DbSet CommandItems {get; set;}
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Dtos/CommandCreateDto.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel.DataAnnotations;
2 |
3 | namespace CommandAPI.Dtos
4 | {
5 | public class CommandCreateDto
6 | {
7 | [Required]
8 | [MaxLength(250)]
9 | public string HowTo {get; set;}
10 |
11 | [Required]
12 | public string Platform {get; set;}
13 |
14 | [Required]
15 | public string CommandLine {get; set;}
16 | }
17 | }
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Dtos/CommandUpdateDto.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel.DataAnnotations;
2 |
3 | namespace CommandAPI.Dtos
4 | {
5 | public class CommandUpdateDto
6 | {
7 | [Required]
8 | [MaxLength(250)]
9 | public string HowTo {get; set;}
10 |
11 | [Required]
12 | public string Platform {get; set;}
13 |
14 | [Required]
15 | public string CommandLine {get; set;}
16 | }
17 | }
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Data/ICommandAPIRepo.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using CommandAPI.Models;
3 |
4 | namespace CommandAPI.Data
5 | {
6 | public interface ICommandAPIRepo
7 | {
8 | bool SaveChanges();
9 |
10 | IEnumerable GetAllCommands();
11 | Command GetCommandById(int id);
12 | void CreateCommand(Command cmd);
13 | void UpdateCommand(Command cmd);
14 | void DeleteCommand(Command cmd);
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Models/Command.cs:
--------------------------------------------------------------------------------
1 | using System.ComponentModel.DataAnnotations;
2 |
3 | namespace CommandAPI.Models
4 | {
5 | public class Command
6 | {
7 | [Key]
8 | [Required]
9 | public int Id {get; set;}
10 |
11 | [Required]
12 | [MaxLength(250)]
13 | public string HowTo {get; set;}
14 |
15 | [Required]
16 | public string Platform {get; set;}
17 |
18 | [Required]
19 | public string CommandLine {get; set;}
20 | }
21 | }
--------------------------------------------------------------------------------
/CommandAPISolution/.gitignore:
--------------------------------------------------------------------------------
1 | *.swp
2 | *.*~
3 | project.lock.json
4 | .DS_Store
5 | *.pyc
6 |
7 | # Visual Studio Code
8 | .VS Code
9 |
10 | # User-specific files
11 | *.suo
12 | *.user
13 | *.userosscache
14 | *.sln.docstates
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | x64/
22 | x86/
23 | build/
24 | bld/
25 | [Bb]in/
26 | [Oo]bj/
27 | msbuild.log
28 | msbuild.err
29 | msbuild.wrn
30 |
31 | # Visual Studio
32 | .vs/
33 |
34 | # Compiled Source
35 | *.com
36 | *.class
37 | *.dll
38 | *.exe
39 | *.o
40 | *.so
41 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Profiles/CommandsProfile.cs:
--------------------------------------------------------------------------------
1 | using AutoMapper;
2 | using CommandAPI.Dtos;
3 | using CommandAPI.Models;
4 |
5 | namespace CommandAPI.Profiles
6 | {
7 | public class CommandsProfile : Profile
8 | {
9 | public CommandsProfile()
10 | {
11 | //Source -> Target
12 | CreateMap();
13 | CreateMap();
14 | CreateMap();
15 | CreateMap();
16 | }
17 | }
18 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Apress Source Code
2 |
3 | This repository accompanies [*The Complete ASP.NET Core 3 API Tutorial*](https://www.apress.com/9781484262542) by Les Jackson (Apress, 2020).
4 |
5 | [comment]: #cover
6 | 
7 |
8 | Download the files as a zip using the green button, or clone the repository to your machine using Git.
9 |
10 | ## Releases
11 |
12 | Release v1.0 corresponds to the code in the published book, without corrections or updates.
13 |
14 | ## Contributions
15 |
16 | See the file Contributing.md for more information on how you can contribute to this repository.
--------------------------------------------------------------------------------
/CommandAPIClient/CommandAPIClient.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Exe
5 | netcoreapp3.1
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/Contributing.md:
--------------------------------------------------------------------------------
1 | # Contributing to Apress Source Code
2 |
3 | Copyright for Apress source code belongs to the author(s). However, under fair use you are encouraged to fork and contribute minor corrections and updates for the benefit of the author(s) and other readers.
4 |
5 | ## How to Contribute
6 |
7 | 1. Make sure you have a GitHub account.
8 | 2. Fork the repository for the relevant book.
9 | 3. Create a new branch on which to make your change, e.g.
10 | `git checkout -b my_code_contribution`
11 | 4. Commit your change. Include a commit message describing the correction. Please note that if your commit message is not clear, the correction will not be accepted.
12 | 5. Submit a pull request.
13 |
14 | Thank you for your contribution!
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "iisSettings": {
3 | "windowsAuthentication": false,
4 | "anonymousAuthentication": true,
5 | "iisExpress": {
6 | "applicationUrl": "http://localhost:10197",
7 | "sslPort": 44339
8 | }
9 | },
10 | "profiles": {
11 | "IIS Express": {
12 | "commandName": "IISExpress",
13 | "launchBrowser": true,
14 | "environmentVariables": {
15 | "ASPNETCORE_ENVIRONMENT": "Development"
16 | }
17 | },
18 | "CommandAPI": {
19 | "commandName": "Project",
20 | "launchBrowser": true,
21 | "applicationUrl": "https://localhost:5001;http://localhost:5000",
22 | "environmentVariables": {
23 | "ASPNETCORE_ENVIRONMENT": "Development"
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using Microsoft.AspNetCore.Hosting;
6 | using Microsoft.Extensions.Configuration;
7 | using Microsoft.Extensions.Hosting;
8 | using Microsoft.Extensions.Logging;
9 |
10 | namespace CommandAPI
11 | {
12 | public class Program
13 | {
14 | public static void Main(string[] args)
15 | {
16 | CreateHostBuilder(args).Build().Run();
17 | }
18 |
19 | public static IHostBuilder CreateHostBuilder(string[] args) =>
20 | Host.CreateDefaultBuilder(args)
21 | .ConfigureWebHostDefaults(webBuilder =>
22 | {
23 | webBuilder.UseStartup();
24 | });
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/CommandAPISolution/azure-pipelines.yml:
--------------------------------------------------------------------------------
1 | trigger:
2 | - master
3 |
4 | pool:
5 | vmImage: 'ubuntu-latest'
6 |
7 | variables:
8 | buildConfiguration: 'Release'
9 |
10 | steps:
11 | - task: UseDotNet@2
12 | - script: dotnet build --configuration $(buildConfiguration)
13 | displayName: 'dotnet build $(buildConfiguration)'
14 | - task: DotNetCoreCLI@2
15 | displayName: 'dotnet test'
16 | inputs:
17 | command: test
18 | projects: '**/*Tests/*.csproj'
19 | testRunTitle: 'xUNit Test Run'
20 |
21 | - task: DotNetCoreCLI@2
22 | displayName: 'dotnet publish'
23 | inputs:
24 | command: publish
25 | publishWebProjects: false
26 | projects: 'src/CommandAPI/*.csproj'
27 | arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
28 |
29 | - task: PublishBuildArtifacts@1
30 | displayName: 'publish artifacts'
31 |
32 |
--------------------------------------------------------------------------------
/CommandAPISolution/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": ".NET Core Launch (console)",
9 | "type": "coreclr",
10 | "request": "launch",
11 | "preLaunchTask": "build",
12 | "program": "${workspaceFolder}/test/CommandAPI.Tests/bin/Debug/netcoreapp3.1/CommandAPI.Tests.dll",
13 | "args": [],
14 | "cwd": "${workspaceFolder}/test/CommandAPI.Tests",
15 | "console": "internalConsole",
16 | "stopAtEntry": false
17 | },
18 | {
19 | "name": ".NET Core Attach",
20 | "type": "coreclr",
21 | "request": "attach",
22 | "processId": "${command:pickProcess}"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/CommandAPIClient/AuthConfig.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using System.Globalization;
4 | using Microsoft.Extensions.Configuration;
5 |
6 | namespace CommandAPIClient
7 | {
8 | public class AuthConfig
9 | {
10 | public string Instance {get; set;} =
11 | "https://login.microsoftonline.com/{0}";
12 | public string TenantId {get; set;}
13 | public string ClientId {get; set;}
14 | public string Authority
15 | {
16 | get
17 | {
18 | return String.Format(CultureInfo.InvariantCulture,
19 | Instance, TenantId);
20 | }
21 | }
22 | public string ClientSecret {get; set;}
23 | public string BaseAddress {get; set;}
24 | public string ResourceID {get; set;}
25 |
26 | public static AuthConfig ReadFromJsonFile(string path)
27 | {
28 | IConfiguration Configuration;
29 |
30 | var builder = new ConfigurationBuilder()
31 | .SetBasePath(Directory.GetCurrentDirectory())
32 | .AddJsonFile(path);
33 |
34 | Configuration = builder.Build();
35 |
36 | return Configuration.Get();
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | using System;
12 | using System.Reflection;
13 |
14 | [assembly: System.Reflection.AssemblyCompanyAttribute("CommandAPIClient")]
15 | [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
16 | [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
17 | [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
18 | [assembly: System.Reflection.AssemblyProductAttribute("CommandAPIClient")]
19 | [assembly: System.Reflection.AssemblyTitleAttribute("CommandAPIClient")]
20 | [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
21 |
22 | // Generated by the MSBuild WriteCodeFragment class.
23 |
24 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/CommandAPI.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp3.1
5 | cabd2435-bee0-47b0-8990-0889111a5d36
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | runtime; build; native; contentfiles; analyzers; buildtransitive
16 | all
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/CommandAPISolution/test/CommandAPI.Tests/CommandAPI.Tests.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netcoreapp3.1
5 |
6 | false
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/CommandAPIClient/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to find out which attributes exist for C# debugging
3 | // Use hover for the description of the existing attributes
4 | // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": ".NET Core Launch (console)",
9 | "type": "coreclr",
10 | "request": "launch",
11 | "preLaunchTask": "build",
12 | // If you have changed target frameworks, make sure to update the program path.
13 | "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/CommandAPIClient.dll",
14 | "args": [],
15 | "cwd": "${workspaceFolder}",
16 | // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
17 | "console": "internalConsole",
18 | "stopAtEntry": false
19 | },
20 | {
21 | "name": ".NET Core Attach",
22 | "type": "coreclr",
23 | "request": "attach",
24 | "processId": "${command:pickProcess}"
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/CommandAPIClient/obj/CommandAPIClient.csproj.nuget.g.props:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | True
5 | NuGet
6 | $(MSBuildThisFileDirectory)project.assets.json
7 | $(UserProfile)\.nuget\packages\
8 | C:\Users\lesja\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder
9 | PackageReference
10 | 5.6.0
11 |
12 |
13 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
14 |
15 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Migrations/20200524224711_AddCommandsToDB.cs:
--------------------------------------------------------------------------------
1 | using Microsoft.EntityFrameworkCore.Migrations;
2 | using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
3 |
4 | namespace CommandAPI.Migrations
5 | {
6 | public partial class AddCommandsToDB : Migration
7 | {
8 | protected override void Up(MigrationBuilder migrationBuilder)
9 | {
10 | migrationBuilder.CreateTable(
11 | name: "CommandItems",
12 | columns: table => new
13 | {
14 | Id = table.Column(nullable: false)
15 | .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
16 | HowTo = table.Column(maxLength: 250, nullable: false),
17 | Platform = table.Column(nullable: false),
18 | CommandLine = table.Column(nullable: false)
19 | },
20 | constraints: table =>
21 | {
22 | table.PrimaryKey("PK_CommandItems", x => x.Id);
23 | });
24 | }
25 |
26 | protected override void Down(MigrationBuilder migrationBuilder)
27 | {
28 | migrationBuilder.DropTable(
29 | name: "CommandItems");
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/CommandAPIClient/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "build",
6 | "command": "dotnet",
7 | "type": "process",
8 | "args": [
9 | "build",
10 | "${workspaceFolder}/CommandAPIClient.csproj",
11 | "/property:GenerateFullPaths=true",
12 | "/consoleloggerparameters:NoSummary"
13 | ],
14 | "problemMatcher": "$msCompile"
15 | },
16 | {
17 | "label": "publish",
18 | "command": "dotnet",
19 | "type": "process",
20 | "args": [
21 | "publish",
22 | "${workspaceFolder}/CommandAPIClient.csproj",
23 | "/property:GenerateFullPaths=true",
24 | "/consoleloggerparameters:NoSummary"
25 | ],
26 | "problemMatcher": "$msCompile"
27 | },
28 | {
29 | "label": "watch",
30 | "command": "dotnet",
31 | "type": "process",
32 | "args": [
33 | "watch",
34 | "run",
35 | "${workspaceFolder}/CommandAPIClient.csproj",
36 | "/property:GenerateFullPaths=true",
37 | "/consoleloggerparameters:NoSummary"
38 | ],
39 | "problemMatcher": "$msCompile"
40 | }
41 | ]
42 | }
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Freeware License, some rights reserved
2 |
3 | Copyright (c) 2020 Les Jackson
4 |
5 | Permission is hereby granted, free of charge, to anyone obtaining a copy
6 | of this software and associated documentation files (the "Software"),
7 | to work with the Software within the limits of freeware distribution and fair use.
8 | This includes the rights to use, copy, and modify the Software for personal use.
9 | Users are also allowed and encouraged to submit corrections and modifications
10 | to the Software for the benefit of other users.
11 |
12 | It is not allowed to reuse, modify, or redistribute the Software for
13 | commercial use in any way, or for a user’s educational materials such as books
14 | or blog articles without prior permission from the copyright holder.
15 |
16 | The above copyright notice and this permission notice need to be included
17 | in all copies or substantial portions of the software.
18 |
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | AUTHORS OR COPYRIGHT HOLDERS OR APRESS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 | SOFTWARE.
26 |
27 |
28 |
--------------------------------------------------------------------------------
/CommandAPISolution/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "build",
6 | "command": "dotnet",
7 | "type": "process",
8 | "args": [
9 | "build",
10 | "${workspaceFolder}/test/CommandAPI.Tests/CommandAPI.Tests.csproj",
11 | "/property:GenerateFullPaths=true",
12 | "/consoleloggerparameters:NoSummary"
13 | ],
14 | "problemMatcher": "$msCompile"
15 | },
16 | {
17 | "label": "publish",
18 | "command": "dotnet",
19 | "type": "process",
20 | "args": [
21 | "publish",
22 | "${workspaceFolder}/test/CommandAPI.Tests/CommandAPI.Tests.csproj",
23 | "/property:GenerateFullPaths=true",
24 | "/consoleloggerparameters:NoSummary"
25 | ],
26 | "problemMatcher": "$msCompile"
27 | },
28 | {
29 | "label": "watch",
30 | "command": "dotnet",
31 | "type": "process",
32 | "args": [
33 | "watch",
34 | "run",
35 | "${workspaceFolder}/test/CommandAPI.Tests/CommandAPI.Tests.csproj",
36 | "/property:GenerateFullPaths=true",
37 | "/consoleloggerparameters:NoSummary"
38 | ],
39 | "problemMatcher": "$msCompile"
40 | }
41 | ]
42 | }
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Data/SqlCommandAPIRepo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using CommandAPI.Models;
5 |
6 | namespace CommandAPI.Data
7 | {
8 | public class SqlCommandAPIRepo : ICommandAPIRepo
9 | {
10 | private readonly CommandContext _context;
11 |
12 | public SqlCommandAPIRepo(CommandContext context)
13 | {
14 | _context = context;
15 | }
16 |
17 | public void CreateCommand(Command cmd)
18 | {
19 | if(cmd == null)
20 | {
21 | throw new ArgumentNullException(nameof(cmd));
22 | }
23 |
24 | _context.CommandItems.Add(cmd);
25 | }
26 |
27 | public void DeleteCommand(Command cmd)
28 | {
29 | if(cmd == null)
30 | {
31 | throw new ArgumentNullException(nameof(cmd));
32 | }
33 | _context.CommandItems.Remove(cmd);
34 | }
35 |
36 | public IEnumerable GetAllCommands()
37 | {
38 | return _context.CommandItems.ToList();
39 | }
40 |
41 | public Command GetCommandById(int id)
42 | {
43 | return _context.CommandItems.FirstOrDefault(p => p.Id == id);
44 | }
45 |
46 | public bool SaveChanges()
47 | {
48 | return (_context.SaveChanges() >= 0);
49 | }
50 |
51 | public void UpdateCommand(Command cmd)
52 | {
53 | //This does nothing
54 | }
55 | }
56 | }
--------------------------------------------------------------------------------
/CommandAPIClient/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading.Tasks;
3 | using Microsoft.Identity.Client;
4 |
5 |
6 | namespace CommandAPIClient
7 | {
8 | class Program
9 | {
10 | static void Main(string[] args)
11 | {
12 | Console.WriteLine("Making the call...");
13 | RunAsync().GetAwaiter().GetResult();
14 | }
15 |
16 | private static async Task RunAsync()
17 | {
18 | AuthConfig config = AuthConfig.ReadFromJsonFile("appsettings.json");
19 |
20 | IConfidentialClientApplication app;
21 |
22 | app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
23 | .WithClientSecret(config.ClientSecret)
24 | .WithAuthority(new Uri(config.Authority))
25 | .Build();
26 |
27 | string[] ResourceIds = new string[] { config.ResourceID };
28 |
29 | AuthenticationResult result = null;
30 | try
31 | {
32 | result = await app.AcquireTokenForClient(ResourceIds).ExecuteAsync();
33 | Console.ForegroundColor = ConsoleColor.Green;
34 | Console.WriteLine("Token acquired \n");
35 | Console.WriteLine(result.AccessToken);
36 | Console.ResetColor();
37 | }
38 | catch (MsalClientException ex)
39 | {
40 | Console.ForegroundColor = ConsoleColor.Red;
41 | Console.WriteLine(ex.Message);
42 | Console.ResetColor();
43 | }
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/CommandAPISolution/test/CommandAPI.Tests/CommandTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xunit;
3 | using CommandAPI.Models;
4 |
5 | namespace CommandAPI.Tests
6 | {
7 | public class CommandTests : IDisposable
8 | {
9 | Command testCommand;
10 |
11 | public CommandTests()
12 | {
13 | testCommand = new Command
14 | {
15 | HowTo = "Do something",
16 | Platform = "Some platform",
17 | CommandLine = "Some commandline"
18 | };
19 | }
20 |
21 | public void Dispose()
22 | {
23 | testCommand = null;
24 | }
25 |
26 |
27 | [Fact]
28 | public void CanChangeHowTo()
29 | {
30 | //Arrange
31 |
32 | //Act
33 | testCommand.HowTo = "Execute Unit Tests";
34 |
35 | //Assert
36 | Assert.Equal("Execute Unit Tests", testCommand.HowTo);
37 |
38 | }
39 |
40 | [Fact]
41 | public void CanChangePlatform()
42 | {
43 | //Arrange
44 |
45 | //Act
46 | testCommand.Platform = "xUnit";
47 |
48 | //Assert
49 | Assert.Equal("xUnit", testCommand.Platform);
50 |
51 | }
52 |
53 | [Fact]
54 | public void CanChangeCommandLine()
55 | {
56 | //Arrange
57 |
58 | //Act
59 | testCommand.CommandLine = "dotnet test";
60 |
61 | //Assert
62 | Assert.Equal("dotnet test", testCommand.CommandLine);
63 |
64 | }
65 |
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Data/MockCommandAPIRepo.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using CommandAPI.Models;
3 |
4 | namespace CommandAPI.Data
5 | {
6 | public class MockCommandAPIRepo : ICommandAPIRepo
7 | {
8 | public void CreateCommand(Command cmd)
9 | {
10 | throw new System.NotImplementedException();
11 | }
12 |
13 | public void DeleteCommand(Command cmd)
14 | {
15 | throw new System.NotImplementedException();
16 | }
17 |
18 | public IEnumerable GetAllCommands()
19 | {
20 | var commands = new List
21 | {
22 | new Command{
23 | Id=0, HowTo="How to genrate a migration",
24 | CommandLine="dotnet ef migrations add ",
25 | Platform=".Net Core EF"},
26 | new Command{
27 | Id=1, HowTo="Run Migrations",
28 | CommandLine="dotnet ef database update",
29 | Platform=".Net Core EF"},
30 | new Command{
31 | Id=2, HowTo="List active migrations",
32 | CommandLine="dotnet ef migrations list",
33 | Platform=".Net Core EF"}
34 | };
35 |
36 | return commands;
37 | }
38 |
39 | public Command GetCommandById(int id)
40 | {
41 | return new Command{
42 | Id=0, HowTo="How to genrate a migration",
43 | CommandLine="dotnet ef migrations add ",
44 | Platform=".Net Core EF"};
45 | }
46 |
47 | public bool SaveChanges()
48 | {
49 | throw new System.NotImplementedException();
50 | }
51 |
52 | public void UpdateCommand(Command cmd)
53 | {
54 | throw new System.NotImplementedException();
55 | }
56 | }
57 | }
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Migrations/CommandContextModelSnapshot.cs:
--------------------------------------------------------------------------------
1 | //
2 | using CommandAPI.Data;
3 | using Microsoft.EntityFrameworkCore;
4 | using Microsoft.EntityFrameworkCore.Infrastructure;
5 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
6 | using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
7 |
8 | namespace CommandAPI.Migrations
9 | {
10 | [DbContext(typeof(CommandContext))]
11 | partial class CommandContextModelSnapshot : ModelSnapshot
12 | {
13 | protected override void BuildModel(ModelBuilder modelBuilder)
14 | {
15 | #pragma warning disable 612, 618
16 | modelBuilder
17 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
18 | .HasAnnotation("ProductVersion", "3.1.4")
19 | .HasAnnotation("Relational:MaxIdentifierLength", 63);
20 |
21 | modelBuilder.Entity("CommandAPI.Models.Command", b =>
22 | {
23 | b.Property("Id")
24 | .ValueGeneratedOnAdd()
25 | .HasColumnType("integer")
26 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
27 |
28 | b.Property("CommandLine")
29 | .IsRequired()
30 | .HasColumnType("text");
31 |
32 | b.Property("HowTo")
33 | .IsRequired()
34 | .HasColumnType("character varying(250)")
35 | .HasMaxLength(250);
36 |
37 | b.Property("Platform")
38 | .IsRequired()
39 | .HasColumnType("text");
40 |
41 | b.HasKey("Id");
42 |
43 | b.ToTable("CommandItems");
44 | });
45 | #pragma warning restore 612, 618
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Migrations/20200524224711_AddCommandsToDB.Designer.cs:
--------------------------------------------------------------------------------
1 | //
2 | using CommandAPI.Data;
3 | using Microsoft.EntityFrameworkCore;
4 | using Microsoft.EntityFrameworkCore.Infrastructure;
5 | using Microsoft.EntityFrameworkCore.Migrations;
6 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
7 | using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
8 |
9 | namespace CommandAPI.Migrations
10 | {
11 | [DbContext(typeof(CommandContext))]
12 | [Migration("20200524224711_AddCommandsToDB")]
13 | partial class AddCommandsToDB
14 | {
15 | protected override void BuildTargetModel(ModelBuilder modelBuilder)
16 | {
17 | #pragma warning disable 612, 618
18 | modelBuilder
19 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
20 | .HasAnnotation("ProductVersion", "3.1.4")
21 | .HasAnnotation("Relational:MaxIdentifierLength", 63);
22 |
23 | modelBuilder.Entity("CommandAPI.Models.Command", b =>
24 | {
25 | b.Property("Id")
26 | .ValueGeneratedOnAdd()
27 | .HasColumnType("integer")
28 | .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
29 |
30 | b.Property("CommandLine")
31 | .IsRequired()
32 | .HasColumnType("text");
33 |
34 | b.Property("HowTo")
35 | .IsRequired()
36 | .HasColumnType("character varying(250)")
37 | .HasMaxLength(250);
38 |
39 | b.Property("Platform")
40 | .IsRequired()
41 | .HasColumnType("text");
42 |
43 | b.HasKey("Id");
44 |
45 | b.ToTable("CommandItems");
46 | });
47 | #pragma warning restore 612, 618
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Startup.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using CommandAPI.Data;
6 | using Microsoft.AspNetCore.Builder;
7 | using Microsoft.AspNetCore.Hosting;
8 | using Microsoft.AspNetCore.Http;
9 | using Microsoft.Extensions.Configuration;
10 | using Microsoft.Extensions.DependencyInjection;
11 | using Microsoft.Extensions.Hosting;
12 | using Microsoft.EntityFrameworkCore;
13 | using Npgsql;
14 | using AutoMapper;
15 | using Newtonsoft.Json.Serialization;
16 | using Microsoft.AspNetCore.Authentication.JwtBearer;
17 |
18 | namespace CommandAPI
19 | {
20 | public class Startup
21 | {
22 | public IConfiguration Configuration {get;}
23 | public Startup(IConfiguration configuration)
24 | {
25 | Configuration = configuration;
26 | }
27 |
28 | public void ConfigureServices(IServiceCollection services)
29 | {
30 | var builder = new NpgsqlConnectionStringBuilder();
31 | builder.ConnectionString =
32 | Configuration.GetConnectionString("PostgreSqlConnection");
33 | builder.Username = Configuration["UserID"];
34 | builder.Password = Configuration["Password"];
35 |
36 | services.AddDbContext(opt => opt.UseNpgsql(builder.ConnectionString));
37 |
38 | services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(opt =>
39 | {
40 | opt.Audience = Configuration["ResourceID"];
41 | opt.Authority = $"{Configuration["Instance"]}{Configuration["TenantId"]}";
42 | });
43 |
44 | services.AddControllers().AddNewtonsoftJson(s => {
45 | s.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
46 | });
47 |
48 | services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
49 |
50 | services.AddScoped();
51 | }
52 |
53 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env, CommandContext context)
54 | {
55 | context.Database.Migrate();
56 | if (env.IsDevelopment())
57 | {
58 | app.UseDeveloperExceptionPage();
59 | }
60 |
61 | app.UseRouting();
62 |
63 | app.UseAuthentication();
64 | app.UseAuthorization();
65 |
66 | app.UseEndpoints(endpoints =>
67 | {
68 | endpoints.MapControllers();
69 | });
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/CommandAPIClient/obj/CommandAPIClient.csproj.nuget.dgspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "format": 1,
3 | "restore": {
4 | "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj": {}
5 | },
6 | "projects": {
7 | "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj": {
8 | "version": "1.0.0",
9 | "restore": {
10 | "projectUniqueName": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj",
11 | "projectName": "CommandAPIClient",
12 | "projectPath": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj",
13 | "packagesPath": "C:\\Users\\lesja\\.nuget\\packages\\",
14 | "outputPath": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\obj\\",
15 | "projectStyle": "PackageReference",
16 | "fallbackFolders": [
17 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder"
18 | ],
19 | "configFilePaths": [
20 | "C:\\Users\\lesja\\AppData\\Roaming\\NuGet\\NuGet.Config",
21 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
22 | ],
23 | "originalTargetFrameworks": [
24 | "netcoreapp3.1"
25 | ],
26 | "sources": {
27 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
28 | "https://api.nuget.org/v3/index.json": {}
29 | },
30 | "frameworks": {
31 | "netcoreapp3.1": {
32 | "projectReferences": {}
33 | }
34 | },
35 | "warningProperties": {
36 | "warnAsError": [
37 | "NU1605"
38 | ]
39 | }
40 | },
41 | "frameworks": {
42 | "netcoreapp3.1": {
43 | "dependencies": {
44 | "Microsoft.Extensions.Configuration": {
45 | "target": "Package",
46 | "version": "[3.1.5, )"
47 | },
48 | "Microsoft.Extensions.Configuration.Binder": {
49 | "target": "Package",
50 | "version": "[3.1.5, )"
51 | },
52 | "Microsoft.Extensions.Configuration.Json": {
53 | "target": "Package",
54 | "version": "[3.1.5, )"
55 | },
56 | "Microsoft.Identity.Client": {
57 | "target": "Package",
58 | "version": "[4.15.0, )"
59 | }
60 | },
61 | "imports": [
62 | "net461",
63 | "net462",
64 | "net47",
65 | "net471",
66 | "net472",
67 | "net48"
68 | ],
69 | "assetTargetFallback": true,
70 | "warn": true,
71 | "frameworkReferences": {
72 | "Microsoft.NETCore.App": {
73 | "privateAssets": "all"
74 | }
75 | },
76 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\3.1.301\\RuntimeIdentifierGraph.json"
77 | }
78 | }
79 | }
80 | }
81 | }
--------------------------------------------------------------------------------
/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.FileListAbsolute.txt:
--------------------------------------------------------------------------------
1 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.exe
2 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.deps.json
3 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.json
4 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.runtimeconfig.dev.json
5 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.dll
6 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.pdb
7 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.dll
8 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll
9 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll
10 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll
11 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll
12 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll
13 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll
14 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.FileSystemGlobbing.dll
15 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Extensions.Primitives.dll
16 | D:/APITutorial/NET Core 3.1/CommandAPIClient/bin/Debug/netcoreapp3.1/Microsoft.Identity.Client.dll
17 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache
18 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfoInputs.cache
19 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfo.cs
20 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CoreCompileInputs.cache
21 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CopyComplete
22 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll
23 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb
24 | D:/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.genruntimeconfig.cache
25 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csprojAssemblyReference.cache
26 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfoInputs.cache
27 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.AssemblyInfo.cs
28 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.csproj.CoreCompileInputs.cache
29 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.dll
30 | /mnt/d/APITutorial/NET Core 3.1/CommandAPIClient/obj/Debug/netcoreapp3.1/CommandAPIClient.pdb
31 |
--------------------------------------------------------------------------------
/CommandAPISolution/CommandAPISolution.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 15
4 | VisualStudioVersion = 15.0.26124.0
5 | MinimumVisualStudioVersion = 15.0.26124.0
6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B6E4FE01-9307-4F3F-BEFE-EC991E035353}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandAPI", "src\CommandAPI\CommandAPI.csproj", "{9845AF6A-A083-44AF-B483-C853467CC662}"
9 | EndProject
10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{48FF3F06-F3B1-4E65-A2E6-A5E52999C6B7}"
11 | EndProject
12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommandAPI.Tests", "test\CommandAPI.Tests\CommandAPI.Tests.csproj", "{57755B67-D6D1-43A5-A8AF-4C41FDC598EF}"
13 | EndProject
14 | Global
15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
16 | Debug|Any CPU = Debug|Any CPU
17 | Debug|x64 = Debug|x64
18 | Debug|x86 = Debug|x86
19 | Release|Any CPU = Release|Any CPU
20 | Release|x64 = Release|x64
21 | Release|x86 = Release|x86
22 | EndGlobalSection
23 | GlobalSection(SolutionProperties) = preSolution
24 | HideSolutionNode = FALSE
25 | EndGlobalSection
26 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
27 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
28 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|Any CPU.Build.0 = Debug|Any CPU
29 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x64.ActiveCfg = Debug|Any CPU
30 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x64.Build.0 = Debug|Any CPU
31 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x86.ActiveCfg = Debug|Any CPU
32 | {9845AF6A-A083-44AF-B483-C853467CC662}.Debug|x86.Build.0 = Debug|Any CPU
33 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|Any CPU.ActiveCfg = Release|Any CPU
34 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|Any CPU.Build.0 = Release|Any CPU
35 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x64.ActiveCfg = Release|Any CPU
36 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x64.Build.0 = Release|Any CPU
37 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x86.ActiveCfg = Release|Any CPU
38 | {9845AF6A-A083-44AF-B483-C853467CC662}.Release|x86.Build.0 = Release|Any CPU
39 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
40 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
41 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x64.ActiveCfg = Debug|Any CPU
42 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x64.Build.0 = Debug|Any CPU
43 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x86.ActiveCfg = Debug|Any CPU
44 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Debug|x86.Build.0 = Debug|Any CPU
45 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
46 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|Any CPU.Build.0 = Release|Any CPU
47 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x64.ActiveCfg = Release|Any CPU
48 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x64.Build.0 = Release|Any CPU
49 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x86.ActiveCfg = Release|Any CPU
50 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF}.Release|x86.Build.0 = Release|Any CPU
51 | EndGlobalSection
52 | GlobalSection(NestedProjects) = preSolution
53 | {9845AF6A-A083-44AF-B483-C853467CC662} = {B6E4FE01-9307-4F3F-BEFE-EC991E035353}
54 | {57755B67-D6D1-43A5-A8AF-4C41FDC598EF} = {48FF3F06-F3B1-4E65-A2E6-A5E52999C6B7}
55 | EndGlobalSection
56 | EndGlobal
57 |
--------------------------------------------------------------------------------
/CommandAPISolution/src/CommandAPI/Controllers/CommandsController.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using AutoMapper;
3 | using CommandAPI.Dtos;
4 | using CommandAPI.Data;
5 | using CommandAPI.Models;
6 | using System.Linq;
7 | using Microsoft.AspNetCore.Mvc;
8 | using Microsoft.AspNetCore.JsonPatch;
9 | using Microsoft.AspNetCore.Authorization;
10 |
11 | namespace CommandAPI.Controllers
12 | {
13 | [Route("api/[controller]")]
14 | [ApiController]
15 | public class CommandsController : ControllerBase
16 | {
17 |
18 | private readonly ICommandAPIRepo _repository;
19 | private readonly IMapper _mapper;
20 |
21 | public CommandsController(ICommandAPIRepo repository, IMapper mapper)
22 | {
23 | _repository = repository;
24 | _mapper = mapper;
25 | }
26 |
27 |
28 | //GET api/commands
29 |
30 | [HttpGet]
31 | public ActionResult> GetAllCommands()
32 | {
33 | var commandItems = _repository.GetAllCommands();
34 |
35 | return Ok(_mapper.Map>(commandItems));
36 | }
37 |
38 | //GET api/commands/{id}
39 | [Authorize] //Apply this attribute to lockdown this ActionResult (or others)
40 | [HttpGet("{id}", Name = "GetCommandById")]
41 | public ActionResult GetCommandById(int id)
42 | {
43 | var commandItem = _repository.GetCommandById(id);
44 | if (commandItem == null)
45 | {
46 | return NotFound();
47 | }
48 | return Ok(_mapper.Map(commandItem));
49 | }
50 |
51 | //POST api/commands/
52 | [HttpPost]
53 | public ActionResult CreateCommand(CommandCreateDto commandCreateDto)
54 | {
55 | var commandModel = _mapper.Map(commandCreateDto);
56 | _repository.CreateCommand(commandModel);
57 | _repository.SaveChanges();
58 |
59 | var commandReadDto = _mapper.Map(commandModel);
60 |
61 | return CreatedAtRoute(nameof(GetCommandById), new { Id = commandReadDto.Id }, commandReadDto);
62 | }
63 |
64 | //PUT api/commands/{id}
65 | [HttpPut("{id}")]
66 | public ActionResult UpdateCommand(int id, CommandUpdateDto commandUpdateDto)
67 | {
68 | var commandModelFromRepo = _repository.GetCommandById(id);
69 | if (commandModelFromRepo == null)
70 | {
71 | return NotFound();
72 | }
73 | _mapper.Map(commandUpdateDto, commandModelFromRepo);
74 |
75 | _repository.UpdateCommand(commandModelFromRepo);
76 |
77 | _repository.SaveChanges();
78 |
79 | return NoContent();
80 | }
81 |
82 | //PATCH api/commands/{id}
83 | [HttpPatch("{id}")]
84 | public ActionResult PartialCommandUpdate(int id, JsonPatchDocument patchDoc)
85 | {
86 | var commandModelFromRepo = _repository.GetCommandById(id);
87 | if(commandModelFromRepo == null)
88 | {
89 | return NotFound();
90 | }
91 |
92 | var commandToPatch = _mapper.Map(commandModelFromRepo);
93 | patchDoc.ApplyTo(commandToPatch, ModelState);
94 |
95 | if(!TryValidateModel(commandToPatch))
96 | {
97 | return ValidationProblem(ModelState);
98 | }
99 |
100 | _mapper.Map(commandToPatch, commandModelFromRepo);
101 |
102 | _repository.UpdateCommand(commandModelFromRepo);
103 |
104 | _repository.SaveChanges();
105 |
106 | return NoContent();
107 | }
108 |
109 | //DELETE api/commands/{id}
110 | [HttpDelete("{id}")]
111 | public ActionResult DeleteCommand(int id)
112 | {
113 | var commandModelFromRepo = _repository.GetCommandById(id);
114 | if(commandModelFromRepo == null)
115 | {
116 | return NotFound();
117 | }
118 | _repository.DeleteCommand(commandModelFromRepo);
119 | _repository.SaveChanges();
120 |
121 | return NoContent();
122 | }
123 | }
124 | }
--------------------------------------------------------------------------------
/CommandAPIClient/obj/project.nuget.cache:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "dgSpecHash": "pEoU7DK2ckkt50SOAc156p8F3q3xno2RS/Y6Bdujdp6rPuV5MRjnJ60eVAvV+HsgyUDctNvJHtP62tP7v6JwSw==",
4 | "success": true,
5 | "projectFilePath": "d:\\APITutorial\\NET Core 3.1\\CommandAPIClient\\CommandAPIClient.csproj",
6 | "expectedPackageFiles": [
7 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.csharp\\4.5.0\\microsoft.csharp.4.5.0.nupkg.sha512",
8 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration\\3.1.5\\microsoft.extensions.configuration.3.1.5.nupkg.sha512",
9 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\3.1.5\\microsoft.extensions.configuration.abstractions.3.1.5.nupkg.sha512",
10 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.binder\\3.1.5\\microsoft.extensions.configuration.binder.3.1.5.nupkg.sha512",
11 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\3.1.5\\microsoft.extensions.configuration.fileextensions.3.1.5.nupkg.sha512",
12 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.configuration.json\\3.1.5\\microsoft.extensions.configuration.json.3.1.5.nupkg.sha512",
13 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\3.1.5\\microsoft.extensions.fileproviders.abstractions.3.1.5.nupkg.sha512",
14 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\3.1.5\\microsoft.extensions.fileproviders.physical.3.1.5.nupkg.sha512",
15 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\3.1.5\\microsoft.extensions.filesystemglobbing.3.1.5.nupkg.sha512",
16 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.extensions.primitives\\3.1.5\\microsoft.extensions.primitives.3.1.5.nupkg.sha512",
17 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.identity.client\\4.15.0\\microsoft.identity.client.4.15.0.nupkg.sha512",
18 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.1\\microsoft.netcore.platforms.1.1.1.nupkg.sha512",
19 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.netcore.targets\\1.1.3\\microsoft.netcore.targets.1.1.3.nupkg.sha512",
20 | "C:\\Users\\lesja\\.nuget\\packages\\microsoft.win32.primitives\\4.3.0\\microsoft.win32.primitives.4.3.0.nupkg.sha512",
21 | "C:\\Users\\lesja\\.nuget\\packages\\runtime.native.system\\4.3.0\\runtime.native.system.4.3.0.nupkg.sha512",
22 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512",
23 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections.concurrent\\4.3.0\\system.collections.concurrent.4.3.0.nupkg.sha512",
24 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections.nongeneric\\4.3.0\\system.collections.nongeneric.4.3.0.nupkg.sha512",
25 | "C:\\Users\\lesja\\.nuget\\packages\\system.collections.specialized\\4.3.0\\system.collections.specialized.4.3.0.nupkg.sha512",
26 | "C:\\Users\\lesja\\.nuget\\packages\\system.componentmodel\\4.3.0\\system.componentmodel.4.3.0.nupkg.sha512",
27 | "C:\\Users\\lesja\\.nuget\\packages\\system.componentmodel.primitives\\4.3.0\\system.componentmodel.primitives.4.3.0.nupkg.sha512",
28 | "C:\\Users\\lesja\\.nuget\\packages\\system.componentmodel.typeconverter\\4.3.0\\system.componentmodel.typeconverter.4.3.0.nupkg.sha512",
29 | "C:\\Users\\lesja\\.nuget\\packages\\system.diagnostics.debug\\4.3.0\\system.diagnostics.debug.4.3.0.nupkg.sha512",
30 | "C:\\Users\\lesja\\.nuget\\packages\\system.diagnostics.tools\\4.3.0\\system.diagnostics.tools.4.3.0.nupkg.sha512",
31 | "C:\\Users\\lesja\\.nuget\\packages\\system.diagnostics.tracing\\4.3.0\\system.diagnostics.tracing.4.3.0.nupkg.sha512",
32 | "C:\\Users\\lesja\\.nuget\\packages\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512",
33 | "C:\\Users\\lesja\\.nuget\\packages\\system.globalization.extensions\\4.3.0\\system.globalization.extensions.4.3.0.nupkg.sha512",
34 | "C:\\Users\\lesja\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512",
35 | "C:\\Users\\lesja\\.nuget\\packages\\system.io.filesystem\\4.3.0\\system.io.filesystem.4.3.0.nupkg.sha512",
36 | "C:\\Users\\lesja\\.nuget\\packages\\system.io.filesystem.primitives\\4.3.0\\system.io.filesystem.primitives.4.3.0.nupkg.sha512",
37 | "C:\\Users\\lesja\\.nuget\\packages\\system.linq\\4.3.0\\system.linq.4.3.0.nupkg.sha512",
38 | "C:\\Users\\lesja\\.nuget\\packages\\system.net.nameresolution\\4.3.0\\system.net.nameresolution.4.3.0.nupkg.sha512",
39 | "C:\\Users\\lesja\\.nuget\\packages\\system.net.primitives\\4.3.0\\system.net.primitives.4.3.0.nupkg.sha512",
40 | "C:\\Users\\lesja\\.nuget\\packages\\system.private.datacontractserialization\\4.3.0\\system.private.datacontractserialization.4.3.0.nupkg.sha512",
41 | "C:\\Users\\lesja\\.nuget\\packages\\system.private.uri\\4.3.2\\system.private.uri.4.3.2.nupkg.sha512",
42 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512",
43 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.emit\\4.3.0\\system.reflection.emit.4.3.0.nupkg.sha512",
44 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512",
45 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512",
46 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.extensions\\4.3.0\\system.reflection.extensions.4.3.0.nupkg.sha512",
47 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512",
48 | "C:\\Users\\lesja\\.nuget\\packages\\system.reflection.typeextensions\\4.3.0\\system.reflection.typeextensions.4.3.0.nupkg.sha512",
49 | "C:\\Users\\lesja\\.nuget\\packages\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512",
50 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512",
51 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512",
52 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512",
53 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512",
54 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.serialization.formatters\\4.3.0\\system.runtime.serialization.formatters.4.3.0.nupkg.sha512",
55 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.serialization.json\\4.3.0\\system.runtime.serialization.json.4.3.0.nupkg.sha512",
56 | "C:\\Users\\lesja\\.nuget\\packages\\system.runtime.serialization.primitives\\4.3.0\\system.runtime.serialization.primitives.4.3.0.nupkg.sha512",
57 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.claims\\4.3.0\\system.security.claims.4.3.0.nupkg.sha512",
58 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.cryptography.primitives\\4.3.0\\system.security.cryptography.primitives.4.3.0.nupkg.sha512",
59 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.principal\\4.3.0\\system.security.principal.4.3.0.nupkg.sha512",
60 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.principal.windows\\4.3.0\\system.security.principal.windows.4.3.0.nupkg.sha512",
61 | "C:\\Users\\lesja\\.nuget\\packages\\system.security.securestring\\4.3.0\\system.security.securestring.4.3.0.nupkg.sha512",
62 | "C:\\Users\\lesja\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512",
63 | "C:\\Users\\lesja\\.nuget\\packages\\system.text.encoding.extensions\\4.3.0\\system.text.encoding.extensions.4.3.0.nupkg.sha512",
64 | "C:\\Users\\lesja\\.nuget\\packages\\system.text.regularexpressions\\4.3.0\\system.text.regularexpressions.4.3.0.nupkg.sha512",
65 | "C:\\Users\\lesja\\.nuget\\packages\\system.threading\\4.3.0\\system.threading.4.3.0.nupkg.sha512",
66 | "C:\\Users\\lesja\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512",
67 | "C:\\Users\\lesja\\.nuget\\packages\\system.threading.tasks.extensions\\4.3.0\\system.threading.tasks.extensions.4.3.0.nupkg.sha512",
68 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.readerwriter\\4.3.0\\system.xml.readerwriter.4.3.0.nupkg.sha512",
69 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.xdocument\\4.3.0\\system.xml.xdocument.4.3.0.nupkg.sha512",
70 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.xmldocument\\4.3.0\\system.xml.xmldocument.4.3.0.nupkg.sha512",
71 | "C:\\Users\\lesja\\.nuget\\packages\\system.xml.xmlserializer\\4.3.0\\system.xml.xmlserializer.4.3.0.nupkg.sha512"
72 | ],
73 | "logs": []
74 | }
--------------------------------------------------------------------------------
/CommandAPISolution/test/CommandAPI.Tests/CommandsControllerTests.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using Moq;
4 | using AutoMapper;
5 | using CommandAPI.Models;
6 | using Xunit;
7 | using CommandAPI.Controllers;
8 | using CommandAPI.Data;
9 | using CommandAPI.Profiles;
10 | using Microsoft.AspNetCore.Mvc;
11 | using CommandAPI.Dtos;
12 |
13 | using Newtonsoft.Json.Serialization;
14 |
15 | namespace CommandAPI.Tests
16 | {
17 | public class CommandsControllerTests : IDisposable
18 | {
19 | Mock mockRepo;
20 | CommandsProfile realProfile;
21 | MapperConfiguration configuration;
22 | IMapper mapper;
23 |
24 | public CommandsControllerTests()
25 | {
26 | mockRepo = new Mock();
27 | realProfile = new CommandsProfile();
28 | configuration = new MapperConfiguration(cfg => cfg.AddProfile(realProfile));
29 | mapper = new Mapper(configuration);
30 | }
31 |
32 | public void Dispose()
33 | {
34 | mockRepo = null;
35 | mapper = null;
36 | configuration = null;
37 | realProfile = null;
38 | }
39 |
40 |
41 |
42 | //**************************************************
43 | //*
44 | //GET /api/commands Unit Tests
45 | //*
46 | //**************************************************
47 |
48 | //TEST 1.1
49 | [Fact]
50 | public void GetAllCommands_ReturnsZeroResources_WhenDBIsEmpty()
51 | {
52 | //Arrange
53 | mockRepo.Setup(repo =>
54 | repo.GetAllCommands()).Returns(GetCommands(0));
55 |
56 | var controller = new CommandsController(mockRepo.Object, mapper);
57 |
58 | //Act
59 | var result = controller.GetAllCommands();
60 |
61 | //Assert
62 | Assert.IsType(result.Result);
63 | }
64 |
65 | //TEST 1.2
66 | [Fact]
67 | public void GetAllCommands_ReturnsOneResource_WhenDBHasOneResource()
68 | {
69 | //Arrange
70 | mockRepo.Setup(repo =>
71 | repo.GetAllCommands()).Returns(GetCommands(1));
72 |
73 | var controller = new CommandsController(mockRepo.Object, mapper);
74 |
75 | //Act
76 | var result = controller.GetAllCommands();
77 |
78 | //Assert
79 | var okResult = result.Result as OkObjectResult;
80 |
81 | var commands = okResult.Value as List;
82 |
83 | Assert.Single(commands);
84 | }
85 |
86 | //TEST 1.3
87 | [Fact]
88 | public void GetAllCommands_Returns200OK_WhenDBHasOneResource()
89 | {
90 | //Arrange
91 | mockRepo.Setup(repo =>
92 | repo.GetAllCommands()).Returns(GetCommands(1));
93 |
94 | var controller = new CommandsController(mockRepo.Object, mapper);
95 |
96 | //Act
97 | var result = controller.GetAllCommands();
98 |
99 | //Assert
100 | Assert.IsType(result.Result);
101 |
102 | }
103 |
104 | //TEST 1.4
105 | [Fact]
106 | public void GetAllCommands_ReturnsCorrectType_WhenDBHasOneResource()
107 | {
108 | //Arrange
109 | mockRepo.Setup(repo =>
110 | repo.GetAllCommands()).Returns(GetCommands(1));
111 |
112 | var controller = new CommandsController(mockRepo.Object, mapper);
113 |
114 | //Act
115 | var result = controller.GetAllCommands();
116 |
117 | //Assert
118 | Assert.IsType>>(result);
119 | }
120 |
121 | //**************************************************
122 | //*
123 | //GET /api/commands/{id} Unit Tests
124 | //*
125 | //**************************************************
126 |
127 | //TEST 2.1
128 | [Fact]
129 | public void GetCommandByID_Returns404NotFound_WhenNonExistentIDProvided()
130 | {
131 | //Arrange
132 | mockRepo.Setup(repo =>
133 | repo.GetCommandById(0)).Returns(() => null);
134 |
135 | var controller = new CommandsController(mockRepo.Object, mapper);
136 |
137 | //Act
138 | var result = controller.GetCommandById(1);
139 |
140 | //Assert
141 | Assert.IsType(result.Result);
142 | }
143 |
144 | //TEST 2.2
145 | [Fact]
146 | public void GetCommandByID_Returns200OK__WhenValidIDProvided()
147 | {
148 | //Arrange
149 | mockRepo.Setup(repo =>
150 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" });
151 |
152 | var controller = new CommandsController(mockRepo.Object, mapper);
153 |
154 | //Act
155 | var result = controller.GetCommandById(1);
156 |
157 | //Assert
158 | Assert.IsType(result.Result);
159 | }
160 |
161 | //TEST 2.3
162 | [Fact]
163 | public void GetCommandByID_ReturnsCorrectResouceType_WhenValidIDProvided()
164 | {
165 | //Arrange
166 | mockRepo.Setup(repo =>
167 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" });
168 |
169 | var controller = new CommandsController(mockRepo.Object, mapper);
170 |
171 | //Act
172 | var result = controller.GetCommandById(1);
173 |
174 | //Assert
175 | Assert.IsType>(result);
176 | }
177 |
178 | //**************************************************
179 | //*
180 | //POST /api/commands/ Unit Tests
181 | //*
182 | //**************************************************
183 |
184 | //TEST 3.1
185 | [Fact]
186 | public void CreateCommand_ReturnsCorrectResourceType_WhenValidObjectSubmitted()
187 | {
188 | //Arrange
189 | mockRepo.Setup(repo =>
190 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" });
191 |
192 | var controller = new CommandsController(mockRepo.Object, mapper);
193 |
194 | //Act
195 | var result = controller.CreateCommand(new CommandCreateDto { });
196 |
197 | //Assert
198 | Assert.IsType>(result);
199 | }
200 |
201 | //TEST 3.2
202 | [Fact]
203 | public void CreateCommand_Returns201Created_WhenValidObjectSubmitted()
204 | {
205 | //Arrange
206 | mockRepo.Setup(repo =>
207 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" });
208 |
209 | var controller = new CommandsController(mockRepo.Object, mapper);
210 |
211 | //Act
212 | var result = controller.CreateCommand(new CommandCreateDto { });
213 |
214 | //Assert
215 | Assert.IsType(result.Result);
216 | }
217 |
218 |
219 | //**************************************************
220 | //*
221 | //PUT /api/commands/{id} Unit Tests
222 | //*
223 | //**************************************************
224 |
225 | //TEST 4.1
226 | [Fact]
227 | public void UpdateCommand_Returns204NoContent_WhenValidObjectSubmitted()
228 | {
229 | //Arrange
230 | mockRepo.Setup(repo =>
231 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" });
232 |
233 | var controller = new CommandsController(mockRepo.Object, mapper);
234 |
235 | //Act
236 | var result = controller.UpdateCommand(1, new CommandUpdateDto { });
237 |
238 | //Assert
239 | Assert.IsType(result);
240 | }
241 |
242 |
243 | //TEST 4.2
244 | [Fact]
245 | public void UpdateCommand_Returns404NotFound_WhenNonExistentResourceIDSubmitted()
246 | {
247 | //Arrange
248 | mockRepo.Setup(repo =>
249 | repo.GetCommandById(0)).Returns(() => null);
250 |
251 | var controller = new CommandsController(mockRepo.Object, mapper);
252 |
253 | //Act
254 | var result = controller.UpdateCommand(0, new CommandUpdateDto { });
255 |
256 | //Assert
257 | Assert.IsType(result);
258 | }
259 |
260 |
261 | //**************************************************
262 | //*
263 | //PATCH /api/commands/{id} Unit Tests
264 | //*
265 | //**************************************************
266 |
267 |
268 | //TEST 5.1
269 | [Fact]
270 | public void PartialCommandUpdate_Returns404NotFound_WhenNonExistentResourceIDSubmitted()
271 | {
272 | //Arrange
273 | mockRepo.Setup(repo =>
274 | repo.GetCommandById(0)).Returns(() => null);
275 |
276 | var controller = new CommandsController(mockRepo.Object, mapper);
277 |
278 | //Act
279 | var result = controller.PartialCommandUpdate(0, new Microsoft.AspNetCore.JsonPatch.JsonPatchDocument { });
280 |
281 | //Assert
282 | Assert.IsType(result);
283 | }
284 |
285 |
286 | //**************************************************
287 | //*
288 | //DELETE /api/commands/{id} Unit Tests
289 | //*
290 | //**************************************************
291 |
292 | //TEST 6.1
293 | [Fact]
294 | public void DeleteCommand_Returns200OK_WhenValidResourceIDSubmitted()
295 | {
296 | //Arrange
297 | mockRepo.Setup(repo =>
298 | repo.GetCommandById(1)).Returns(new Command { Id = 1, HowTo = "mock", Platform = "Mock", CommandLine = "Mock" });
299 |
300 | var controller = new CommandsController(mockRepo.Object, mapper);
301 |
302 | //Act
303 | var result = controller.DeleteCommand(1);
304 |
305 | //Assert
306 | Assert.IsType(result);
307 | }
308 |
309 | //TEST 6.2
310 | [Fact]
311 | public void DeleteCommand_Returns_404NotFound_WhenNonExistentResourceIDSubmitted()
312 | {
313 | //Arrange
314 | mockRepo.Setup(repo =>
315 | repo.GetCommandById(0)).Returns(() => null);
316 |
317 | var controller = new CommandsController(mockRepo.Object, mapper);
318 |
319 | //Act
320 | var result = controller.DeleteCommand(0);
321 |
322 | //Assert
323 | Assert.IsType(result);
324 |
325 | }
326 |
327 | //**************************************************
328 | //*
329 | //Private Support Methods
330 | //*
331 | //**************************************************
332 |
333 |
334 |
335 |
336 | private List GetCommands(int num)
337 | {
338 | var commands = new List();
339 | if (num > 0)
340 | {
341 | commands.Add(new Command
342 | {
343 | Id = 0,
344 | HowTo = "How to genrate a migration",
345 | CommandLine = "dotnet ef migrations add ",
346 | Platform = ".Net Core EF"
347 | });
348 | }
349 | return commands;
350 | }
351 | }
352 | }
353 |
--------------------------------------------------------------------------------
/CommandAPIClient/bin/Debug/netcoreapp3.1/CommandAPIClient.deps.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeTarget": {
3 | "name": ".NETCoreApp,Version=v3.1",
4 | "signature": ""
5 | },
6 | "compilationOptions": {},
7 | "targets": {
8 | ".NETCoreApp,Version=v3.1": {
9 | "CommandAPIClient/1.0.0": {
10 | "dependencies": {
11 | "Microsoft.Extensions.Configuration": "3.1.5",
12 | "Microsoft.Extensions.Configuration.Binder": "3.1.5",
13 | "Microsoft.Extensions.Configuration.Json": "3.1.5",
14 | "Microsoft.Identity.Client": "4.15.0"
15 | },
16 | "runtime": {
17 | "CommandAPIClient.dll": {}
18 | }
19 | },
20 | "Microsoft.CSharp/4.5.0": {},
21 | "Microsoft.Extensions.Configuration/3.1.5": {
22 | "dependencies": {
23 | "Microsoft.Extensions.Configuration.Abstractions": "3.1.5"
24 | },
25 | "runtime": {
26 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.dll": {
27 | "assemblyVersion": "3.1.5.0",
28 | "fileVersion": "3.100.520.27009"
29 | }
30 | }
31 | },
32 | "Microsoft.Extensions.Configuration.Abstractions/3.1.5": {
33 | "dependencies": {
34 | "Microsoft.Extensions.Primitives": "3.1.5"
35 | },
36 | "runtime": {
37 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Abstractions.dll": {
38 | "assemblyVersion": "3.1.5.0",
39 | "fileVersion": "3.100.520.27009"
40 | }
41 | }
42 | },
43 | "Microsoft.Extensions.Configuration.Binder/3.1.5": {
44 | "dependencies": {
45 | "Microsoft.Extensions.Configuration": "3.1.5"
46 | },
47 | "runtime": {
48 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Binder.dll": {
49 | "assemblyVersion": "3.1.5.0",
50 | "fileVersion": "3.100.520.27009"
51 | }
52 | }
53 | },
54 | "Microsoft.Extensions.Configuration.FileExtensions/3.1.5": {
55 | "dependencies": {
56 | "Microsoft.Extensions.Configuration": "3.1.5",
57 | "Microsoft.Extensions.FileProviders.Physical": "3.1.5"
58 | },
59 | "runtime": {
60 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.FileExtensions.dll": {
61 | "assemblyVersion": "3.1.5.0",
62 | "fileVersion": "3.100.520.27009"
63 | }
64 | }
65 | },
66 | "Microsoft.Extensions.Configuration.Json/3.1.5": {
67 | "dependencies": {
68 | "Microsoft.Extensions.Configuration": "3.1.5",
69 | "Microsoft.Extensions.Configuration.FileExtensions": "3.1.5"
70 | },
71 | "runtime": {
72 | "lib/netcoreapp3.1/Microsoft.Extensions.Configuration.Json.dll": {
73 | "assemblyVersion": "3.1.5.0",
74 | "fileVersion": "3.100.520.27009"
75 | }
76 | }
77 | },
78 | "Microsoft.Extensions.FileProviders.Abstractions/3.1.5": {
79 | "dependencies": {
80 | "Microsoft.Extensions.Primitives": "3.1.5"
81 | },
82 | "runtime": {
83 | "lib/netcoreapp3.1/Microsoft.Extensions.FileProviders.Abstractions.dll": {
84 | "assemblyVersion": "3.1.5.0",
85 | "fileVersion": "3.100.520.27009"
86 | }
87 | }
88 | },
89 | "Microsoft.Extensions.FileProviders.Physical/3.1.5": {
90 | "dependencies": {
91 | "Microsoft.Extensions.FileProviders.Abstractions": "3.1.5",
92 | "Microsoft.Extensions.FileSystemGlobbing": "3.1.5"
93 | },
94 | "runtime": {
95 | "lib/netcoreapp3.1/Microsoft.Extensions.FileProviders.Physical.dll": {
96 | "assemblyVersion": "3.1.5.0",
97 | "fileVersion": "3.100.520.27009"
98 | }
99 | }
100 | },
101 | "Microsoft.Extensions.FileSystemGlobbing/3.1.5": {
102 | "runtime": {
103 | "lib/netstandard2.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
104 | "assemblyVersion": "3.1.5.0",
105 | "fileVersion": "3.100.520.27009"
106 | }
107 | }
108 | },
109 | "Microsoft.Extensions.Primitives/3.1.5": {
110 | "runtime": {
111 | "lib/netcoreapp3.1/Microsoft.Extensions.Primitives.dll": {
112 | "assemblyVersion": "3.1.5.0",
113 | "fileVersion": "3.100.520.27009"
114 | }
115 | }
116 | },
117 | "Microsoft.Identity.Client/4.15.0": {
118 | "dependencies": {
119 | "Microsoft.CSharp": "4.5.0",
120 | "System.ComponentModel.TypeConverter": "4.3.0",
121 | "System.Net.NameResolution": "4.3.0",
122 | "System.Private.Uri": "4.3.2",
123 | "System.Runtime.Serialization.Formatters": "4.3.0",
124 | "System.Runtime.Serialization.Json": "4.3.0",
125 | "System.Runtime.Serialization.Primitives": "4.3.0",
126 | "System.Security.SecureString": "4.3.0",
127 | "System.Xml.XDocument": "4.3.0"
128 | },
129 | "runtime": {
130 | "lib/netcoreapp2.1/Microsoft.Identity.Client.dll": {
131 | "assemblyVersion": "4.15.0.0",
132 | "fileVersion": "4.15.0.0"
133 | }
134 | }
135 | },
136 | "Microsoft.NETCore.Platforms/1.1.1": {},
137 | "Microsoft.NETCore.Targets/1.1.3": {},
138 | "Microsoft.Win32.Primitives/4.3.0": {
139 | "dependencies": {
140 | "Microsoft.NETCore.Platforms": "1.1.1",
141 | "Microsoft.NETCore.Targets": "1.1.3",
142 | "System.Runtime": "4.3.0"
143 | }
144 | },
145 | "runtime.native.System/4.3.0": {
146 | "dependencies": {
147 | "Microsoft.NETCore.Platforms": "1.1.1",
148 | "Microsoft.NETCore.Targets": "1.1.3"
149 | }
150 | },
151 | "System.Collections/4.3.0": {
152 | "dependencies": {
153 | "Microsoft.NETCore.Platforms": "1.1.1",
154 | "Microsoft.NETCore.Targets": "1.1.3",
155 | "System.Runtime": "4.3.0"
156 | }
157 | },
158 | "System.Collections.Concurrent/4.3.0": {
159 | "dependencies": {
160 | "System.Collections": "4.3.0",
161 | "System.Diagnostics.Debug": "4.3.0",
162 | "System.Diagnostics.Tracing": "4.3.0",
163 | "System.Globalization": "4.3.0",
164 | "System.Reflection": "4.3.0",
165 | "System.Resources.ResourceManager": "4.3.0",
166 | "System.Runtime": "4.3.0",
167 | "System.Runtime.Extensions": "4.3.0",
168 | "System.Threading": "4.3.0",
169 | "System.Threading.Tasks": "4.3.0"
170 | }
171 | },
172 | "System.Collections.NonGeneric/4.3.0": {
173 | "dependencies": {
174 | "System.Diagnostics.Debug": "4.3.0",
175 | "System.Globalization": "4.3.0",
176 | "System.Resources.ResourceManager": "4.3.0",
177 | "System.Runtime": "4.3.0",
178 | "System.Runtime.Extensions": "4.3.0",
179 | "System.Threading": "4.3.0"
180 | }
181 | },
182 | "System.Collections.Specialized/4.3.0": {
183 | "dependencies": {
184 | "System.Collections.NonGeneric": "4.3.0",
185 | "System.Globalization": "4.3.0",
186 | "System.Globalization.Extensions": "4.3.0",
187 | "System.Resources.ResourceManager": "4.3.0",
188 | "System.Runtime": "4.3.0",
189 | "System.Runtime.Extensions": "4.3.0",
190 | "System.Threading": "4.3.0"
191 | }
192 | },
193 | "System.ComponentModel/4.3.0": {
194 | "dependencies": {
195 | "System.Runtime": "4.3.0"
196 | }
197 | },
198 | "System.ComponentModel.Primitives/4.3.0": {
199 | "dependencies": {
200 | "System.ComponentModel": "4.3.0",
201 | "System.Resources.ResourceManager": "4.3.0",
202 | "System.Runtime": "4.3.0"
203 | }
204 | },
205 | "System.ComponentModel.TypeConverter/4.3.0": {
206 | "dependencies": {
207 | "System.Collections": "4.3.0",
208 | "System.Collections.NonGeneric": "4.3.0",
209 | "System.Collections.Specialized": "4.3.0",
210 | "System.ComponentModel": "4.3.0",
211 | "System.ComponentModel.Primitives": "4.3.0",
212 | "System.Globalization": "4.3.0",
213 | "System.Linq": "4.3.0",
214 | "System.Reflection": "4.3.0",
215 | "System.Reflection.Extensions": "4.3.0",
216 | "System.Reflection.Primitives": "4.3.0",
217 | "System.Reflection.TypeExtensions": "4.3.0",
218 | "System.Resources.ResourceManager": "4.3.0",
219 | "System.Runtime": "4.3.0",
220 | "System.Runtime.Extensions": "4.3.0",
221 | "System.Threading": "4.3.0"
222 | }
223 | },
224 | "System.Diagnostics.Debug/4.3.0": {
225 | "dependencies": {
226 | "Microsoft.NETCore.Platforms": "1.1.1",
227 | "Microsoft.NETCore.Targets": "1.1.3",
228 | "System.Runtime": "4.3.0"
229 | }
230 | },
231 | "System.Diagnostics.Tools/4.3.0": {
232 | "dependencies": {
233 | "Microsoft.NETCore.Platforms": "1.1.1",
234 | "Microsoft.NETCore.Targets": "1.1.3",
235 | "System.Runtime": "4.3.0"
236 | }
237 | },
238 | "System.Diagnostics.Tracing/4.3.0": {
239 | "dependencies": {
240 | "Microsoft.NETCore.Platforms": "1.1.1",
241 | "Microsoft.NETCore.Targets": "1.1.3",
242 | "System.Runtime": "4.3.0"
243 | }
244 | },
245 | "System.Globalization/4.3.0": {
246 | "dependencies": {
247 | "Microsoft.NETCore.Platforms": "1.1.1",
248 | "Microsoft.NETCore.Targets": "1.1.3",
249 | "System.Runtime": "4.3.0"
250 | }
251 | },
252 | "System.Globalization.Extensions/4.3.0": {
253 | "dependencies": {
254 | "Microsoft.NETCore.Platforms": "1.1.1",
255 | "System.Globalization": "4.3.0",
256 | "System.Resources.ResourceManager": "4.3.0",
257 | "System.Runtime": "4.3.0",
258 | "System.Runtime.Extensions": "4.3.0",
259 | "System.Runtime.InteropServices": "4.3.0"
260 | }
261 | },
262 | "System.IO/4.3.0": {
263 | "dependencies": {
264 | "Microsoft.NETCore.Platforms": "1.1.1",
265 | "Microsoft.NETCore.Targets": "1.1.3",
266 | "System.Runtime": "4.3.0",
267 | "System.Text.Encoding": "4.3.0",
268 | "System.Threading.Tasks": "4.3.0"
269 | }
270 | },
271 | "System.IO.FileSystem/4.3.0": {
272 | "dependencies": {
273 | "Microsoft.NETCore.Platforms": "1.1.1",
274 | "Microsoft.NETCore.Targets": "1.1.3",
275 | "System.IO": "4.3.0",
276 | "System.IO.FileSystem.Primitives": "4.3.0",
277 | "System.Runtime": "4.3.0",
278 | "System.Runtime.Handles": "4.3.0",
279 | "System.Text.Encoding": "4.3.0",
280 | "System.Threading.Tasks": "4.3.0"
281 | }
282 | },
283 | "System.IO.FileSystem.Primitives/4.3.0": {
284 | "dependencies": {
285 | "System.Runtime": "4.3.0"
286 | }
287 | },
288 | "System.Linq/4.3.0": {
289 | "dependencies": {
290 | "System.Collections": "4.3.0",
291 | "System.Diagnostics.Debug": "4.3.0",
292 | "System.Resources.ResourceManager": "4.3.0",
293 | "System.Runtime": "4.3.0",
294 | "System.Runtime.Extensions": "4.3.0"
295 | }
296 | },
297 | "System.Net.NameResolution/4.3.0": {
298 | "dependencies": {
299 | "Microsoft.NETCore.Platforms": "1.1.1",
300 | "System.Collections": "4.3.0",
301 | "System.Diagnostics.Tracing": "4.3.0",
302 | "System.Globalization": "4.3.0",
303 | "System.Net.Primitives": "4.3.0",
304 | "System.Resources.ResourceManager": "4.3.0",
305 | "System.Runtime": "4.3.0",
306 | "System.Runtime.Extensions": "4.3.0",
307 | "System.Runtime.Handles": "4.3.0",
308 | "System.Runtime.InteropServices": "4.3.0",
309 | "System.Security.Principal.Windows": "4.3.0",
310 | "System.Threading": "4.3.0",
311 | "System.Threading.Tasks": "4.3.0",
312 | "runtime.native.System": "4.3.0"
313 | }
314 | },
315 | "System.Net.Primitives/4.3.0": {
316 | "dependencies": {
317 | "Microsoft.NETCore.Platforms": "1.1.1",
318 | "Microsoft.NETCore.Targets": "1.1.3",
319 | "System.Runtime": "4.3.0",
320 | "System.Runtime.Handles": "4.3.0"
321 | }
322 | },
323 | "System.Private.DataContractSerialization/4.3.0": {
324 | "dependencies": {
325 | "System.Collections": "4.3.0",
326 | "System.Collections.Concurrent": "4.3.0",
327 | "System.Diagnostics.Debug": "4.3.0",
328 | "System.Globalization": "4.3.0",
329 | "System.IO": "4.3.0",
330 | "System.Linq": "4.3.0",
331 | "System.Reflection": "4.3.0",
332 | "System.Reflection.Emit.ILGeneration": "4.3.0",
333 | "System.Reflection.Emit.Lightweight": "4.3.0",
334 | "System.Reflection.Extensions": "4.3.0",
335 | "System.Reflection.Primitives": "4.3.0",
336 | "System.Reflection.TypeExtensions": "4.3.0",
337 | "System.Resources.ResourceManager": "4.3.0",
338 | "System.Runtime": "4.3.0",
339 | "System.Runtime.Extensions": "4.3.0",
340 | "System.Runtime.Serialization.Primitives": "4.3.0",
341 | "System.Text.Encoding": "4.3.0",
342 | "System.Text.Encoding.Extensions": "4.3.0",
343 | "System.Text.RegularExpressions": "4.3.0",
344 | "System.Threading": "4.3.0",
345 | "System.Threading.Tasks": "4.3.0",
346 | "System.Xml.ReaderWriter": "4.3.0",
347 | "System.Xml.XDocument": "4.3.0",
348 | "System.Xml.XmlDocument": "4.3.0",
349 | "System.Xml.XmlSerializer": "4.3.0"
350 | }
351 | },
352 | "System.Private.Uri/4.3.2": {
353 | "dependencies": {
354 | "Microsoft.NETCore.Platforms": "1.1.1",
355 | "Microsoft.NETCore.Targets": "1.1.3"
356 | }
357 | },
358 | "System.Reflection/4.3.0": {
359 | "dependencies": {
360 | "Microsoft.NETCore.Platforms": "1.1.1",
361 | "Microsoft.NETCore.Targets": "1.1.3",
362 | "System.IO": "4.3.0",
363 | "System.Reflection.Primitives": "4.3.0",
364 | "System.Runtime": "4.3.0"
365 | }
366 | },
367 | "System.Reflection.Emit/4.3.0": {
368 | "dependencies": {
369 | "System.IO": "4.3.0",
370 | "System.Reflection": "4.3.0",
371 | "System.Reflection.Emit.ILGeneration": "4.3.0",
372 | "System.Reflection.Primitives": "4.3.0",
373 | "System.Runtime": "4.3.0"
374 | }
375 | },
376 | "System.Reflection.Emit.ILGeneration/4.3.0": {
377 | "dependencies": {
378 | "System.Reflection": "4.3.0",
379 | "System.Reflection.Primitives": "4.3.0",
380 | "System.Runtime": "4.3.0"
381 | }
382 | },
383 | "System.Reflection.Emit.Lightweight/4.3.0": {
384 | "dependencies": {
385 | "System.Reflection": "4.3.0",
386 | "System.Reflection.Emit.ILGeneration": "4.3.0",
387 | "System.Reflection.Primitives": "4.3.0",
388 | "System.Runtime": "4.3.0"
389 | }
390 | },
391 | "System.Reflection.Extensions/4.3.0": {
392 | "dependencies": {
393 | "Microsoft.NETCore.Platforms": "1.1.1",
394 | "Microsoft.NETCore.Targets": "1.1.3",
395 | "System.Reflection": "4.3.0",
396 | "System.Runtime": "4.3.0"
397 | }
398 | },
399 | "System.Reflection.Primitives/4.3.0": {
400 | "dependencies": {
401 | "Microsoft.NETCore.Platforms": "1.1.1",
402 | "Microsoft.NETCore.Targets": "1.1.3",
403 | "System.Runtime": "4.3.0"
404 | }
405 | },
406 | "System.Reflection.TypeExtensions/4.3.0": {
407 | "dependencies": {
408 | "System.Reflection": "4.3.0",
409 | "System.Runtime": "4.3.0"
410 | }
411 | },
412 | "System.Resources.ResourceManager/4.3.0": {
413 | "dependencies": {
414 | "Microsoft.NETCore.Platforms": "1.1.1",
415 | "Microsoft.NETCore.Targets": "1.1.3",
416 | "System.Globalization": "4.3.0",
417 | "System.Reflection": "4.3.0",
418 | "System.Runtime": "4.3.0"
419 | }
420 | },
421 | "System.Runtime/4.3.0": {
422 | "dependencies": {
423 | "Microsoft.NETCore.Platforms": "1.1.1",
424 | "Microsoft.NETCore.Targets": "1.1.3"
425 | }
426 | },
427 | "System.Runtime.Extensions/4.3.0": {
428 | "dependencies": {
429 | "Microsoft.NETCore.Platforms": "1.1.1",
430 | "Microsoft.NETCore.Targets": "1.1.3",
431 | "System.Runtime": "4.3.0"
432 | }
433 | },
434 | "System.Runtime.Handles/4.3.0": {
435 | "dependencies": {
436 | "Microsoft.NETCore.Platforms": "1.1.1",
437 | "Microsoft.NETCore.Targets": "1.1.3",
438 | "System.Runtime": "4.3.0"
439 | }
440 | },
441 | "System.Runtime.InteropServices/4.3.0": {
442 | "dependencies": {
443 | "Microsoft.NETCore.Platforms": "1.1.1",
444 | "Microsoft.NETCore.Targets": "1.1.3",
445 | "System.Reflection": "4.3.0",
446 | "System.Reflection.Primitives": "4.3.0",
447 | "System.Runtime": "4.3.0",
448 | "System.Runtime.Handles": "4.3.0"
449 | }
450 | },
451 | "System.Runtime.Serialization.Formatters/4.3.0": {
452 | "dependencies": {
453 | "System.Collections": "4.3.0",
454 | "System.Reflection": "4.3.0",
455 | "System.Resources.ResourceManager": "4.3.0",
456 | "System.Runtime": "4.3.0",
457 | "System.Runtime.Serialization.Primitives": "4.3.0"
458 | }
459 | },
460 | "System.Runtime.Serialization.Json/4.3.0": {
461 | "dependencies": {
462 | "System.IO": "4.3.0",
463 | "System.Private.DataContractSerialization": "4.3.0",
464 | "System.Runtime": "4.3.0"
465 | }
466 | },
467 | "System.Runtime.Serialization.Primitives/4.3.0": {
468 | "dependencies": {
469 | "System.Resources.ResourceManager": "4.3.0",
470 | "System.Runtime": "4.3.0"
471 | }
472 | },
473 | "System.Security.Claims/4.3.0": {
474 | "dependencies": {
475 | "System.Collections": "4.3.0",
476 | "System.Globalization": "4.3.0",
477 | "System.IO": "4.3.0",
478 | "System.Resources.ResourceManager": "4.3.0",
479 | "System.Runtime": "4.3.0",
480 | "System.Runtime.Extensions": "4.3.0",
481 | "System.Security.Principal": "4.3.0"
482 | }
483 | },
484 | "System.Security.Cryptography.Primitives/4.3.0": {
485 | "dependencies": {
486 | "System.Diagnostics.Debug": "4.3.0",
487 | "System.Globalization": "4.3.0",
488 | "System.IO": "4.3.0",
489 | "System.Resources.ResourceManager": "4.3.0",
490 | "System.Runtime": "4.3.0",
491 | "System.Threading": "4.3.0",
492 | "System.Threading.Tasks": "4.3.0"
493 | }
494 | },
495 | "System.Security.Principal/4.3.0": {
496 | "dependencies": {
497 | "System.Runtime": "4.3.0"
498 | }
499 | },
500 | "System.Security.Principal.Windows/4.3.0": {
501 | "dependencies": {
502 | "Microsoft.NETCore.Platforms": "1.1.1",
503 | "Microsoft.Win32.Primitives": "4.3.0",
504 | "System.Collections": "4.3.0",
505 | "System.Diagnostics.Debug": "4.3.0",
506 | "System.Reflection": "4.3.0",
507 | "System.Resources.ResourceManager": "4.3.0",
508 | "System.Runtime": "4.3.0",
509 | "System.Runtime.Extensions": "4.3.0",
510 | "System.Runtime.Handles": "4.3.0",
511 | "System.Runtime.InteropServices": "4.3.0",
512 | "System.Security.Claims": "4.3.0",
513 | "System.Security.Principal": "4.3.0",
514 | "System.Text.Encoding": "4.3.0",
515 | "System.Threading": "4.3.0"
516 | }
517 | },
518 | "System.Security.SecureString/4.3.0": {
519 | "dependencies": {
520 | "Microsoft.NETCore.Platforms": "1.1.1",
521 | "System.Resources.ResourceManager": "4.3.0",
522 | "System.Runtime": "4.3.0",
523 | "System.Runtime.Handles": "4.3.0",
524 | "System.Runtime.InteropServices": "4.3.0",
525 | "System.Security.Cryptography.Primitives": "4.3.0",
526 | "System.Text.Encoding": "4.3.0",
527 | "System.Threading": "4.3.0"
528 | }
529 | },
530 | "System.Text.Encoding/4.3.0": {
531 | "dependencies": {
532 | "Microsoft.NETCore.Platforms": "1.1.1",
533 | "Microsoft.NETCore.Targets": "1.1.3",
534 | "System.Runtime": "4.3.0"
535 | }
536 | },
537 | "System.Text.Encoding.Extensions/4.3.0": {
538 | "dependencies": {
539 | "Microsoft.NETCore.Platforms": "1.1.1",
540 | "Microsoft.NETCore.Targets": "1.1.3",
541 | "System.Runtime": "4.3.0",
542 | "System.Text.Encoding": "4.3.0"
543 | }
544 | },
545 | "System.Text.RegularExpressions/4.3.0": {
546 | "dependencies": {
547 | "System.Runtime": "4.3.0"
548 | }
549 | },
550 | "System.Threading/4.3.0": {
551 | "dependencies": {
552 | "System.Runtime": "4.3.0",
553 | "System.Threading.Tasks": "4.3.0"
554 | }
555 | },
556 | "System.Threading.Tasks/4.3.0": {
557 | "dependencies": {
558 | "Microsoft.NETCore.Platforms": "1.1.1",
559 | "Microsoft.NETCore.Targets": "1.1.3",
560 | "System.Runtime": "4.3.0"
561 | }
562 | },
563 | "System.Threading.Tasks.Extensions/4.3.0": {
564 | "dependencies": {
565 | "System.Collections": "4.3.0",
566 | "System.Runtime": "4.3.0",
567 | "System.Threading.Tasks": "4.3.0"
568 | }
569 | },
570 | "System.Xml.ReaderWriter/4.3.0": {
571 | "dependencies": {
572 | "System.Collections": "4.3.0",
573 | "System.Diagnostics.Debug": "4.3.0",
574 | "System.Globalization": "4.3.0",
575 | "System.IO": "4.3.0",
576 | "System.IO.FileSystem": "4.3.0",
577 | "System.IO.FileSystem.Primitives": "4.3.0",
578 | "System.Resources.ResourceManager": "4.3.0",
579 | "System.Runtime": "4.3.0",
580 | "System.Runtime.Extensions": "4.3.0",
581 | "System.Runtime.InteropServices": "4.3.0",
582 | "System.Text.Encoding": "4.3.0",
583 | "System.Text.Encoding.Extensions": "4.3.0",
584 | "System.Text.RegularExpressions": "4.3.0",
585 | "System.Threading.Tasks": "4.3.0",
586 | "System.Threading.Tasks.Extensions": "4.3.0"
587 | }
588 | },
589 | "System.Xml.XDocument/4.3.0": {
590 | "dependencies": {
591 | "System.Collections": "4.3.0",
592 | "System.Diagnostics.Debug": "4.3.0",
593 | "System.Diagnostics.Tools": "4.3.0",
594 | "System.Globalization": "4.3.0",
595 | "System.IO": "4.3.0",
596 | "System.Reflection": "4.3.0",
597 | "System.Resources.ResourceManager": "4.3.0",
598 | "System.Runtime": "4.3.0",
599 | "System.Runtime.Extensions": "4.3.0",
600 | "System.Text.Encoding": "4.3.0",
601 | "System.Threading": "4.3.0",
602 | "System.Xml.ReaderWriter": "4.3.0"
603 | }
604 | },
605 | "System.Xml.XmlDocument/4.3.0": {
606 | "dependencies": {
607 | "System.Collections": "4.3.0",
608 | "System.Diagnostics.Debug": "4.3.0",
609 | "System.Globalization": "4.3.0",
610 | "System.IO": "4.3.0",
611 | "System.Resources.ResourceManager": "4.3.0",
612 | "System.Runtime": "4.3.0",
613 | "System.Runtime.Extensions": "4.3.0",
614 | "System.Text.Encoding": "4.3.0",
615 | "System.Threading": "4.3.0",
616 | "System.Xml.ReaderWriter": "4.3.0"
617 | }
618 | },
619 | "System.Xml.XmlSerializer/4.3.0": {
620 | "dependencies": {
621 | "System.Collections": "4.3.0",
622 | "System.Globalization": "4.3.0",
623 | "System.IO": "4.3.0",
624 | "System.Linq": "4.3.0",
625 | "System.Reflection": "4.3.0",
626 | "System.Reflection.Emit": "4.3.0",
627 | "System.Reflection.Emit.ILGeneration": "4.3.0",
628 | "System.Reflection.Extensions": "4.3.0",
629 | "System.Reflection.Primitives": "4.3.0",
630 | "System.Reflection.TypeExtensions": "4.3.0",
631 | "System.Resources.ResourceManager": "4.3.0",
632 | "System.Runtime": "4.3.0",
633 | "System.Runtime.Extensions": "4.3.0",
634 | "System.Text.RegularExpressions": "4.3.0",
635 | "System.Threading": "4.3.0",
636 | "System.Xml.ReaderWriter": "4.3.0",
637 | "System.Xml.XmlDocument": "4.3.0"
638 | }
639 | }
640 | }
641 | },
642 | "libraries": {
643 | "CommandAPIClient/1.0.0": {
644 | "type": "project",
645 | "serviceable": false,
646 | "sha512": ""
647 | },
648 | "Microsoft.CSharp/4.5.0": {
649 | "type": "package",
650 | "serviceable": true,
651 | "sha512": "sha512-kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ==",
652 | "path": "microsoft.csharp/4.5.0",
653 | "hashPath": "microsoft.csharp.4.5.0.nupkg.sha512"
654 | },
655 | "Microsoft.Extensions.Configuration/3.1.5": {
656 | "type": "package",
657 | "serviceable": true,
658 | "sha512": "sha512-LZfdAP8flK4hkaniUv6TlstDX9FXLmJMX1A4mpLghAsZxTaJIgf+nzBNiPRdy/B5Vrs74gRONX3JrIUJQrebmA==",
659 | "path": "microsoft.extensions.configuration/3.1.5",
660 | "hashPath": "microsoft.extensions.configuration.3.1.5.nupkg.sha512"
661 | },
662 | "Microsoft.Extensions.Configuration.Abstractions/3.1.5": {
663 | "type": "package",
664 | "serviceable": true,
665 | "sha512": "sha512-VBcAk6s9izZr04WCzNqOh1Sxz2RbVSh0G79MfpHSDv16cUJtSEYEHody9ZnF71LBEktzdu6cvDFBOFMh43q0iA==",
666 | "path": "microsoft.extensions.configuration.abstractions/3.1.5",
667 | "hashPath": "microsoft.extensions.configuration.abstractions.3.1.5.nupkg.sha512"
668 | },
669 | "Microsoft.Extensions.Configuration.Binder/3.1.5": {
670 | "type": "package",
671 | "serviceable": true,
672 | "sha512": "sha512-ZR/zjBxkvdnnWhRoBHDT95uz1ZgJFhv1QazmKCIcDqy/RXqi+6dJ/PfxDhEnzPvk9HbkcGfFsPEu1vSIyxDqBQ==",
673 | "path": "microsoft.extensions.configuration.binder/3.1.5",
674 | "hashPath": "microsoft.extensions.configuration.binder.3.1.5.nupkg.sha512"
675 | },
676 | "Microsoft.Extensions.Configuration.FileExtensions/3.1.5": {
677 | "type": "package",
678 | "serviceable": true,
679 | "sha512": "sha512-zDXWDDaHMKX2ArwhrPprKgZfpCDuaqrcaGX5IG9EybQ6IGYZ7aMJftLan/bfxteI5bnga912y5nIYrTuXaxpug==",
680 | "path": "microsoft.extensions.configuration.fileextensions/3.1.5",
681 | "hashPath": "microsoft.extensions.configuration.fileextensions.3.1.5.nupkg.sha512"
682 | },
683 | "Microsoft.Extensions.Configuration.Json/3.1.5": {
684 | "type": "package",
685 | "serviceable": true,
686 | "sha512": "sha512-Yk7+e+13JKN9rvoUrWCil3Jdbrbx5owGhl5z2u5kgpEIuAn+eqWq624/wvou0/zzPxC8QyID/cSi1oLf9ngNhQ==",
687 | "path": "microsoft.extensions.configuration.json/3.1.5",
688 | "hashPath": "microsoft.extensions.configuration.json.3.1.5.nupkg.sha512"
689 | },
690 | "Microsoft.Extensions.FileProviders.Abstractions/3.1.5": {
691 | "type": "package",
692 | "serviceable": true,
693 | "sha512": "sha512-LrEQ97jhSWw84Y1m+CJfvh9qTUUswt27au54QYn2x5PCMPPgR+yAv/4VTJKMGSSI9T4scSLBXZ/fVhT4fPTCtA==",
694 | "path": "microsoft.extensions.fileproviders.abstractions/3.1.5",
695 | "hashPath": "microsoft.extensions.fileproviders.abstractions.3.1.5.nupkg.sha512"
696 | },
697 | "Microsoft.Extensions.FileProviders.Physical/3.1.5": {
698 | "type": "package",
699 | "serviceable": true,
700 | "sha512": "sha512-JemaaSSQosZ59flEfNzqvQRHDt1u4aEwV/pR4eFQEXpaX7lHI13gSbQbQ7TMGDdmY9F2t2+6RPp44Mmf9O1DsQ==",
701 | "path": "microsoft.extensions.fileproviders.physical/3.1.5",
702 | "hashPath": "microsoft.extensions.fileproviders.physical.3.1.5.nupkg.sha512"
703 | },
704 | "Microsoft.Extensions.FileSystemGlobbing/3.1.5": {
705 | "type": "package",
706 | "serviceable": true,
707 | "sha512": "sha512-ObdbZ/L3X89KOHI0K/zlwufnlHESYSp2L/Z1XgYp3Odekmzevl06iffrtIBP9Qgw2RxBVAyTEVNrIouCuik6yg==",
708 | "path": "microsoft.extensions.filesystemglobbing/3.1.5",
709 | "hashPath": "microsoft.extensions.filesystemglobbing.3.1.5.nupkg.sha512"
710 | },
711 | "Microsoft.Extensions.Primitives/3.1.5": {
712 | "type": "package",
713 | "serviceable": true,
714 | "sha512": "sha512-6bLdjSAQix82oP2tsuX9MM2yjgUFFOkSZYyRSKoUULilw2cg0Y0H+dnugwYlfj8Jd7yjd/+QSdNBqEyYhTYv0w==",
715 | "path": "microsoft.extensions.primitives/3.1.5",
716 | "hashPath": "microsoft.extensions.primitives.3.1.5.nupkg.sha512"
717 | },
718 | "Microsoft.Identity.Client/4.15.0": {
719 | "type": "package",
720 | "serviceable": true,
721 | "sha512": "sha512-dVSPFOe/TnSLqwKUpA8opa9+nEQqZ6HRvJk8x9MtQAk/QL6dsGrbjXOyhhS08eo59fboNWmGRxXXKvVNgBUXmw==",
722 | "path": "microsoft.identity.client/4.15.0",
723 | "hashPath": "microsoft.identity.client.4.15.0.nupkg.sha512"
724 | },
725 | "Microsoft.NETCore.Platforms/1.1.1": {
726 | "type": "package",
727 | "serviceable": true,
728 | "sha512": "sha512-TMBuzAHpTenGbGgk0SMTwyEkyijY/Eae4ZGsFNYJvAr/LDn1ku3Etp3FPxChmDp5HHF3kzJuoaa08N0xjqAJfQ==",
729 | "path": "microsoft.netcore.platforms/1.1.1",
730 | "hashPath": "microsoft.netcore.platforms.1.1.1.nupkg.sha512"
731 | },
732 | "Microsoft.NETCore.Targets/1.1.3": {
733 | "type": "package",
734 | "serviceable": true,
735 | "sha512": "sha512-3Wrmi0kJDzClwAC+iBdUBpEKmEle8FQNsCs77fkiOIw/9oYA07bL1EZNX0kQ2OMN3xpwvl0vAtOCYY3ndDNlhQ==",
736 | "path": "microsoft.netcore.targets/1.1.3",
737 | "hashPath": "microsoft.netcore.targets.1.1.3.nupkg.sha512"
738 | },
739 | "Microsoft.Win32.Primitives/4.3.0": {
740 | "type": "package",
741 | "serviceable": true,
742 | "sha512": "sha512-9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
743 | "path": "microsoft.win32.primitives/4.3.0",
744 | "hashPath": "microsoft.win32.primitives.4.3.0.nupkg.sha512"
745 | },
746 | "runtime.native.System/4.3.0": {
747 | "type": "package",
748 | "serviceable": true,
749 | "sha512": "sha512-c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
750 | "path": "runtime.native.system/4.3.0",
751 | "hashPath": "runtime.native.system.4.3.0.nupkg.sha512"
752 | },
753 | "System.Collections/4.3.0": {
754 | "type": "package",
755 | "serviceable": true,
756 | "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
757 | "path": "system.collections/4.3.0",
758 | "hashPath": "system.collections.4.3.0.nupkg.sha512"
759 | },
760 | "System.Collections.Concurrent/4.3.0": {
761 | "type": "package",
762 | "serviceable": true,
763 | "sha512": "sha512-ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
764 | "path": "system.collections.concurrent/4.3.0",
765 | "hashPath": "system.collections.concurrent.4.3.0.nupkg.sha512"
766 | },
767 | "System.Collections.NonGeneric/4.3.0": {
768 | "type": "package",
769 | "serviceable": true,
770 | "sha512": "sha512-prtjIEMhGUnQq6RnPEYLpFt8AtLbp9yq2zxOSrY7KJJZrw25Fi97IzBqY7iqssbM61Ek5b8f3MG/sG1N2sN5KA==",
771 | "path": "system.collections.nongeneric/4.3.0",
772 | "hashPath": "system.collections.nongeneric.4.3.0.nupkg.sha512"
773 | },
774 | "System.Collections.Specialized/4.3.0": {
775 | "type": "package",
776 | "serviceable": true,
777 | "sha512": "sha512-Epx8PoVZR0iuOnJJDzp7pWvdfMMOAvpUo95pC4ScH2mJuXkKA2Y4aR3cG9qt2klHgSons1WFh4kcGW7cSXvrxg==",
778 | "path": "system.collections.specialized/4.3.0",
779 | "hashPath": "system.collections.specialized.4.3.0.nupkg.sha512"
780 | },
781 | "System.ComponentModel/4.3.0": {
782 | "type": "package",
783 | "serviceable": true,
784 | "sha512": "sha512-VyGn1jGRZVfxnh8EdvDCi71v3bMXrsu8aYJOwoV7SNDLVhiEqwP86pPMyRGsDsxhXAm2b3o9OIqeETfN5qfezw==",
785 | "path": "system.componentmodel/4.3.0",
786 | "hashPath": "system.componentmodel.4.3.0.nupkg.sha512"
787 | },
788 | "System.ComponentModel.Primitives/4.3.0": {
789 | "type": "package",
790 | "serviceable": true,
791 | "sha512": "sha512-j8GUkCpM8V4d4vhLIIoBLGey2Z5bCkMVNjEZseyAlm4n5arcsJOeI3zkUP+zvZgzsbLTYh4lYeP/ZD/gdIAPrw==",
792 | "path": "system.componentmodel.primitives/4.3.0",
793 | "hashPath": "system.componentmodel.primitives.4.3.0.nupkg.sha512"
794 | },
795 | "System.ComponentModel.TypeConverter/4.3.0": {
796 | "type": "package",
797 | "serviceable": true,
798 | "sha512": "sha512-16pQ6P+EdhcXzPiEK4kbA953Fu0MNG2ovxTZU81/qsCd1zPRsKc3uif5NgvllCY598k6bI0KUyKW8fanlfaDQg==",
799 | "path": "system.componentmodel.typeconverter/4.3.0",
800 | "hashPath": "system.componentmodel.typeconverter.4.3.0.nupkg.sha512"
801 | },
802 | "System.Diagnostics.Debug/4.3.0": {
803 | "type": "package",
804 | "serviceable": true,
805 | "sha512": "sha512-ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
806 | "path": "system.diagnostics.debug/4.3.0",
807 | "hashPath": "system.diagnostics.debug.4.3.0.nupkg.sha512"
808 | },
809 | "System.Diagnostics.Tools/4.3.0": {
810 | "type": "package",
811 | "serviceable": true,
812 | "sha512": "sha512-UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
813 | "path": "system.diagnostics.tools/4.3.0",
814 | "hashPath": "system.diagnostics.tools.4.3.0.nupkg.sha512"
815 | },
816 | "System.Diagnostics.Tracing/4.3.0": {
817 | "type": "package",
818 | "serviceable": true,
819 | "sha512": "sha512-rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
820 | "path": "system.diagnostics.tracing/4.3.0",
821 | "hashPath": "system.diagnostics.tracing.4.3.0.nupkg.sha512"
822 | },
823 | "System.Globalization/4.3.0": {
824 | "type": "package",
825 | "serviceable": true,
826 | "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
827 | "path": "system.globalization/4.3.0",
828 | "hashPath": "system.globalization.4.3.0.nupkg.sha512"
829 | },
830 | "System.Globalization.Extensions/4.3.0": {
831 | "type": "package",
832 | "serviceable": true,
833 | "sha512": "sha512-FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
834 | "path": "system.globalization.extensions/4.3.0",
835 | "hashPath": "system.globalization.extensions.4.3.0.nupkg.sha512"
836 | },
837 | "System.IO/4.3.0": {
838 | "type": "package",
839 | "serviceable": true,
840 | "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
841 | "path": "system.io/4.3.0",
842 | "hashPath": "system.io.4.3.0.nupkg.sha512"
843 | },
844 | "System.IO.FileSystem/4.3.0": {
845 | "type": "package",
846 | "serviceable": true,
847 | "sha512": "sha512-3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
848 | "path": "system.io.filesystem/4.3.0",
849 | "hashPath": "system.io.filesystem.4.3.0.nupkg.sha512"
850 | },
851 | "System.IO.FileSystem.Primitives/4.3.0": {
852 | "type": "package",
853 | "serviceable": true,
854 | "sha512": "sha512-6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
855 | "path": "system.io.filesystem.primitives/4.3.0",
856 | "hashPath": "system.io.filesystem.primitives.4.3.0.nupkg.sha512"
857 | },
858 | "System.Linq/4.3.0": {
859 | "type": "package",
860 | "serviceable": true,
861 | "sha512": "sha512-5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
862 | "path": "system.linq/4.3.0",
863 | "hashPath": "system.linq.4.3.0.nupkg.sha512"
864 | },
865 | "System.Net.NameResolution/4.3.0": {
866 | "type": "package",
867 | "serviceable": true,
868 | "sha512": "sha512-AFYl08R7MrsrEjqpQWTZWBadqXyTzNDaWpMqyxhb0d6sGhV6xMDKueuBXlLL30gz+DIRY6MpdgnHWlCh5wmq9w==",
869 | "path": "system.net.nameresolution/4.3.0",
870 | "hashPath": "system.net.nameresolution.4.3.0.nupkg.sha512"
871 | },
872 | "System.Net.Primitives/4.3.0": {
873 | "type": "package",
874 | "serviceable": true,
875 | "sha512": "sha512-qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
876 | "path": "system.net.primitives/4.3.0",
877 | "hashPath": "system.net.primitives.4.3.0.nupkg.sha512"
878 | },
879 | "System.Private.DataContractSerialization/4.3.0": {
880 | "type": "package",
881 | "serviceable": true,
882 | "sha512": "sha512-yDaJ2x3mMmjdZEDB4IbezSnCsnjQ4BxinKhRAaP6kEgL6Bb6jANWphs5SzyD8imqeC/3FxgsuXT6ykkiH1uUmA==",
883 | "path": "system.private.datacontractserialization/4.3.0",
884 | "hashPath": "system.private.datacontractserialization.4.3.0.nupkg.sha512"
885 | },
886 | "System.Private.Uri/4.3.2": {
887 | "type": "package",
888 | "serviceable": true,
889 | "sha512": "sha512-o1+7RJnu3Ik3PazR7Z7tJhjPdE000Eq2KGLLWhqJJKXj04wrS8lwb1OFtDF9jzXXADhUuZNJZlPc98uwwqmpFA==",
890 | "path": "system.private.uri/4.3.2",
891 | "hashPath": "system.private.uri.4.3.2.nupkg.sha512"
892 | },
893 | "System.Reflection/4.3.0": {
894 | "type": "package",
895 | "serviceable": true,
896 | "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
897 | "path": "system.reflection/4.3.0",
898 | "hashPath": "system.reflection.4.3.0.nupkg.sha512"
899 | },
900 | "System.Reflection.Emit/4.3.0": {
901 | "type": "package",
902 | "serviceable": true,
903 | "sha512": "sha512-228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
904 | "path": "system.reflection.emit/4.3.0",
905 | "hashPath": "system.reflection.emit.4.3.0.nupkg.sha512"
906 | },
907 | "System.Reflection.Emit.ILGeneration/4.3.0": {
908 | "type": "package",
909 | "serviceable": true,
910 | "sha512": "sha512-59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
911 | "path": "system.reflection.emit.ilgeneration/4.3.0",
912 | "hashPath": "system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512"
913 | },
914 | "System.Reflection.Emit.Lightweight/4.3.0": {
915 | "type": "package",
916 | "serviceable": true,
917 | "sha512": "sha512-oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
918 | "path": "system.reflection.emit.lightweight/4.3.0",
919 | "hashPath": "system.reflection.emit.lightweight.4.3.0.nupkg.sha512"
920 | },
921 | "System.Reflection.Extensions/4.3.0": {
922 | "type": "package",
923 | "serviceable": true,
924 | "sha512": "sha512-rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
925 | "path": "system.reflection.extensions/4.3.0",
926 | "hashPath": "system.reflection.extensions.4.3.0.nupkg.sha512"
927 | },
928 | "System.Reflection.Primitives/4.3.0": {
929 | "type": "package",
930 | "serviceable": true,
931 | "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
932 | "path": "system.reflection.primitives/4.3.0",
933 | "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512"
934 | },
935 | "System.Reflection.TypeExtensions/4.3.0": {
936 | "type": "package",
937 | "serviceable": true,
938 | "sha512": "sha512-7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
939 | "path": "system.reflection.typeextensions/4.3.0",
940 | "hashPath": "system.reflection.typeextensions.4.3.0.nupkg.sha512"
941 | },
942 | "System.Resources.ResourceManager/4.3.0": {
943 | "type": "package",
944 | "serviceable": true,
945 | "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
946 | "path": "system.resources.resourcemanager/4.3.0",
947 | "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512"
948 | },
949 | "System.Runtime/4.3.0": {
950 | "type": "package",
951 | "serviceable": true,
952 | "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
953 | "path": "system.runtime/4.3.0",
954 | "hashPath": "system.runtime.4.3.0.nupkg.sha512"
955 | },
956 | "System.Runtime.Extensions/4.3.0": {
957 | "type": "package",
958 | "serviceable": true,
959 | "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
960 | "path": "system.runtime.extensions/4.3.0",
961 | "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512"
962 | },
963 | "System.Runtime.Handles/4.3.0": {
964 | "type": "package",
965 | "serviceable": true,
966 | "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
967 | "path": "system.runtime.handles/4.3.0",
968 | "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512"
969 | },
970 | "System.Runtime.InteropServices/4.3.0": {
971 | "type": "package",
972 | "serviceable": true,
973 | "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
974 | "path": "system.runtime.interopservices/4.3.0",
975 | "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512"
976 | },
977 | "System.Runtime.Serialization.Formatters/4.3.0": {
978 | "type": "package",
979 | "serviceable": true,
980 | "sha512": "sha512-KT591AkTNFOTbhZlaeMVvfax3RqhH1EJlcwF50Wm7sfnBLuHiOeZRRKrr1ns3NESkM20KPZ5Ol/ueMq5vg4QoQ==",
981 | "path": "system.runtime.serialization.formatters/4.3.0",
982 | "hashPath": "system.runtime.serialization.formatters.4.3.0.nupkg.sha512"
983 | },
984 | "System.Runtime.Serialization.Json/4.3.0": {
985 | "type": "package",
986 | "serviceable": true,
987 | "sha512": "sha512-CpVfOH0M/uZ5PH+M9+Gu56K0j9lJw3M+PKRegTkcrY/stOIvRUeonggxNrfBYLA5WOHL2j15KNJuTuld3x4o9w==",
988 | "path": "system.runtime.serialization.json/4.3.0",
989 | "hashPath": "system.runtime.serialization.json.4.3.0.nupkg.sha512"
990 | },
991 | "System.Runtime.Serialization.Primitives/4.3.0": {
992 | "type": "package",
993 | "serviceable": true,
994 | "sha512": "sha512-Wz+0KOukJGAlXjtKr+5Xpuxf8+c8739RI1C+A2BoQZT+wMCCoMDDdO8/4IRHfaVINqL78GO8dW8G2lW/e45Mcw==",
995 | "path": "system.runtime.serialization.primitives/4.3.0",
996 | "hashPath": "system.runtime.serialization.primitives.4.3.0.nupkg.sha512"
997 | },
998 | "System.Security.Claims/4.3.0": {
999 | "type": "package",
1000 | "serviceable": true,
1001 | "sha512": "sha512-P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==",
1002 | "path": "system.security.claims/4.3.0",
1003 | "hashPath": "system.security.claims.4.3.0.nupkg.sha512"
1004 | },
1005 | "System.Security.Cryptography.Primitives/4.3.0": {
1006 | "type": "package",
1007 | "serviceable": true,
1008 | "sha512": "sha512-7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
1009 | "path": "system.security.cryptography.primitives/4.3.0",
1010 | "hashPath": "system.security.cryptography.primitives.4.3.0.nupkg.sha512"
1011 | },
1012 | "System.Security.Principal/4.3.0": {
1013 | "type": "package",
1014 | "serviceable": true,
1015 | "sha512": "sha512-I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==",
1016 | "path": "system.security.principal/4.3.0",
1017 | "hashPath": "system.security.principal.4.3.0.nupkg.sha512"
1018 | },
1019 | "System.Security.Principal.Windows/4.3.0": {
1020 | "type": "package",
1021 | "serviceable": true,
1022 | "sha512": "sha512-HVL1rvqYtnRCxFsYag/2le/ZfKLK4yMw79+s6FmKXbSCNN0JeAhrYxnRAHFoWRa0dEojsDcbBSpH3l22QxAVyw==",
1023 | "path": "system.security.principal.windows/4.3.0",
1024 | "hashPath": "system.security.principal.windows.4.3.0.nupkg.sha512"
1025 | },
1026 | "System.Security.SecureString/4.3.0": {
1027 | "type": "package",
1028 | "serviceable": true,
1029 | "sha512": "sha512-PnXp38O9q/2Oe4iZHMH60kinScv6QiiL2XH54Pj2t0Y6c2zKPEiAZsM/M3wBOHLNTBDFP0zfy13WN2M0qFz5jg==",
1030 | "path": "system.security.securestring/4.3.0",
1031 | "hashPath": "system.security.securestring.4.3.0.nupkg.sha512"
1032 | },
1033 | "System.Text.Encoding/4.3.0": {
1034 | "type": "package",
1035 | "serviceable": true,
1036 | "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
1037 | "path": "system.text.encoding/4.3.0",
1038 | "hashPath": "system.text.encoding.4.3.0.nupkg.sha512"
1039 | },
1040 | "System.Text.Encoding.Extensions/4.3.0": {
1041 | "type": "package",
1042 | "serviceable": true,
1043 | "sha512": "sha512-YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
1044 | "path": "system.text.encoding.extensions/4.3.0",
1045 | "hashPath": "system.text.encoding.extensions.4.3.0.nupkg.sha512"
1046 | },
1047 | "System.Text.RegularExpressions/4.3.0": {
1048 | "type": "package",
1049 | "serviceable": true,
1050 | "sha512": "sha512-RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
1051 | "path": "system.text.regularexpressions/4.3.0",
1052 | "hashPath": "system.text.regularexpressions.4.3.0.nupkg.sha512"
1053 | },
1054 | "System.Threading/4.3.0": {
1055 | "type": "package",
1056 | "serviceable": true,
1057 | "sha512": "sha512-VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
1058 | "path": "system.threading/4.3.0",
1059 | "hashPath": "system.threading.4.3.0.nupkg.sha512"
1060 | },
1061 | "System.Threading.Tasks/4.3.0": {
1062 | "type": "package",
1063 | "serviceable": true,
1064 | "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
1065 | "path": "system.threading.tasks/4.3.0",
1066 | "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512"
1067 | },
1068 | "System.Threading.Tasks.Extensions/4.3.0": {
1069 | "type": "package",
1070 | "serviceable": true,
1071 | "sha512": "sha512-npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
1072 | "path": "system.threading.tasks.extensions/4.3.0",
1073 | "hashPath": "system.threading.tasks.extensions.4.3.0.nupkg.sha512"
1074 | },
1075 | "System.Xml.ReaderWriter/4.3.0": {
1076 | "type": "package",
1077 | "serviceable": true,
1078 | "sha512": "sha512-GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
1079 | "path": "system.xml.readerwriter/4.3.0",
1080 | "hashPath": "system.xml.readerwriter.4.3.0.nupkg.sha512"
1081 | },
1082 | "System.Xml.XDocument/4.3.0": {
1083 | "type": "package",
1084 | "serviceable": true,
1085 | "sha512": "sha512-5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
1086 | "path": "system.xml.xdocument/4.3.0",
1087 | "hashPath": "system.xml.xdocument.4.3.0.nupkg.sha512"
1088 | },
1089 | "System.Xml.XmlDocument/4.3.0": {
1090 | "type": "package",
1091 | "serviceable": true,
1092 | "sha512": "sha512-lJ8AxvkX7GQxpC6GFCeBj8ThYVyQczx2+f/cWHJU8tjS7YfI6Cv6bon70jVEgs2CiFbmmM8b9j1oZVx0dSI2Ww==",
1093 | "path": "system.xml.xmldocument/4.3.0",
1094 | "hashPath": "system.xml.xmldocument.4.3.0.nupkg.sha512"
1095 | },
1096 | "System.Xml.XmlSerializer/4.3.0": {
1097 | "type": "package",
1098 | "serviceable": true,
1099 | "sha512": "sha512-MYoTCP7EZ98RrANESW05J5ZwskKDoN0AuZ06ZflnowE50LTpbR5yRg3tHckTVm5j/m47stuGgCrCHWePyHS70Q==",
1100 | "path": "system.xml.xmlserializer/4.3.0",
1101 | "hashPath": "system.xml.xmlserializer.4.3.0.nupkg.sha512"
1102 | }
1103 | }
1104 | }
--------------------------------------------------------------------------------