using System;
using System.Collections.Generic;
using System.Text;
using DotNetOpenId.RelyingParty;
using System.Globalization;
using System.Diagnostics;
namespace DotNetOpenId.Extensions.AttributeExchange {
///
/// The Attribute Exchange Store message, response leg.
///
public sealed class StoreResponse : IExtensionResponse {
const string SuccessMode = "store_response_success";
const string FailureMode = "store_response_failure";
///
/// Whether the storage request succeeded.
///
public bool Succeeded { get; set; }
///
/// The reason for the failure.
///
public string FailureReason { get; set; }
#region IExtensionResponse Members
string IExtension.TypeUri { get { return Constants.TypeUri; } }
IEnumerable IExtension.AdditionalSupportedTypeUris {
get { return new string[0]; }
}
IDictionary IExtensionResponse.Serialize(Provider.IRequest authenticationRequest) {
var fields = new Dictionary {
{ "mode", Succeeded ? SuccessMode : FailureMode },
};
if (!Succeeded && !string.IsNullOrEmpty(FailureReason))
fields.Add("error", FailureReason);
return fields;
}
bool IExtensionResponse.Deserialize(IDictionary fields, IAuthenticationResponse response, string typeUri) {
if (fields == null) return false;
string mode;
if (!fields.TryGetValue("mode", out mode)) return false;
switch (mode) {
case SuccessMode:
Succeeded = true;
break;
case FailureMode:
Succeeded = false;
break;
default:
return false;
}
if (!Succeeded) {
string error;
if (fields.TryGetValue("error", out error))
FailureReason = error;
}
return true;
}
#endregion
}
}