AuthenticationManager.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // System.Net.AuthenticationManager.cs
  3. //
  4. // Author:
  5. // Miguel de Icaza ([email protected])
  6. // Gonzalo Paniagua Javier ([email protected])
  7. //
  8. // (C) 2002,2003 Ximian, Inc. (http://www.ximian.com)
  9. //
  10. using System.Collections;
  11. namespace System.Net
  12. {
  13. public class AuthenticationManager
  14. {
  15. static ArrayList modules;
  16. static void EnsureModules ()
  17. {
  18. if (modules != null)
  19. return;
  20. lock (typeof (AuthenticationManager)) {
  21. if (modules != null)
  22. return;
  23. modules = new ArrayList ();
  24. }
  25. }
  26. public static IEnumerator RegisteredModules {
  27. get {
  28. EnsureModules ();
  29. return modules.GetEnumerator ();
  30. }
  31. }
  32. public static Authorization Authenticate (string challenge, WebRequest request, ICredentials credentials)
  33. {
  34. if (request == null)
  35. throw new ArgumentNullException ("request");
  36. if (credentials == null)
  37. throw new ArgumentNullException ("credentials");
  38. if (challenge == null)
  39. throw new ArgumentNullException ("challenge");
  40. return DoAuthenticate (challenge, request, credentials);
  41. }
  42. static Authorization DoAuthenticate (string challenge, WebRequest request, ICredentials credentials)
  43. {
  44. EnsureModules ();
  45. lock (modules) {
  46. foreach (IAuthenticationModule mod in modules) {
  47. Authorization auth = mod.Authenticate (challenge, request, credentials);
  48. if (auth == null)
  49. continue;
  50. auth.Module = mod;
  51. return auth;
  52. }
  53. }
  54. return null;
  55. }
  56. [MonoTODO]
  57. public static Authorization PreAuthenticate (WebRequest request, ICredentials credentials)
  58. {
  59. if (request == null)
  60. throw new ArgumentNullException ("request");
  61. if (credentials == null)
  62. return null;
  63. return null;
  64. }
  65. public static void Register (IAuthenticationModule authenticationModule)
  66. {
  67. if (authenticationModule == null)
  68. throw new ArgumentNullException ("authenticationModule");
  69. DoUnregister (authenticationModule.AuthenticationType, false);
  70. lock (modules)
  71. modules.Add (authenticationModule);
  72. }
  73. public static void Unregister (IAuthenticationModule authenticationModule)
  74. {
  75. if (authenticationModule == null)
  76. throw new ArgumentNullException ("authenticationModule");
  77. EnsureModules ();
  78. lock (modules) {
  79. if (modules.Contains (authenticationModule))
  80. modules.Remove (authenticationModule);
  81. else
  82. throw new InvalidOperationException ("No such module registered.");
  83. }
  84. }
  85. public static void Unregister (string authenticationScheme)
  86. {
  87. if (authenticationScheme == null)
  88. throw new ArgumentNullException ("authenticationScheme");
  89. DoUnregister (authenticationScheme, true);
  90. }
  91. static void DoUnregister (string authenticationScheme, bool throwEx)
  92. {
  93. EnsureModules ();
  94. lock (modules) {
  95. IAuthenticationModule module = null;
  96. foreach (IAuthenticationModule mod in modules) {
  97. string modtype = mod.AuthenticationType;
  98. if (String.Compare (modtype, authenticationScheme, true) == 0) {
  99. module = mod;
  100. break;
  101. }
  102. }
  103. if (module == null) {
  104. if (throwEx)
  105. throw new InvalidOperationException ("Scheme not registered.");
  106. } else {
  107. modules.Remove (module);
  108. }
  109. }
  110. }
  111. }
  112. }