xref: /AOO41X/main/xmlsecurity/tools/uno/SecurityEntity.java (revision 34dd1e2512dbacb6a9a7e4c7f17b9296daa8eff3)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package com.sun.star.xml.security.uno;
25 
26 /* uno classes */
27 import com.sun.star.uno.UnoRuntime;
28 import com.sun.star.lang.XMultiComponentFactory;
29 import com.sun.star.uno.XComponentContext;
30 
31 import com.sun.star.xml.crypto.*;
32 import com.sun.star.xml.crypto.sax.*;
33 
34 /*
35  * this class maintains the data for a security operation.
36  */
37 class SecurityEntity
38 {
39 	/*
40 	 * the security id, which identifies this security entity
41 	 * uniquely.
42 	 */
43 	private static int m_nNextSecurityId = 1;
44 	protected int m_nSecurityId;
45 
46 	/*
47 	 * xml security related components
48 	 */
49 	protected XXMLSecurityContext        m_xXMLSecurityContext;
50 	protected XXMLSignature              m_xXMLSignature;
51 	protected XXMLEncryption             m_xXMLEncryption;
52 	protected XMultiComponentFactory     m_xRemoteServiceManager;
53 	protected XComponentContext          m_xRemoteContext;
54 	protected XReferenceResolvedListener m_xReferenceResolvedListener;
55 	protected XSecuritySAXEventKeeper    m_xSAXEventKeeper;
56 
57 	/*
58 	 * the uri of the key material of this security entity
59 	 */
60 	private String m_keyURI;
61 
62 	SecurityEntity(
63 		XSecuritySAXEventKeeper xSAXEventKeeper,
64 		XXMLSecurityContext xXMLSecurityContext,
65 		XXMLSignature xXMLSignature,
66 		XXMLEncryption xXMLEncryption,
67 		XMultiComponentFactory xRemoteServiceManager,
68 		XComponentContext xRemoteContext)
69 	{
70 		m_xSAXEventKeeper = xSAXEventKeeper;
71 		m_xXMLSecurityContext = xXMLSecurityContext;
72 		m_xXMLSignature = xXMLSignature;
73 		m_xXMLEncryption = xXMLEncryption;
74 		m_xRemoteServiceManager = xRemoteServiceManager;
75 		m_xRemoteContext = xRemoteContext;
76 
77 		m_nSecurityId = getNextSecurityId();
78 		m_keyURI = null;
79 	}
80 
81 /**************************************************************************************
82  * private methods
83  **************************************************************************************/
84 
85 	/*
86 	 * generates a new security id.
87 	 */
88 	private static int getNextSecurityId()
89 	{
90 		int id = m_nNextSecurityId++;
91 		return id;
92 	}
93 
94 /**************************************************************************************
95  * protected methods
96  **************************************************************************************/
97 
98 	/*
99 	 * notifies the key collector about the key id, this key id
100 	 * is used to ask the SAXEventKeeper to release the bufferred
101 	 * key element.
102 	 * when the id is 0, that means there is no independant key
103 	 * element needed.
104 	 */
105 	protected void setKeyId(int id)
106 	{
107 		try
108 		{
109 			XKeyCollector xKeyCollector =
110 				(XKeyCollector)UnoRuntime.queryInterface(
111 					XKeyCollector.class, m_xReferenceResolvedListener);
112 			xKeyCollector.setKeyId(id);
113 		}
114 		catch( com.sun.star.uno.Exception e)
115 		{
116 			e.printStackTrace();
117 		}
118 	}
119 
120 	/*
121 	 * set the key uri, which will be the value of the id attribute
122 	 * of the key element
123 	 */
124 	protected void setKeyURI(String uri)
125 	{
126 		m_keyURI = new String(uri);
127 	}
128 
129 	protected XReferenceResolvedListener getReferenceListener()
130 	{
131 		return m_xReferenceResolvedListener;
132 	}
133 
134 	protected int getSecurityId()
135 	{
136 		return m_nSecurityId;
137 	}
138 
139 	/*
140 	 * configures the key material to the security entity.
141 	 *
142 	 * if the uri is the key, then:
143 	 * 1. askes the SAXEventKeeper to add a ElementCollector to the key
144 	 * element;
145 	 * 2. notifies the key collector;
146 	 * 3. configures this ElementCollector's security id;
147 	 * 4. tells the SAXEventKeeper which listener will receive the reference
148 	 * resolved notification.
149 	 */
150 	protected boolean setKey(String uri, boolean isExporting)
151 	{
152 		boolean rc = false;
153 
154 		if (m_keyURI != null &&
155 			m_keyURI.equals(uri))
156 		{
157 			int referenceId = m_xSAXEventKeeper.addSecurityElementCollector(
158 				isExporting?
159 				(ElementMarkPriority.BEFOREMODIFY):(ElementMarkPriority.AFTERMODIFY),
160 				false );
161 
162 			setKeyId(referenceId);
163 			m_xSAXEventKeeper.setSecurityId(referenceId, m_nSecurityId);
164 
165 			XReferenceResolvedBroadcaster xReferenceResolvedBroadcaster =
166 				(XReferenceResolvedBroadcaster)UnoRuntime.queryInterface(
167 					XReferenceResolvedBroadcaster.class, m_xSAXEventKeeper);
168 
169 			xReferenceResolvedBroadcaster.addReferenceResolvedListener(referenceId, m_xReferenceResolvedListener);
170 
171 			rc = true;
172 		}
173 
174 		return rc;
175 	}
176 
177 	/*
178 	 * ends this misstion, asks the security engine to clear up all
179 	 * resources.
180 	 */
181 	protected boolean endMission()
182 	{
183 		XMissionTaker xMissionTaker =
184 			(XMissionTaker)UnoRuntime.queryInterface(
185 				XMissionTaker.class, m_xReferenceResolvedListener);
186 
187 		boolean rc = xMissionTaker.endMission();
188 
189 		m_xXMLSecurityContext = null;
190 		m_xXMLSignature = null;
191 		m_xXMLEncryption = null;
192 		m_xReferenceResolvedListener = null;
193 		m_xSAXEventKeeper = null;
194 
195 		return rc;
196 	}
197 }
198 
199