protected void Application_Start(object sender, EventArgs e) { XmlConfigurator.Configure(); Log.Debug("Starting Restbucks.Quoting.Service..."); var formsIntegrityUtility = new FormsIntegrityUtility(Signature.Instance, OrderForm.SignedFormPlaceholder); Action<Collection<HttpOperationHandler>> handlers = c => c.Add(new FormsIntegrityResponseHandler(formsIntegrityUtility)); var configuration = HttpHostConfiguration.Create() .SetResourceFactory( (type, ctx, message) => { Log.DebugFormat("Getting instance of type [{0}].", type.FullName); return container.GetService(type); }, (ctx, service) => { if (service is IDisposable) { Log.DebugFormat("Calling Dispose() on instance of type [{0}].", service.GetType().FullName); ((IDisposable) service).Dispose(); } }) .AddFormatters(RestbucksMediaType.Formatter) .AddResponseHandlers(handlers, (endpoint, operation) => operation.DeclaringContract.ContractType.Equals(typeof (OrderForm))); var uriFactory = new UriFactory(); var resources = new ResourceCollection(Assembly.GetExecutingAssembly()); resources.ForEach(r => { container.Register(Component.For(r.Type).LifeStyle.Transient); uriFactory.Register(r.Type); RouteTable.Routes.MapServiceRoute(r.Type, r.UriTemplate.RoutePrefix, configuration); Log.DebugFormat("Registered resource. Type: [{0}]. Prefix: [{1}]. UriTemplate: [{2}].", r.Type.Name, r.UriTemplate.RoutePrefix, r.UriTemplate.UriTemplateValue); }); container.Register(Component.For(typeof (IQuotationEngine)).ImplementedBy(typeof (QuotationEngine)).LifeStyle.Singleton); container.Register(Component.For(typeof (IDateTimeProvider)).ImplementedBy(typeof (DateTimeProvider)).LifeStyle.Singleton); container.Register(Component.For(typeof (IGuidProvider)).ImplementedBy(typeof (GuidProvider)).LifeStyle.Singleton); container.Register(Component.For(typeof (UriFactory)).Instance(uriFactory).LifeStyle.Singleton); }
private static void AssertProtectingFormCreatesExpectedXml(string originalXml, string expectedXml, IGenerateSignature signature) { using (var streamIn = new MemoryStream()) { using (var streamOut = new MemoryStream()) { var writer = new StreamWriter(streamIn); writer.Write(originalXml); writer.Flush(); var formProtection = new FormsIntegrityUtility(signature, "PLACEHOLDER"); formProtection.SignForms(streamIn, streamOut); streamOut.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(streamOut)) { var xmlOut = reader.ReadToEnd(); Assert.AreEqual(expectedXml, xmlOut); } } } }
public void ShouldOmitExtraneousWhitespaceWhenPassingXmlToSignatureGenerator() { const string originalXml = @"<?xml version=""1.0"" encoding=""utf-8""?> <shop xmlns=""http://schemas.restbucks.com/shop""> <model xmlns=""http://www.w3.org/2002/xforms""> <instance> <shop xmlns=""http://schemas.restbucks.com/shop""> <status>Awaiting Payment</status> </shop> </instance> <submission resource=""/orders?c=123&s=PLACEHOLDER"" method=""put"" mediatype=""application/xml"" /> </model> </shop>"; const string expectedXml = @"<shop xmlns=""http://schemas.restbucks.com/shop""><status>Awaiting Payment</status></shop>"; var mockSignature = MockRepository.GenerateMock<IGenerateSignature>(); mockSignature.Expect(s => s.GenerateSignature(expectedXml)).Return("signature"); using (var streamIn = new MemoryStream()) { using (var streamOut = new MemoryStream()) { var writer = new StreamWriter(streamIn); writer.Write(originalXml); writer.Flush(); var formProtection = new FormsIntegrityUtility(mockSignature, "PLACEHOLDER"); formProtection.SignForms(streamIn, streamOut); } } mockSignature.VerifyAllExpectations(); }