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 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 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 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 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 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 96 CertificateContainer::getImplementationName( ) 97 { 98 return impl_getStaticImplementationName(); 99 } 100 101 //------------------------------------------------------------------------- 102 103 sal_Bool SAL_CALL 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 115 CertificateContainer::getSupportedServiceNames( ) 116 { 117 return impl_getStaticSupportedServiceNames(); 118 } 119 120 //------------------------------------------------------------------------- 121 122 Sequence< ::rtl::OUString > SAL_CALL 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 133 CertificateContainer::impl_getStaticImplementationName() 134 { 135 return ::rtl::OUString::createFromAscii("com.sun.star.security.CertificateContainer"); 136 } 137 138 //------------------------------------------------------------------------- 139 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 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