BasicHttpsSecurity.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. //------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------
  4. namespace System.ServiceModel
  5. {
  6. using System.ComponentModel;
  7. using System.Runtime;
  8. using System.ServiceModel.Channels;
  9. using System.ServiceModel.Configuration;
  10. public sealed class BasicHttpsSecurity
  11. {
  12. internal const BasicHttpsSecurityMode DefaultMode = BasicHttpsSecurityMode.Transport;
  13. BasicHttpSecurity basicHttpSecurity;
  14. public BasicHttpsSecurity()
  15. : this(DefaultMode, new HttpTransportSecurity(), new BasicHttpMessageSecurity())
  16. {
  17. }
  18. BasicHttpsSecurity(BasicHttpsSecurityMode mode, HttpTransportSecurity transportSecurity, BasicHttpMessageSecurity messageSecurity)
  19. {
  20. if (!BasicHttpsSecurityModeHelper.IsDefined(mode))
  21. {
  22. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("mode"));
  23. }
  24. HttpTransportSecurity httpTransportSecurity = transportSecurity == null ? new HttpTransportSecurity() : transportSecurity;
  25. BasicHttpMessageSecurity httpMessageSecurity = messageSecurity == null ? new BasicHttpMessageSecurity() : messageSecurity;
  26. BasicHttpSecurityMode basicHttpSecurityMode = BasicHttpsSecurityModeHelper.ToBasicHttpSecurityMode(mode);
  27. this.basicHttpSecurity = new BasicHttpSecurity()
  28. {
  29. Mode = basicHttpSecurityMode,
  30. Transport = httpTransportSecurity,
  31. Message = httpMessageSecurity
  32. };
  33. }
  34. public BasicHttpsSecurityMode Mode
  35. {
  36. get
  37. {
  38. return BasicHttpsSecurityModeHelper.ToBasicHttpsSecurityMode(this.basicHttpSecurity.Mode);
  39. }
  40. set
  41. {
  42. if (!BasicHttpsSecurityModeHelper.IsDefined(value))
  43. {
  44. throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value"));
  45. }
  46. this.basicHttpSecurity.Mode = BasicHttpsSecurityModeHelper.ToBasicHttpSecurityMode(value);
  47. }
  48. }
  49. public HttpTransportSecurity Transport
  50. {
  51. get
  52. {
  53. return this.basicHttpSecurity.Transport;
  54. }
  55. set
  56. {
  57. this.basicHttpSecurity.Transport = value;
  58. }
  59. }
  60. public BasicHttpMessageSecurity Message
  61. {
  62. get
  63. {
  64. return this.basicHttpSecurity.Message;
  65. }
  66. set
  67. {
  68. this.basicHttpSecurity.Message = value;
  69. }
  70. }
  71. internal BasicHttpSecurity BasicHttpSecurity
  72. {
  73. get
  74. {
  75. return this.basicHttpSecurity;
  76. }
  77. }
  78. [EditorBrowsable(EditorBrowsableState.Never)]
  79. public bool ShouldSerializeMessage()
  80. {
  81. return this.basicHttpSecurity.ShouldSerializeMessage();
  82. }
  83. [EditorBrowsable(EditorBrowsableState.Never)]
  84. public bool ShouldSerializeTransport()
  85. {
  86. return this.basicHttpSecurity.ShouldSerializeTransport();
  87. }
  88. internal static BasicHttpSecurity ToBasicHttpSecurity(BasicHttpsSecurity basicHttpsSecurity)
  89. {
  90. Fx.Assert(basicHttpsSecurity != null, "Cannot pass in a null value for basicHttpsSecurity");
  91. BasicHttpSecurity basicHttpSecurity = new BasicHttpSecurity()
  92. {
  93. Message = basicHttpsSecurity.Message,
  94. Transport = basicHttpsSecurity.Transport,
  95. Mode = BasicHttpsSecurityModeHelper.ToBasicHttpSecurityMode(basicHttpsSecurity.Mode)
  96. };
  97. return basicHttpSecurity;
  98. }
  99. internal static BasicHttpsSecurity ToBasicHttpsSecurity(BasicHttpSecurity basicHttpSecurity)
  100. {
  101. Fx.Assert(basicHttpSecurity != null, "basicHttpSecurity cannot be null");
  102. BasicHttpsSecurity basicHttpsSecurity = new BasicHttpsSecurity()
  103. {
  104. Message = basicHttpSecurity.Message,
  105. Transport = basicHttpSecurity.Transport,
  106. Mode = BasicHttpsSecurityModeHelper.ToBasicHttpsSecurityMode(basicHttpSecurity.Mode)
  107. };
  108. return basicHttpsSecurity;
  109. }
  110. internal static void EnableTransportSecurity(HttpsTransportBindingElement https, HttpTransportSecurity transportSecurity)
  111. {
  112. BasicHttpSecurity.EnableTransportSecurity(https, transportSecurity);
  113. }
  114. internal static bool IsEnabledTransportAuthentication(HttpTransportBindingElement http, HttpTransportSecurity transportSecurity)
  115. {
  116. return BasicHttpSecurity.IsEnabledTransportAuthentication(http, transportSecurity);
  117. }
  118. internal void EnableTransportSecurity(HttpsTransportBindingElement https)
  119. {
  120. this.basicHttpSecurity.EnableTransportSecurity(https);
  121. }
  122. internal void EnableTransportAuthentication(HttpTransportBindingElement http)
  123. {
  124. this.basicHttpSecurity.EnableTransportAuthentication(http);
  125. }
  126. internal void DisableTransportAuthentication(HttpTransportBindingElement http)
  127. {
  128. this.basicHttpSecurity.DisableTransportAuthentication(http);
  129. }
  130. internal SecurityBindingElement CreateMessageSecurity()
  131. {
  132. return this.basicHttpSecurity.CreateMessageSecurity();
  133. }
  134. internal bool InternalShouldSerialize()
  135. {
  136. // Default Security mode here is different from that of BasicHttpBinding. Therefore, we do not call into basicHttpSecurity here.
  137. return this.Mode != BasicHttpsSecurity.DefaultMode
  138. || this.ShouldSerializeMessage()
  139. || this.ShouldSerializeTransport();
  140. }
  141. }
  142. }