diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2008-08-24 16:57:55 -0700 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2008-08-24 16:57:55 -0700 |
commit | e87afcbc79c44f33254908439b3410db53786ef6 (patch) | |
tree | f98f0874542cc1f0ef510b393fef6872d06ef023 | |
parent | eeca58e319ed8e7801c2c122c868835b00e712d8 (diff) | |
download | DotNetOpenAuth-e87afcbc79c44f33254908439b3410db53786ef6.zip DotNetOpenAuth-e87afcbc79c44f33254908439b3410db53786ef6.tar.gz DotNetOpenAuth-e87afcbc79c44f33254908439b3410db53786ef6.tar.bz2 |
Added checks for successful XRI resolution status code.
-rw-r--r-- | src/DotNetOpenId/Strings.Designer.cs | 18 | ||||
-rw-r--r-- | src/DotNetOpenId/Strings.resx | 6 | ||||
-rw-r--r-- | src/DotNetOpenId/XriIdentifier.cs | 6 | ||||
-rw-r--r-- | src/DotNetOpenId/Yadis/XrdElement.cs | 22 | ||||
-rw-r--r-- | src/DotNetOpenId/Yadis/XrdsDocument.cs | 6 |
5 files changed, 54 insertions, 4 deletions
diff --git a/src/DotNetOpenId/Strings.Designer.cs b/src/DotNetOpenId/Strings.Designer.cs index bc00db1..36aff7f 100644 --- a/src/DotNetOpenId/Strings.Designer.cs +++ b/src/DotNetOpenId/Strings.Designer.cs @@ -603,5 +603,23 @@ namespace DotNetOpenId { return ResourceManager.GetString("UnspecifiedDateTimeKindNotAllowed", resourceCulture);
}
}
+
+ /// <summary>
+ /// Looks up a localized string similar to XRI resolution failed..
+ /// </summary>
+ internal static string XriResolutionFailed {
+ get {
+ return ResourceManager.GetString("XriResolutionFailed", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Could not find XRI resolution Status tag or code attribute was invalid..
+ /// </summary>
+ internal static string XriResolutionStatusMissing {
+ get {
+ return ResourceManager.GetString("XriResolutionStatusMissing", resourceCulture);
+ }
+ }
}
}
diff --git a/src/DotNetOpenId/Strings.resx b/src/DotNetOpenId/Strings.resx index f33d7b0ae..d96c267 100644 --- a/src/DotNetOpenId/Strings.resx +++ b/src/DotNetOpenId/Strings.resx @@ -301,4 +301,10 @@ Discovered endpoint info: <data name="UnspecifiedDateTimeKindNotAllowed" xml:space="preserve">
<value>Providing a DateTime whose Kind is Unspecified is not allowed.</value>
</data>
+ <data name="XriResolutionFailed" xml:space="preserve">
+ <value>XRI resolution failed.</value>
+ </data>
+ <data name="XriResolutionStatusMissing" xml:space="preserve">
+ <value>Could not find XRI resolution Status tag or code attribute was invalid.</value>
+ </data>
</root>
\ No newline at end of file diff --git a/src/DotNetOpenId/XriIdentifier.cs b/src/DotNetOpenId/XriIdentifier.cs index 0f73ce3..5bcbe2e 100644 --- a/src/DotNetOpenId/XriIdentifier.cs +++ b/src/DotNetOpenId/XriIdentifier.cs @@ -81,7 +81,11 @@ namespace DotNetOpenId { XrdsDocument downloadXrds() {
var xrdsResponse = UntrustedWebRequest.Request(XrdsUrl);
- return new XrdsDocument(XmlReader.Create(xrdsResponse.ResponseStream));
+ XrdsDocument doc = new XrdsDocument(XmlReader.Create(xrdsResponse.ResponseStream));
+ if (!doc.IsXrdResolutionSuccessful) {
+ throw new OpenIdException(Strings.XriResolutionFailed);
+ }
+ return doc;
}
internal override IEnumerable<ServiceEndpoint> Discover() {
diff --git a/src/DotNetOpenId/Yadis/XrdElement.cs b/src/DotNetOpenId/Yadis/XrdElement.cs index 8c3e0c3..5665f58 100644 --- a/src/DotNetOpenId/Yadis/XrdElement.cs +++ b/src/DotNetOpenId/Yadis/XrdElement.cs @@ -22,6 +22,28 @@ namespace DotNetOpenId.Yadis { }
}
+
+ int XriResolutionStatusCode {
+ get {
+ var n = Node.SelectSingleNode("xrd:Status", XmlNamespaceResolver);
+ string codeString;
+ if (n == null || string.IsNullOrEmpty(codeString = n.GetAttribute("code", ""))) {
+ throw new OpenIdException(Strings.XriResolutionStatusMissing);
+ }
+ int code;
+ if (!int.TryParse(codeString, out code) || code < 100 || code > 399) {
+ throw new OpenIdException(Strings.XriResolutionStatusMissing);
+ }
+ return code;
+ }
+ }
+
+ public bool IsXriResolutionSuccessful {
+ get {
+ return XriResolutionStatusCode == 100;
+ }
+ }
+
public string CanonicalID {
get {
var n = Node.SelectSingleNode("xrd:CanonicalID", XmlNamespaceResolver);
diff --git a/src/DotNetOpenId/Yadis/XrdsDocument.cs b/src/DotNetOpenId/Yadis/XrdsDocument.cs index 613d389..88966b3 100644 --- a/src/DotNetOpenId/Yadis/XrdsDocument.cs +++ b/src/DotNetOpenId/Yadis/XrdsDocument.cs @@ -86,7 +86,7 @@ namespace DotNetOpenId.Yadis { Logger.WarnFormat(Strings.MissingCanonicalIDElement, userSuppliedIdentifier);
break; // skip on to next service
}
- if (!IsCanonicalIDVerified) {
+ if (!service.Xrd.IsCanonicalIdVerified) {
throw new OpenIdException(Strings.CIDVerificationFailed, userSuppliedIdentifier);
}
// In the case of XRI names, the ClaimedId is actually the CanonicalID.
@@ -134,10 +134,10 @@ namespace DotNetOpenId.Yadis { }
}
- bool IsCanonicalIDVerified {
+ internal bool IsXrdResolutionSuccessful {
get {
foreach (var xrd in XrdElements) {
- if (!xrd.IsCanonicalIdVerified) {
+ if (!xrd.IsXriResolutionSuccessful) {
return false;
}
}
|