Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ClaimsIdentity.cs
Go to the documentation of this file.
2using System.IO;
5
7
9{
10 private enum SerializationMask
11 {
12 None = 0,
15 NameClaimType = 4,
16 RoleClaimType = 8,
17 HasClaims = 0x10,
18 HasLabel = 0x20,
19 Actor = 0x40,
20 UserData = 0x80
21 }
22
23 private byte[] _userSerializationData;
24
26
27 private string _authenticationType;
28
29 private object _bootstrapContext;
30
32
33 private string _label;
34
35 private readonly List<Claim> _instanceClaims = new List<Claim>();
36
37 private string _nameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name";
38
39 private string _roleClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
40
41 public const string DefaultIssuer = "LOCAL AUTHORITY";
42
43 public const string DefaultNameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name";
44
45 public const string DefaultRoleClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
46
47 public virtual string? AuthenticationType => _authenticationType;
48
49 public virtual bool IsAuthenticated => !string.IsNullOrEmpty(_authenticationType);
50
52 {
53 get
54 {
55 return _actor;
56 }
57 set
58 {
59 if (value != null && IsCircular(value))
60 {
62 }
63 _actor = value;
64 }
65 }
66
67 public object? BootstrapContext
68 {
69 get
70 {
71 return _bootstrapContext;
72 }
73 set
74 {
76 }
77 }
78
79 public virtual IEnumerable<Claim> Claims
80 {
81 get
82 {
83 if (_externalClaims == null)
84 {
85 return _instanceClaims;
86 }
88 }
89 }
90
91 protected virtual byte[]? CustomSerializationData => _userSerializationData;
92
94 {
95 get
96 {
97 if (_externalClaims == null)
98 {
100 }
101 return _externalClaims;
102 }
103 }
104
105 public string? Label
106 {
107 get
108 {
109 return _label;
110 }
111 set
112 {
113 _label = value;
114 }
115 }
116
117 public virtual string? Name => FindFirst(_nameClaimType)?.Value;
118
120
122
124 : this(null, null, null, null, null)
125 {
126 }
127
128 public ClaimsIdentity(IIdentity? identity)
129 : this(identity, null, null, null, null)
130 {
131 }
132
137
142
147
149 : this(identity, claims, null, null, null)
150 {
151 }
152
153 public ClaimsIdentity(string? authenticationType, string? nameType, string? roleType)
155 {
156 }
157
162
164 {
166 _authenticationType = ((identity != null && string.IsNullOrEmpty(authenticationType)) ? identity.AuthenticationType : authenticationType);
167 _nameClaimType = ((!string.IsNullOrEmpty(nameType)) ? nameType : ((claimsIdentity != null) ? claimsIdentity._nameClaimType : "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"));
168 _roleClaimType = ((!string.IsNullOrEmpty(roleType)) ? roleType : ((claimsIdentity != null) ? claimsIdentity._roleClaimType : "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"));
169 if (claimsIdentity != null)
170 {
171 _label = claimsIdentity._label;
172 _bootstrapContext = claimsIdentity._bootstrapContext;
173 if (claimsIdentity.Actor != null)
174 {
175 if (IsCircular(claimsIdentity.Actor))
176 {
178 }
179 _actor = claimsIdentity.Actor;
180 }
181 SafeAddClaims(claimsIdentity._instanceClaims);
182 }
183 else if (identity != null && !string.IsNullOrEmpty(identity.Name))
184 {
185 SafeAddClaim(new Claim(_nameClaimType, identity.Name, "http://www.w3.org/2001/XMLSchema#string", "LOCAL AUTHORITY", "LOCAL AUTHORITY", this));
186 }
187 if (claims != null)
188 {
190 }
191 }
192
194 {
195 if (reader == null)
196 {
197 throw new ArgumentNullException("reader");
198 }
199 Initialize(reader);
200 }
201
203 {
204 if (other == null)
205 {
206 throw new ArgumentNullException("other");
207 }
208 if (other._actor != null)
209 {
211 }
212 _authenticationType = other._authenticationType;
213 _bootstrapContext = other._bootstrapContext;
214 _label = other._label;
215 _nameClaimType = other._nameClaimType;
216 _roleClaimType = other._roleClaimType;
217 if (other._userSerializationData != null)
218 {
219 _userSerializationData = other._userSerializationData.Clone() as byte[];
220 }
221 SafeAddClaims(other._instanceClaims);
222 }
223
228
233
235 {
236 for (int j = 0; j < _instanceClaims.Count; j++)
237 {
238 yield return _instanceClaims[j];
239 }
240 for (int j = 0; j < _externalClaims.Count; j++)
241 {
242 if (_externalClaims[j] == null)
243 {
244 continue;
245 }
246 foreach (Claim item in _externalClaims[j])
247 {
248 yield return item;
249 }
250 }
251 }
252
253 public virtual ClaimsIdentity Clone()
254 {
255 return new ClaimsIdentity(this);
256 }
257
258 public virtual void AddClaim(Claim claim)
259 {
260 if (claim == null)
261 {
262 throw new ArgumentNullException("claim");
263 }
264 if (claim.Subject == this)
265 {
267 }
268 else
269 {
270 _instanceClaims.Add(claim.Clone(this));
271 }
272 }
273
275 {
276 if (claims == null)
277 {
278 throw new ArgumentNullException("claims");
279 }
280 foreach (Claim claim in claims)
281 {
282 if (claim != null)
283 {
284 if (claim.Subject == this)
285 {
287 }
288 else
289 {
290 _instanceClaims.Add(claim.Clone(this));
291 }
292 }
293 }
294 }
295
296 public virtual bool TryRemoveClaim(Claim? claim)
297 {
298 if (claim == null)
299 {
300 return false;
301 }
302 bool result = false;
303 for (int i = 0; i < _instanceClaims.Count; i++)
304 {
305 if (_instanceClaims[i] == claim)
306 {
308 result = true;
309 break;
310 }
311 }
312 return result;
313 }
314
315 public virtual void RemoveClaim(Claim? claim)
316 {
317 if (!TryRemoveClaim(claim))
318 {
320 }
321 }
322
324 {
325 foreach (Claim claim in claims)
326 {
327 if (claim != null)
328 {
329 if (claim.Subject == this)
330 {
332 }
333 else
334 {
335 _instanceClaims.Add(claim.Clone(this));
336 }
337 }
338 }
339 }
340
342 {
343 if (claim != null)
344 {
345 if (claim.Subject == this)
346 {
348 }
349 else
350 {
351 _instanceClaims.Add(claim.Clone(this));
352 }
353 }
354 }
355
357 {
358 if (match == null)
359 {
360 throw new ArgumentNullException("match");
361 }
362 foreach (Claim claim in Claims)
363 {
364 if (match(claim))
365 {
366 yield return claim;
367 }
368 }
369 }
370
371 public virtual IEnumerable<Claim> FindAll(string type)
372 {
373 if (type == null)
374 {
375 throw new ArgumentNullException("type");
376 }
377 foreach (Claim claim in Claims)
378 {
379 if (claim != null && string.Equals(claim.Type, type, StringComparison.OrdinalIgnoreCase))
380 {
381 yield return claim;
382 }
383 }
384 }
385
387 {
388 if (match == null)
389 {
390 throw new ArgumentNullException("match");
391 }
392 foreach (Claim claim in Claims)
393 {
394 if (match(claim))
395 {
396 return claim;
397 }
398 }
399 return null;
400 }
401
402 public virtual Claim? FindFirst(string type)
403 {
404 if (type == null)
405 {
406 throw new ArgumentNullException("type");
407 }
408 foreach (Claim claim in Claims)
409 {
410 if (claim != null && string.Equals(claim.Type, type, StringComparison.OrdinalIgnoreCase))
411 {
412 return claim;
413 }
414 }
415 return null;
416 }
417
418 public virtual bool HasClaim(Predicate<Claim> match)
419 {
420 if (match == null)
421 {
422 throw new ArgumentNullException("match");
423 }
424 foreach (Claim claim in Claims)
425 {
426 if (match(claim))
427 {
428 return true;
429 }
430 }
431 return false;
432 }
433
434 public virtual bool HasClaim(string type, string value)
435 {
436 if (type == null)
437 {
438 throw new ArgumentNullException("type");
439 }
440 if (value == null)
441 {
442 throw new ArgumentNullException("value");
443 }
444 foreach (Claim claim in Claims)
445 {
446 if (claim != null && string.Equals(claim.Type, type, StringComparison.OrdinalIgnoreCase) && string.Equals(claim.Value, value, StringComparison.Ordinal))
447 {
448 return true;
449 }
450 }
451 return false;
452 }
453
454 private void Initialize(BinaryReader reader)
455 {
456 if (reader == null)
457 {
458 throw new ArgumentNullException("reader");
459 }
461 int num = 0;
462 int num2 = reader.ReadInt32();
463 if ((serializationMask & SerializationMask.AuthenticationType) == SerializationMask.AuthenticationType)
464 {
466 num++;
467 }
468 if ((serializationMask & SerializationMask.BootstrapConext) == SerializationMask.BootstrapConext)
469 {
470 _bootstrapContext = reader.ReadString();
471 num++;
472 }
473 if ((serializationMask & SerializationMask.NameClaimType) == SerializationMask.NameClaimType)
474 {
475 _nameClaimType = reader.ReadString();
476 num++;
477 }
478 else
479 {
480 _nameClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name";
481 }
482 if ((serializationMask & SerializationMask.RoleClaimType) == SerializationMask.RoleClaimType)
483 {
484 _roleClaimType = reader.ReadString();
485 num++;
486 }
487 else
488 {
489 _roleClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role";
490 }
491 if ((serializationMask & SerializationMask.HasLabel) == SerializationMask.HasLabel)
492 {
493 _label = reader.ReadString();
494 num++;
495 }
496 if ((serializationMask & SerializationMask.HasClaims) == SerializationMask.HasClaims)
497 {
498 int num3 = reader.ReadInt32();
499 for (int i = 0; i < num3; i++)
500 {
502 }
503 num++;
504 }
506 {
507 _actor = new ClaimsIdentity(reader);
508 num++;
509 }
510 if ((serializationMask & SerializationMask.UserData) == SerializationMask.UserData)
511 {
512 int count = reader.ReadInt32();
514 num++;
515 }
516 for (int j = num; j < num2; j++)
517 {
518 reader.ReadString();
519 }
520 }
521
522 protected virtual Claim CreateClaim(BinaryReader reader)
523 {
524 if (reader == null)
525 {
526 throw new ArgumentNullException("reader");
527 }
528 return new Claim(reader, this);
529 }
530
531 public virtual void WriteTo(BinaryWriter writer)
532 {
533 WriteTo(writer, null);
534 }
535
536 protected virtual void WriteTo(BinaryWriter writer, byte[]? userData)
537 {
538 if (writer == null)
539 {
540 throw new ArgumentNullException("writer");
541 }
542 int num = 0;
544 if (_authenticationType != null)
545 {
546 serializationMask |= SerializationMask.AuthenticationType;
547 num++;
548 }
549 if (_bootstrapContext != null && _bootstrapContext is string)
550 {
551 serializationMask |= SerializationMask.BootstrapConext;
552 num++;
553 }
554 if (!string.Equals(_nameClaimType, "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", StringComparison.Ordinal))
555 {
556 serializationMask |= SerializationMask.NameClaimType;
557 num++;
558 }
559 if (!string.Equals(_roleClaimType, "http://schemas.microsoft.com/ws/2008/06/identity/claims/role", StringComparison.Ordinal))
560 {
561 serializationMask |= SerializationMask.RoleClaimType;
562 num++;
563 }
564 if (!string.IsNullOrWhiteSpace(_label))
565 {
567 num++;
568 }
569 if (_instanceClaims.Count > 0)
570 {
572 num++;
573 }
574 if (_actor != null)
575 {
577 num++;
578 }
579 if (userData != null && userData.Length != 0)
580 {
581 num++;
583 }
584 writer.Write((int)serializationMask);
585 writer.Write(num);
586 if ((serializationMask & SerializationMask.AuthenticationType) == SerializationMask.AuthenticationType)
587 {
589 }
590 if ((serializationMask & SerializationMask.BootstrapConext) == SerializationMask.BootstrapConext)
591 {
592 writer.Write((string)_bootstrapContext);
593 }
594 if ((serializationMask & SerializationMask.NameClaimType) == SerializationMask.NameClaimType)
595 {
596 writer.Write(_nameClaimType);
597 }
598 if ((serializationMask & SerializationMask.RoleClaimType) == SerializationMask.RoleClaimType)
599 {
600 writer.Write(_roleClaimType);
601 }
602 if ((serializationMask & SerializationMask.HasLabel) == SerializationMask.HasLabel)
603 {
604 writer.Write(_label);
605 }
606 if ((serializationMask & SerializationMask.HasClaims) == SerializationMask.HasClaims)
607 {
610 {
611 instanceClaim.WriteTo(writer);
612 }
613 }
615 {
617 }
618 if ((serializationMask & SerializationMask.UserData) == SerializationMask.UserData)
619 {
620 writer.Write(userData.Length);
621 writer.Write(userData);
622 }
623 writer.Flush();
624 }
625
627 {
628 if (this == subject)
629 {
630 return true;
631 }
633 while (claimsIdentity.Actor != null)
634 {
635 if (this == claimsIdentity.Actor)
636 {
637 return true;
638 }
640 }
641 return false;
642 }
643
644 protected virtual void GetObjectData(SerializationInfo info, StreamingContext context)
645 {
647 }
648}
void RemoveAt(int index)
Definition List.cs:824
virtual string ReadString()
virtual int ReadInt32()
virtual byte[] ReadBytes(int count)
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string InvalidOperationException_ActorGraphCircular
Definition SR.cs:16
static string InvalidOperation_ClaimCannotBeRemoved
Definition SR.cs:14
Definition SR.cs:7
virtual void AddClaims(IEnumerable< Claim?> claims)
ClaimsIdentity(string? authenticationType, string? nameType, string? roleType)
virtual bool HasClaim(Predicate< Claim > match)
virtual ? Claim FindFirst(string type)
void SafeAddClaims(IEnumerable< Claim > claims)
ClaimsIdentity(SerializationInfo info, StreamingContext context)
ClaimsIdentity(IEnumerable< Claim >? claims, string? authenticationType)
readonly List< Claim > _instanceClaims
virtual ? Claim FindFirst(Predicate< Claim > match)
ClaimsIdentity(IEnumerable< Claim >? claims)
virtual void WriteTo(BinaryWriter writer)
virtual void RemoveClaim(Claim? claim)
ClaimsIdentity(IEnumerable< Claim >? claims, string? authenticationType, string? nameType, string? roleType)
virtual void AddClaim(Claim claim)
virtual void GetObjectData(SerializationInfo info, StreamingContext context)
virtual bool HasClaim(string type, string value)
bool IsCircular(ClaimsIdentity subject)
IEnumerable< Claim > CombinedClaimsIterator()
ClaimsIdentity(IIdentity? identity, IEnumerable< Claim >? claims, string? authenticationType, string? nameType, string? roleType)
virtual IEnumerable< Claim > FindAll(Predicate< Claim > match)
virtual bool TryRemoveClaim(Claim? claim)
virtual void WriteTo(BinaryWriter writer, byte[]? userData)
ClaimsIdentity(SerializationInfo info)
ClaimsIdentity(string? authenticationType)
ClaimsIdentity(IIdentity? identity, IEnumerable< Claim >? claims)
void Initialize(BinaryReader reader)
virtual Claim CreateClaim(BinaryReader reader)
virtual IEnumerable< Claim > FindAll(string type)