diff --git a/Directory.Build.props b/Directory.Build.props index 6b2899f..f9a4842 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,27 +1,32 @@ - MIT - https://github.com/IntelliTect/Multitool - https://github.com/IntelliTect/Multitool - IntelliTect - - true - - - true - - - true - snupkg + MIT + https://github.com/IntelliTect/Multitool + https://github.com/IntelliTect/Multitool + IntelliTect + + true + + + true + + + true + snupkg + + + 10.0 + true + enable - true + true - - - all - runtime; build; native; contentfiles; analyzers - + + + all + runtime; build; native; contentfiles; analyzers + - \ No newline at end of file + diff --git a/IntelliTect.Multitool.Tests/ClaimsPrincipalGetRolesTests.cs b/IntelliTect.Multitool.Tests/ClaimsPrincipalGetRolesTests.cs index 0be8a21..1f51c2a 100644 --- a/IntelliTect.Multitool.Tests/ClaimsPrincipalGetRolesTests.cs +++ b/IntelliTect.Multitool.Tests/ClaimsPrincipalGetRolesTests.cs @@ -11,9 +11,9 @@ public class ClaimsPrincipalGetRolesTests [Fact] public void WhenClaimsPrincipalNull_Should_Throw() { - ClaimsPrincipal sut = null; + ClaimsPrincipal? sut = null; - Assert.Throws(() => sut.GetRoles()); + Assert.Throws(() => sut!.GetRoles()); } [Fact] diff --git a/IntelliTect.Multitool.Tests/ClaimsPrincipalGetUserIdTests.cs b/IntelliTect.Multitool.Tests/ClaimsPrincipalGetUserIdTests.cs index b6c0fb4..790e441 100644 --- a/IntelliTect.Multitool.Tests/ClaimsPrincipalGetUserIdTests.cs +++ b/IntelliTect.Multitool.Tests/ClaimsPrincipalGetUserIdTests.cs @@ -4,32 +4,31 @@ using IntelliTect.Multitool.Security; using Xunit; -namespace IntelliTect.Multitool.Tests +namespace IntelliTect.Multitool.Tests; + +public class ClaimsPrincipalGetUserIdTests { - public class ClaimsPrincipalGetUserIdTests + [Fact] + public void WhenClaimsPrincipalNull_Should_Throw() { - [Fact] - public void WhenClaimsPrincipalNull_Should_Throw() - { - ClaimsPrincipal sut = null; + ClaimsPrincipal? sut = null; - Assert.Throws(() => sut.GetUserId()); - } + Assert.Throws(() => sut!.GetUserId()); + } - [Fact] - public void WhenClaimsPrincipalHasNoProperty_Should_ReturnNull() - { - ClaimsPrincipal sut = new ClaimsPrincipal(); + [Fact] + public void WhenClaimsPrincipalHasNoProperty_Should_ReturnNull() + { + ClaimsPrincipal sut = new ClaimsPrincipal(); - Assert.Null(sut.GetUserId()); - } + Assert.Null(sut.GetUserId()); + } - [Fact] - public void WhenClaimsPrincipalHasId_Should_ReturnString() - { - ClaimsPrincipal sut = new GenericPrincipal(new GenericIdentity("Taki The Frog"), new []{ "Bar" } ); + [Fact] + public void WhenClaimsPrincipalHasId_Should_ReturnString() + { + ClaimsPrincipal sut = new GenericPrincipal(new GenericIdentity("Taki The Frog"), new []{ "Bar" } ); - Assert.Equal("Taki The Frog", sut.GetUserId()); - } + Assert.Equal("Taki The Frog", sut.GetUserId()); } } \ No newline at end of file diff --git a/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs b/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs new file mode 100644 index 0000000..fe10bf5 --- /dev/null +++ b/IntelliTect.Multitool.Tests/RepositoryPaths.Tests.cs @@ -0,0 +1,16 @@ +using System; +using System.Security.Claims; +using System.Security.Principal; +using Xunit; + +namespace IntelliTect.Multitool.Tests; + +public class RepositoryPathsTests +{ + [Fact] + public void GetDefaultRepoRoot_ReturnsRepoRootDirectory() + { + // Makes the assumption that the repository directory for this solution is named the same as the solution + Assert.EndsWith(nameof(Multitool), RepositoryPaths.GetDefaultRepoRoot()); + } +} \ No newline at end of file diff --git a/IntelliTect.Multitool/RepositoryPaths.cs b/IntelliTect.Multitool/RepositoryPaths.cs new file mode 100644 index 0000000..44a1723 --- /dev/null +++ b/IntelliTect.Multitool/RepositoryPaths.cs @@ -0,0 +1,28 @@ +namespace IntelliTect.Multitool; +/// +/// Provides normalized paths. +/// +public static class RepositoryPaths +{ + /// + /// Finds the root of the repository by looking for the .git folder. + /// + /// Full path to repo root + public static string GetDefaultRepoRoot() + { + DirectoryInfo? currentDirectory = new(Directory.GetCurrentDirectory()); + + while (currentDirectory is not null) + { + DirectoryInfo[] subDirectories = currentDirectory.GetDirectories(".git"); + if (subDirectories.Length > 0) + { + return currentDirectory.FullName; + } + + currentDirectory = currentDirectory.Parent; + } + + throw new InvalidOperationException("Could not find the repo root directory from the current directory. Current directory is expected to be the repoRoot sub directory."); + } +} \ No newline at end of file diff --git a/IntelliTect.Multitool/Security/ClaimsPrincipalExtensions.cs b/IntelliTect.Multitool/Security/ClaimsPrincipalExtensions.cs index 24e0b39..68df923 100644 --- a/IntelliTect.Multitool/Security/ClaimsPrincipalExtensions.cs +++ b/IntelliTect.Multitool/Security/ClaimsPrincipalExtensions.cs @@ -3,42 +3,45 @@ using System.Linq; using System.Security.Claims; -namespace IntelliTect.Multitool.Security +namespace IntelliTect.Multitool.Security; + +/// +/// Gets information from a +/// +public static class ClaimsPrincipalExtensions { /// - /// Gets information from a + /// Gets the user ID from a . /// - public static class ClaimsPrincipalExtensions + /// The to find a user ID for. + /// A , or null if the doesn't contain a . + /// principal is null. + public static string? GetUserId(this ClaimsPrincipal principal) { - /// - /// Gets the user ID from a . - /// - /// The to find a user ID for. - /// A , or null if the doesn't contain a . - /// principal is null. - public static string GetUserId(this ClaimsPrincipal principal) - { - if (principal == null) throw new ArgumentNullException(nameof(principal)); + if (principal is null) throw new ArgumentNullException(nameof(principal)); - Claim claim = principal.FindFirst(ClaimTypes.NameIdentifier); - if (claim != null) return claim.Value; + Claim? claim = principal.FindFirst(ClaimTypes.NameIdentifier); + if (claim is null) + { claim = principal.FindFirst(ClaimTypes.Name); return claim?.Value; } + return claim.Value; + } - /// - /// Gets all the roles a belongs to. - /// - /// The to find roles for. - /// An of if found, or an empty set. - /// principal is null. - public static IEnumerable GetRoles(this ClaimsPrincipal principal) - { - if (principal == null) throw new ArgumentNullException(nameof(principal)); - IEnumerable claims = principal.FindAll(ClaimTypes.Role); - return claims?.Select(claim => claim.Value) ?? Enumerable.Empty(); - } + /// + /// Gets all the roles a belongs to. + /// + /// The to find roles for. + /// An of if found, or an empty set. + /// principal is null. + public static IEnumerable GetRoles(this ClaimsPrincipal principal) + { + if (principal is null) throw new ArgumentNullException(nameof(principal)); + + IEnumerable claims = principal.FindAll(ClaimTypes.Role); + return claims.Select(claim => claim.Value); } } \ No newline at end of file