Skip to content

Commit 1027379

Browse files
authored
Create PrincipalExtensions.cs
1 parent 371a098 commit 1027379

File tree

1 file changed

+269
-0
lines changed

1 file changed

+269
-0
lines changed

PrincipalExtensions.cs

+269
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
using Samples.Shared.Exceptions;
2+
using Samples.Shared.Languages;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Diagnostics;
6+
using System.Linq;
7+
using System.Reflection;
8+
using System.Security.Claims;
9+
using System.Security.Principal;
10+
11+
namespace Samples.Shared.Security
12+
{
13+
public static class PrincipalExtensions
14+
{
15+
public static List<string> GetSamplesRoles(this IPrincipal principal)
16+
{
17+
try
18+
{
19+
return principal.GetClaims()
20+
.Where(claim => claim.Type == ClaimTypes.GroupSid)
21+
.Select(claim =>
22+
new
23+
{
24+
claim,
25+
roleName = new SecurityIdentifier(claim.Value).Translate(typeof(NTAccount)).Value
26+
})
27+
.Where(x => x.roleName.StartsWith(ActiveDirectorySettings.DomainAndPrefix,
28+
StringComparison.InvariantCultureIgnoreCase))
29+
.Select(x => x.roleName)
30+
.ToList();
31+
}
32+
catch (Exception exc)
33+
{
34+
var principalName = principal.GetName();
35+
var methodName = MethodBase.GetCurrentMethod().Name;
36+
37+
if (principal == null)
38+
{
39+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
40+
}
41+
else
42+
{
43+
var claims = principal.GetClaims();
44+
if (claims == null)
45+
{
46+
Trace.TraceError($"{principalName}: {methodName}: claims is NULL");
47+
}
48+
}
49+
50+
LogException(principalName, methodName, exc);
51+
return null;
52+
}
53+
}
54+
55+
public static string GetUpn(this IPrincipal principal)
56+
{
57+
try
58+
{
59+
return principal.GetSingleOrDefaultClaimValue(ClaimTypes.Upn);
60+
}
61+
catch (Exception exc)
62+
{
63+
var principalName = principal.GetName();
64+
var methodName = MethodBase.GetCurrentMethod().Name;
65+
66+
if (principal == null)
67+
{
68+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
69+
}
70+
71+
LogException(principalName, methodName, exc);
72+
return null;
73+
}
74+
}
75+
76+
public static string GetDomain(this IPrincipal principal)
77+
{
78+
try
79+
{
80+
return principal.GetSingleOrDefaultClaimValue(InfrabelClaimTypes.Domain);
81+
}
82+
catch (Exception exc)
83+
{
84+
var principalName = principal.GetName();
85+
var methodName = MethodBase.GetCurrentMethod().Name;
86+
87+
if (principal == null)
88+
{
89+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
90+
}
91+
92+
LogException(principalName, methodName, exc);
93+
return null;
94+
}
95+
}
96+
97+
private static string GetSingleOrDefaultClaimValue(this IPrincipal principal, string claimName)
98+
{
99+
try
100+
{
101+
return principal.GetClaims()
102+
.SingleOrDefault(claim => claim.Type == claimName)?.Value;
103+
}
104+
catch (Exception exc)
105+
{
106+
var principalName = principal.GetName();
107+
var methodName = MethodBase.GetCurrentMethod().Name;
108+
109+
if (principal == null)
110+
{
111+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
112+
}
113+
else
114+
{
115+
var claims = principal.GetClaims();
116+
117+
if (claims == null)
118+
{
119+
Trace.TraceError($"{principalName}: {methodName}: claims is NULL");
120+
}
121+
}
122+
123+
LogException(principalName, methodName, exc);
124+
return null;
125+
}
126+
}
127+
128+
private static IEnumerable<Claim> GetClaims(this IPrincipal principal)
129+
{
130+
try
131+
{
132+
return principal.GetClaimsIdentity().Claims;
133+
}
134+
catch (Exception exc)
135+
{
136+
var principalName = principal.GetName();
137+
var methodName = MethodBase.GetCurrentMethod().Name;
138+
139+
if (principal == null)
140+
{
141+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
142+
}
143+
else
144+
{
145+
var claimsIdentity = principal.GetClaimsIdentity();
146+
if (claimsIdentity == null)
147+
{
148+
Trace.TraceError($"{principalName}: {methodName}: claimsIdentity is NULL");
149+
}
150+
}
151+
152+
LogException(principalName, methodName, exc);
153+
return null;
154+
}
155+
}
156+
157+
public static ClaimsIdentity GetClaimsIdentity(this IPrincipal principal)
158+
{
159+
try
160+
{
161+
return (ClaimsIdentity)principal.GetClaimsPrincipal().Identity;
162+
}
163+
catch (Exception exc)
164+
{
165+
var principalName = principal.GetName();
166+
var methodName = MethodBase.GetCurrentMethod().Name;
167+
168+
if (principal == null)
169+
{
170+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
171+
}
172+
else
173+
{
174+
var claimsPrincipal = principal.GetClaimsPrincipal();
175+
if (claimsPrincipal == null)
176+
{
177+
Trace.TraceError($"{principalName}: {methodName}: claimsPrincipal is NULL");
178+
}
179+
}
180+
181+
LogException(principalName, methodName, exc);
182+
return null;
183+
}
184+
}
185+
186+
public static ClaimsPrincipal GetClaimsPrincipal(this IPrincipal principal)
187+
{
188+
try
189+
{
190+
return (ClaimsPrincipal)principal;
191+
}
192+
catch (Exception exc)
193+
{
194+
var principalName = principal.GetName();
195+
var methodName = MethodBase.GetCurrentMethod().Name;
196+
197+
if (principal == null)
198+
{
199+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
200+
}
201+
202+
LogException(principalName, methodName, exc);
203+
return null;
204+
}
205+
}
206+
207+
public static string GetCulture(this IPrincipal principal)
208+
{
209+
try
210+
{
211+
return principal.FindFirstClaimValue(InfrabelClaimTypes.Culture)
212+
?? CultureHelper.GetDefaultCulture();
213+
}
214+
catch (Exception exc)
215+
{
216+
var principalName = principal.GetName();
217+
var methodName = MethodBase.GetCurrentMethod().Name;
218+
219+
if (principal == null)
220+
{
221+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
222+
}
223+
224+
LogException(principalName, methodName, exc);
225+
return null;
226+
}
227+
}
228+
229+
private static string FindFirstClaimValue(this IPrincipal principal, string claim)
230+
{
231+
try
232+
{
233+
return principal.GetClaimsPrincipal().FindFirst(claim)?.Value;
234+
}
235+
catch (Exception exc)
236+
{
237+
var principalName = principal.GetName();
238+
var methodName = MethodBase.GetCurrentMethod().Name;
239+
240+
if (principal == null)
241+
{
242+
Trace.TraceError($"{principalName}: {methodName}: principal is NULL");
243+
}
244+
else
245+
{
246+
var claimsPrincipal = principal.GetClaimsPrincipal();
247+
if (claimsPrincipal == null)
248+
{
249+
Trace.TraceError($"{principalName}: {methodName}: claimsPrincipal is NULL");
250+
}
251+
}
252+
253+
LogException(principalName, methodName, exc);
254+
return null;
255+
}
256+
}
257+
258+
private static void LogException(string principalName, string methodName, Exception exc)
259+
{
260+
var exceptionMessage = ExceptionMessageRetriever.Execute(exc);
261+
Trace.TraceError($"{principalName}: {methodName}: {exceptionMessage}");
262+
}
263+
264+
private static string GetName(this IPrincipal principal)
265+
{
266+
return principal?.Identity?.Name ?? string.Empty;
267+
}
268+
}
269+
}

0 commit comments

Comments
 (0)