Commit ac3d341

mokha <mo@mokhan.ca>
2019-01-26 16:35:45
simplify the soap example
1 parent e22ca02
Changed files (3)
spec
spec/fixtures/soap.builder
@@ -1,14 +1,14 @@
 xml.instruct!
 
-xml.Envelope xmlns: "http://schemas.xmlsoap.org/soap/envelope/" do
+xml.Envelope do
   xml.Header do
-    xml.Security mustUnderstand: '1' do
+    xml.Security do
       encrypt_key_for(xml: xml, id: key_id)
       xml.BinarySecurityToken ''
     end
   end
-  xml.Body xmlns: 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd', Id: id  do
-    encrypt_data_for xml: xml, key_info: body_key_info do |xml|
+  xml.Body Id: id  do
+    encrypt_data_for xml: xml, key_info: key_info do |xml|
       xml.EncryptMe do
         xml.Secret "secret"
       end
spec/support/soap.rb
@@ -3,27 +3,20 @@
 class Soap
   include ::Xml::Kit::Templatable
 
-  attr_reader :id, :encryption_key_pair
+  attr_reader :id
   attr_accessor :template_path
 
-  def initialize
+  def initialize(certificate)
     @id = ::Xml::Kit::Id.generate
-    @embed_signature = false
-    @encrypt = true
-    @encryption_key_pair = ::Xml::Kit::KeyPair.generate(use: :encryption)
-    @encryption_certificate = @encryption_key_pair.certificate
     @template_path = File.join(__dir__, '../fixtures/soap.builder')
-  end
-
-  def symmetric_key
-    symmetric_cipher.key
+    encrypt_with(certificate)
   end
 
   def key_id
     'EK-E2C32E59F27A1320A215468956686717'
   end
 
-  def body_key_info
+  def key_info
     ::Xml::Kit::KeyInfo.new do |x|
       x.retrieval_method.uri = key_id
     end
spec/xml/kit/soap_spec.rb
@@ -2,16 +2,21 @@
 
 RSpec.describe Soap do
   describe '#to_xml' do
-    subject { described_class.new }
+    subject { described_class.new(key_pair.certificate) }
 
+    let(:key_pair) { ::Xml::Kit::KeyPair.generate(use: :encryption) }
     let(:result) { Hash.from_xml(subject.to_xml) }
 
+    before do
+      puts subject.to_xml(pretty: true)
+    end
+
     specify { expect(result['Envelope']).to be_present }
     specify { expect(result['Envelope']['Header']).to be_present }
     specify do
       cipher_value = result['Envelope']['Header']['Security']['EncryptedKey']['CipherData']['CipherValue']
-      symmetric_key = subject.encryption_key_pair.private_key.private_decrypt(Base64.decode64(cipher_value))
-      expect(symmetric_key).to eql(subject.symmetric_key)
+      symmetric_key = key_pair.private_key.private_decrypt(Base64.decode64(cipher_value))
+      expect(symmetric_key).to eql(subject.symmetric_cipher.key)
 
       algorithm = result['Envelope']['Body']['EncryptedData']['EncryptionMethod']['Algorithm']
       cipher_value = result['Envelope']['Body']['EncryptedData']['CipherData']['CipherValue']