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 #include "precompiled_xmlsecurity.hxx"
25 #include <certificatecontainer.hxx>
26
27 #include <sal/config.h>
28
29 using namespace ::com::sun::star::uno;
30
31
32 sal_Bool
searchMap(const::rtl::OUString & url,const::rtl::OUString & certificate_name,Map & _certMap)33 CertificateContainer::searchMap( const ::rtl::OUString & url, const ::rtl::OUString & certificate_name, Map &_certMap )
34 {
35 Map::iterator p = _certMap.find(url);
36
37 ::sal_Bool ret = sal_False;
38
39 while( p != _certMap.end() )
40 {
41 ret = (sal_Bool) (*p).second.equals(certificate_name);
42 if( ret )
43 break;
44 p++;
45 }
46
47 return ret;
48 }
49 // -------------------------------------------------------------------
50
51 sal_Bool
isTemporaryCertificate(const::rtl::OUString & url,const::rtl::OUString & certificate_name)52 CertificateContainer::isTemporaryCertificate ( const ::rtl::OUString & url, const ::rtl::OUString & certificate_name )
53 {
54 return searchMap( url, certificate_name, certMap);
55 }
56
57 // -------------------------------------------------------------------
58
59 sal_Bool
isCertificateTrust(const::rtl::OUString & url,const::rtl::OUString & certificate_name)60 CertificateContainer::isCertificateTrust ( const ::rtl::OUString & url, const ::rtl::OUString & certificate_name )
61 {
62 return searchMap( url, certificate_name, certTrustMap);
63 }
64
65 // -------------------------------------------------------------------
66 sal_Bool
addCertificate(const::rtl::OUString & url,const::rtl::OUString & certificate_name,::sal_Bool trust)67 CertificateContainer::addCertificate( const ::rtl::OUString & url, const ::rtl::OUString & certificate_name, ::sal_Bool trust )
68 {
69 certMap.insert( Map::value_type( url, certificate_name ) );
70
71 //remember that the cert is trusted
72 if (trust)
73 certTrustMap.insert( Map::value_type( url, certificate_name ) );
74
75 return true;
76 }
77
78 //-------------------------------------------------------------------------
79 ::security::CertificateContainerStatus
hasCertificate(const::rtl::OUString & url,const::rtl::OUString & certificate_name)80 CertificateContainer::hasCertificate( const ::rtl::OUString & url, const ::rtl::OUString & certificate_name )
81 {
82 if ( isTemporaryCertificate( url, certificate_name ) )
83 {
84 if ( isCertificateTrust( url, certificate_name ) )
85 return security::CertificateContainerStatus( security::CertificateContainerStatus_TRUSTED );
86 else
87 return security::CertificateContainerStatus_UNTRUSTED;
88 } else
89 {
90 return security::CertificateContainerStatus_NOCERT;
91 }
92 }
93 //-------------------------------------------------------------------------
94
95 ::rtl::OUString SAL_CALL
getImplementationName()96 CertificateContainer::getImplementationName( )
97 {
98 return impl_getStaticImplementationName();
99 }
100
101 //-------------------------------------------------------------------------
102
103 sal_Bool SAL_CALL
supportsService(const::rtl::OUString & ServiceName)104 CertificateContainer::supportsService( const ::rtl::OUString& ServiceName )
105 {
106 if ( ServiceName.compareToAscii("com.sun.star.security.CertificateContainer") == 0 )
107 return sal_True;
108 else
109 return sal_False;
110 }
111
112 //-------------------------------------------------------------------------
113
114 Sequence< ::rtl::OUString > SAL_CALL
getSupportedServiceNames()115 CertificateContainer::getSupportedServiceNames( )
116 {
117 return impl_getStaticSupportedServiceNames();
118 }
119
120 //-------------------------------------------------------------------------
121
122 Sequence< ::rtl::OUString > SAL_CALL
impl_getStaticSupportedServiceNames()123 CertificateContainer::impl_getStaticSupportedServiceNames( )
124 {
125 Sequence< ::rtl::OUString > aRet(1);
126 *aRet.getArray() = ::rtl::OUString::createFromAscii("com.sun.star.security.CertificateContainer");
127 return aRet;
128 }
129
130 //-------------------------------------------------------------------------
131
132 ::rtl::OUString SAL_CALL
impl_getStaticImplementationName()133 CertificateContainer::impl_getStaticImplementationName()
134 {
135 return ::rtl::OUString::createFromAscii("com.sun.star.security.CertificateContainer");
136 }
137
138 //-------------------------------------------------------------------------
139
impl_createInstance(const Reference<XMultiServiceFactory> & xServiceManager)140 Reference< XInterface > SAL_CALL CertificateContainer::impl_createInstance( const Reference< XMultiServiceFactory >& xServiceManager )
141 {
142 return Reference< XInterface >( *new CertificateContainer( xServiceManager ) );
143 }
144
145 //-------------------------------------------------------------------------
146
147 Reference< XSingleServiceFactory > SAL_CALL
impl_createFactory(const Reference<XMultiServiceFactory> & ServiceManager)148 CertificateContainer::impl_createFactory( const Reference< XMultiServiceFactory >& ServiceManager )
149 {
150 Reference< XSingleServiceFactory > xReturn( ::cppu::createOneInstanceFactory( ServiceManager,
151 CertificateContainer::impl_getStaticImplementationName(),
152 CertificateContainer::impl_createInstance,
153 CertificateContainer::impl_getStaticSupportedServiceNames()));
154
155 return xReturn;
156 }
157