Skip to content

Commit bf760cf

Browse files
authored
Merge pull request #3 from RestApia/feature/postman-import-extension
Feature / Import Postman Collection extensions added
2 parents e15deb0 + 2fffb9d commit bf760cf

File tree

53 files changed

+6477
-53
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+6477
-53
lines changed

.build/Targets/Extension_Targets.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ partial class Build
6767
.DependsOn(Extension_Build)
6868
.Executes(() =>
6969
{
70-
var path = Directory.GetFiles(ExtensionDirectory, "*.nupkg", SearchOption.AllDirectories).FirstOrDefault();
70+
var path = Directory.GetFiles(ExtensionDirectory, $"{ExtensionName}.*.nupkg", SearchOption.AllDirectories).FirstOrDefault();
7171
if (string.IsNullOrWhiteSpace(path)) throw new FileNotFoundException("Extension library wasn't found.");
7272

7373
DotNetNuGetPush(x => x

.build/Targets/Solution_Targets.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.IO;
44
using System.Linq;
55
using Nuke.Common;
6-
using Nuke.Common.Tooling;
76
using Nuke.Common.Tools.DotNet;
87
using static Nuke.Common.Tools.DotNet.DotNetTasks;
98

@@ -16,6 +15,13 @@ partial class Build
1615
{
1716
if (Directory.Exists(OutputDirectory)) Directory.Delete(OutputDirectory, true);
1817
DotNetClean(x => x.SetProject(Solution));
18+
19+
// delete all 'bin' directories
20+
foreach (var project in Solution.AllProjects.Where(x => !x.Name.Equals("Builder.Shared", StringComparison.Ordinal)))
21+
{
22+
var binDir = project.Directory / "bin";
23+
if (Directory.Exists(binDir)) Directory.Delete(binDir, true);
24+
}
1925
});
2026

2127
Target Solution_Restore => _ => _

src/.editorconfig renamed to .editorconfig

-1
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,6 @@ dotnet_diagnostic.SA1024.severity = none
291291
dotnet_diagnostic.SA1028.severity = none # Code should not contain trailing whitespace
292292
dotnet_diagnostic.SA1503.severity = none
293293

294-
[{*Model.cs, *Settings.cs, *Entity.cs}]
295294
dotnet_diagnostic.SA1313.severity = none # incorrect for records
296295

297296
[*Tests.cs]
File renamed without changes.

RestApia.Shared.sln

+16
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Builder", "Builder", "{07A0
1212
EndProject
1313
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Builder.Shared", ".build\Builder.Shared.csproj", "{35A67EB2-CF2D-40B2-B598-685D70F9D94D}"
1414
EndProject
15+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestApia.Extensions.Import.Postman", "src\Extensions\RestApia.Extensions.Import.Postman\RestApia.Extensions.Import.Postman.csproj", "{00CAA372-8954-4A50-94C5-6574EBACC467}"
16+
EndProject
17+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Playground", "Playground", "{B9D6F201-FDF7-42BB-A688-C8CBC51B4718}"
18+
EndProject
19+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestApia.Experiments.Tests", "src\Playground\RestApia.Experiments.Tests\RestApia.Experiments.Tests.csproj", "{200B00D8-9D09-464F-B4A8-B7DEC68EE9E8}"
20+
EndProject
1521
Global
1622
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1723
Debug|Any CPU = Debug|Any CPU
@@ -34,10 +40,20 @@ Global
3440
{35A67EB2-CF2D-40B2-B598-685D70F9D94D}.Debug|Any CPU.Build.0 = Debug|Any CPU
3541
{35A67EB2-CF2D-40B2-B598-685D70F9D94D}.Release|Any CPU.ActiveCfg = Release|Any CPU
3642
{35A67EB2-CF2D-40B2-B598-685D70F9D94D}.Release|Any CPU.Build.0 = Release|Any CPU
43+
{00CAA372-8954-4A50-94C5-6574EBACC467}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
44+
{00CAA372-8954-4A50-94C5-6574EBACC467}.Debug|Any CPU.Build.0 = Debug|Any CPU
45+
{00CAA372-8954-4A50-94C5-6574EBACC467}.Release|Any CPU.ActiveCfg = Release|Any CPU
46+
{00CAA372-8954-4A50-94C5-6574EBACC467}.Release|Any CPU.Build.0 = Release|Any CPU
47+
{200B00D8-9D09-464F-B4A8-B7DEC68EE9E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
48+
{200B00D8-9D09-464F-B4A8-B7DEC68EE9E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
49+
{200B00D8-9D09-464F-B4A8-B7DEC68EE9E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
50+
{200B00D8-9D09-464F-B4A8-B7DEC68EE9E8}.Release|Any CPU.Build.0 = Release|Any CPU
3751
EndGlobalSection
3852
GlobalSection(NestedProjects) = preSolution
3953
{9B2C67A1-83B9-157D-5EAF-ADD07B0E8D3F} = {E2CF6B65-E284-39DA-C77D-4FDAB55B16AD}
4054
{AE97EEF8-CE4E-0976-B0FB-8C4FC7616E01} = {E2CF6B65-E284-39DA-C77D-4FDAB55B16AD}
4155
{35A67EB2-CF2D-40B2-B598-685D70F9D94D} = {07A0437C-C5B5-4FC9-AA80-71C96A11FF54}
56+
{00CAA372-8954-4A50-94C5-6574EBACC467} = {E2CF6B65-E284-39DA-C77D-4FDAB55B16AD}
57+
{200B00D8-9D09-464F-B4A8-B7DEC68EE9E8} = {B9D6F201-FDF7-42BB-A688-C8CBC51B4718}
4258
EndGlobalSection
4359
EndGlobal

build-all.ps1

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
param(
2+
[string]$version = ""
3+
)
4+
5+
# call script in cli
6+
nuke Solution_Clean
7+
nuke Shared_Build --SharedLibVersion $version
8+
9+
# find all in Extensions folder
10+
$extensions = Get-ChildItem -Path .\src\Extensions -Directory
11+
foreach ($extension in $extensions) {
12+
nuke Extension_Build --ExtensionName $extension.Name --ExtensionLibVersion $version
13+
}
14+
15+
# find all nupkg files and store to one folder
16+
$nugetsFolder = ".\.local\nuget"
17+
if (Test-Path .\.local\nuget) {
18+
Remove-Item -Path $nugetsFolder -Recurse -Force
19+
}
20+
New-Item -ItemType Directory -Path $nugetsFolder -Force
21+
22+
$files = Get-ChildItem -Path .\.local\builds -Recurse -Filter *.nupkg
23+
$files | ForEach-Object { Copy-Item $_.FullName -Destination $nugetsFolder -Force }

src/Extensions/Directory.Build.props

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<RepositoryUrl>https://github.com/RestApia/RestApia.Shared</RepositoryUrl>
77
<PackageLicenseExpression>MIT</PackageLicenseExpression>
88
<PackageReadmeFile>README.md</PackageReadmeFile>
9+
<PackageReleaseNotes>RestApia: 0.3.0</PackageReleaseNotes>
910
</PropertyGroup>
1011

1112
<ItemGroup>

src/Extensions/RestApia.Extensions.Auth.Basic/BasicAuthService.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Text;
2-
using RestApia.Shared.Extensions.Interfaces;
3-
using RestApia.Shared.Extensions.Models;
4-
using RestApia.Shared.Values.Enums;
2+
using RestApia.Shared.Common.Enums;
3+
using RestApia.Shared.Common.Models;
4+
using RestApia.Shared.Extensions.AuthService;
55
namespace RestApia.Extensions.Auth.Basic;
66

77
public class BasicAuthService : IAuthService

src/Extensions/RestApia.Extensions.Auth.Basic/BasicAuthSettings.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using RestApia.Shared.Values.Attributes;
1+
using RestApia.Shared.Common.Attributes;
22
namespace RestApia.Extensions.Auth.Basic;
33

44
public record BasicAuthSettings

src/Extensions/RestApia.Extensions.Auth.Basic/RestApia.Extensions.Auth.Basic.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
<Title>Basic Authorization extension</Title>
44
<Description>Generate Authorization header based on settings for requests.</Description>
55
<RepositoryUrl>https://github.com/RestApia/RestApia.Shared/tree/main/src/Extensions/RestApia.Extensions.Auth.Basic</RepositoryUrl>
6-
<PackageTags>RestApiaEmbedded, Extension</PackageTags>
6+
<PackageTags>RestApiaEmbedded, Extension, Authorization</PackageTags>
77
</PropertyGroup>
88
</Project>

src/Extensions/RestApia.Extensions.Auth.OAuth2/AuthCode/OAuth2AuthCodeService.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
using Newtonsoft.Json;
44
using Newtonsoft.Json.Linq;
55
using RestApia.Shared.Common;
6-
using RestApia.Shared.Extensions.Interfaces;
7-
using RestApia.Shared.Extensions.Models;
8-
using RestApia.Shared.Values.Enums;
6+
using RestApia.Shared.Common.Enums;
7+
using RestApia.Shared.Common.Interfaces;
8+
using RestApia.Shared.Common.Models;
9+
using RestApia.Shared.Extensions.AuthService;
910
namespace RestApia.Extensions.Auth.OAuth2.AuthCode;
1011

1112
public class OAuth2AuthCodeService : IAuthService

src/Extensions/RestApia.Extensions.Auth.OAuth2/AuthCode/OAuth2AuthCodeSettings.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using RestApia.Shared.Values.Attributes;
1+
using RestApia.Shared.Common.Attributes;
22
namespace RestApia.Extensions.Auth.OAuth2.AuthCode;
33

44
public record OAuth2AuthCodeSettings

src/Extensions/RestApia.Extensions.Auth.OAuth2/Implicit/OAuth2ImplicitService.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using System.Web;
22
using RestApia.Shared.Common;
3-
using RestApia.Shared.Extensions.Interfaces;
4-
using RestApia.Shared.Extensions.Models;
5-
using RestApia.Shared.Values.Enums;
3+
using RestApia.Shared.Common.Enums;
4+
using RestApia.Shared.Common.Interfaces;
5+
using RestApia.Shared.Common.Models;
6+
using RestApia.Shared.Extensions.AuthService;
67
namespace RestApia.Extensions.Auth.OAuth2.Implicit;
78

89
public class OAuth2ImplicitService : IAuthService

src/Extensions/RestApia.Extensions.Auth.OAuth2/Implicit/OAuth2ImplicitSettings.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using RestApia.Shared.Values.Attributes;
1+
using RestApia.Shared.Common.Attributes;
22
namespace RestApia.Extensions.Auth.OAuth2.Implicit;
33

44
public record OAuth2ImplicitSettings

src/Extensions/RestApia.Extensions.Auth.OAuth2/OAuth2Helper.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using System.Diagnostics.CodeAnalysis;
33
using System.IdentityModel.Tokens.Jwt;
44
using System.Web;
5-
using RestApia.Shared.Extensions.Interfaces;
6-
using RestApia.Shared.Extensions.Models;
7-
using RestApia.Shared.Values.Enums;
5+
using RestApia.Shared.Common.Enums;
6+
using RestApia.Shared.Common.Interfaces;
7+
using RestApia.Shared.Common.Models;
88

99
namespace RestApia.Extensions.Auth.OAuth2;
1010

src/Extensions/RestApia.Extensions.Auth.OAuth2/RestApia.Extensions.Auth.OAuth2.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<Title>OAuth2 Authorization extension</Title>
44
<Description>Extension provides OAuth2 Implicit and AuthCode authorizations</Description>
55
<RepositoryUrl>https://github.com/RestApia/RestApia.Shared/tree/main/src/Extensions/RestApia.Extensions.Auth.OAuth2</RepositoryUrl>
6-
<PackageTags>RestApiaEmbedded, Extension</PackageTags>
6+
<PackageTags>RestApiaEmbedded, Extension, Authorization</PackageTags>
77
</PropertyGroup>
88

99
<ItemGroup>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
using Newtonsoft.Json.Linq;
2+
namespace RestApia.Extensions.Import.Postman.Abstract;
3+
4+
internal record JDataModel(JObject Data, PostmanJsonType Type);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace RestApia.Extensions.Import.Postman.Abstract;
2+
3+
internal enum PostmanJsonType
4+
{
5+
Unknown,
6+
Collection,
7+
Environment,
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Newtonsoft.Json.Linq;
2+
using RestApia.Shared.Common.Models;
3+
namespace RestApia.Extensions.Import.Postman.Logic;
4+
5+
public static class ImportAuthBasic
6+
{
7+
public static AuthContentModel Import(JToken data)
8+
{
9+
var values = Tools.ParseValues(data["basic"] as JArray ?? [])
10+
.ToDictionary(x => x.Key, x => x.Value);
11+
12+
var settings = new Dictionary<string, string>
13+
{
14+
{ "UserName", values.GetValueOrDefault("username", string.Empty) },
15+
{ "Password", values.GetValueOrDefault("password", string.Empty) },
16+
};
17+
18+
return new ()
19+
{
20+
Name = "Basic Authorization",
21+
Content = Tools.SerializeValues(settings),
22+
SettingsClassFullName = "RestApia.Extensions.Auth.Basic.BasicAuthSettings",
23+
};
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
using Newtonsoft.Json.Linq;
2+
using RestApia.Shared.Common.Models;
3+
namespace RestApia.Extensions.Import.Postman.Logic;
4+
5+
internal static class ImportAuthOAuth2
6+
{
7+
public static AuthContentModel? Import(JToken data)
8+
{
9+
var values = Tools.ParseValues(data["oauth2"] as JArray ?? [])
10+
.ToDictionary(x => x.Key, x => x.Value);
11+
12+
var grandType = values.GetValueOrDefault("grant_type", string.Empty);
13+
return grandType switch
14+
{
15+
"authorization_code" => ParseAuthOAuth2AuthorizationCode(values),
16+
_ => ParseAuthOAuth2UnknownGrandType(data),
17+
};
18+
}
19+
20+
private static AuthContentModel ParseAuthOAuth2AuthorizationCode(Dictionary<string, string> values)
21+
{
22+
// OAuth2AuthCodeSettings object
23+
var settings = new Dictionary<string, string>
24+
{
25+
{ "AuthUrl", values.GetValueOrDefault("authUrl", string.Empty) },
26+
{ "AccessTokenUrl", values.GetValueOrDefault("accessTokenUrl", string.Empty) },
27+
{ "RedirectUrl", values.GetValueOrDefault("redirect_uri", string.Empty) },
28+
{ "ClientId", values.GetValueOrDefault("clientId", string.Empty) },
29+
{ "ClientSecret", values.GetValueOrDefault("clientSecret", string.Empty) },
30+
{ "Scopes", values.GetValueOrDefault("scope", string.Empty) },
31+
{ "CredentialsSendMethod", values.GetValueOrDefault("client_authentication", string.Empty).Equals("body", StringComparison.OrdinalIgnoreCase) ? "Body" : "Header" },
32+
};
33+
34+
return new AuthContentModel
35+
{
36+
Name = "OAuth2 - Authorization Code",
37+
SettingsClassFullName = "RestApia.Extensions.Auth.OAuth2.AuthCode.OAuth2AuthCodeSettings",
38+
Content = Tools.SerializeValues(settings),
39+
};
40+
}
41+
42+
private static AuthContentModel? ParseAuthOAuth2UnknownGrandType(JToken data)
43+
{
44+
var result = ImportCollection.ParseAuthUnsupported(data);
45+
if (result == null) return null;
46+
47+
return result with
48+
{
49+
Name = "OAuth2 - Unsupported grant type",
50+
Content = $"// Unsupported OAuth2 grant type: {data["grant_type"]}\r\n" + result.Content,
51+
};
52+
}
53+
}

0 commit comments

Comments
 (0)