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