1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.support.wss;
14
15 import java.io.IOException;
16 import java.util.Vector;
17
18 import javax.security.auth.callback.Callback;
19 import javax.security.auth.callback.CallbackHandler;
20 import javax.security.auth.callback.UnsupportedCallbackException;
21
22 import org.apache.ws.security.WSPasswordCallback;
23 import org.apache.ws.security.WSSecurityEngine;
24 import org.apache.ws.security.WSSecurityException;
25 import org.apache.ws.security.util.WSSecurityUtil;
26 import org.w3c.dom.Document;
27 import org.w3c.dom.Element;
28
29 import com.eviware.soapui.SoapUI;
30 import com.eviware.soapui.config.IncomingWssConfig;
31 import com.eviware.soapui.model.propertyexpansion.PropertyExpansionContext;
32 import com.eviware.soapui.support.StringUtils;
33 import com.eviware.soapui.support.UISupport;
34
35 public class IncomingWss
36 {
37 private IncomingWssConfig wssConfig;
38 private final WssContainer container;
39
40 public IncomingWss( IncomingWssConfig wssConfig, WssContainer container )
41 {
42 this.wssConfig = wssConfig;
43 this.container = container;
44 }
45
46 public WssContainer getWssContainer()
47 {
48 return container;
49 }
50
51 public String getDecryptCrypto()
52 {
53 return wssConfig.getDecryptCrypto();
54 }
55
56 public String getDecryptPassword()
57 {
58 return wssConfig.getDecryptPassword();
59 }
60
61 public String getName()
62 {
63 return wssConfig.getName();
64 }
65
66 public String getSignatureCrypto()
67 {
68 return wssConfig.getSignatureCrypto();
69 }
70
71 public void setDecryptCrypto( String arg0 )
72 {
73 wssConfig.setDecryptCrypto( arg0 );
74 }
75
76 public void setDecryptPassword( String arg0 )
77 {
78 wssConfig.setDecryptPassword( arg0 );
79 }
80
81 public void setName( String arg0 )
82 {
83 wssConfig.setName( arg0 );
84 }
85
86 public void setSignatureCrypto( String arg0 )
87 {
88 wssConfig.setSignatureCrypto( arg0 );
89 }
90
91 public Vector processIncoming( Document soapDocument, PropertyExpansionContext context ) throws WSSecurityException
92 {
93 Element header = WSSecurityUtil.findWsseSecurityHeaderBlock( soapDocument, soapDocument.getDocumentElement(), false );
94 if( header == null )
95 return null;
96
97 try
98 {
99 WSSecurityEngine wssecurityEngine = WSSecurityEngine.getInstance();
100 return wssecurityEngine.processSecurityHeader( soapDocument, (String)null,
101 new WSSCallbackHandler(),
102 getWssContainer().getCryptoByName( getSignatureCrypto() ).getCrypto(),
103 getWssContainer().getCryptoByName( getDecryptCrypto() ).getCrypto() );
104 }
105 catch( WSSecurityException e )
106 {
107 SoapUI.logError( e );
108 throw e;
109 }
110 }
111
112 public class WSSCallbackHandler implements CallbackHandler
113 {
114 public void handle( Callback[] callbacks ) throws IOException, UnsupportedCallbackException
115 {
116 for( Callback callback : callbacks )
117 {
118 if( callback instanceof WSPasswordCallback )
119 {
120 WSPasswordCallback cb = ( WSPasswordCallback ) callback;
121 if( StringUtils.hasContent( getDecryptPassword()))
122 cb.setPassword( getDecryptPassword() );
123 else
124 cb.setPassword( UISupport.prompt( "Password required for WSS processing", "Specify Password", "" ));
125 }
126 }
127 }
128 }
129
130 public void updateConfig( IncomingWssConfig config )
131 {
132 this.wssConfig = config;
133 }
134 }