diff options
Diffstat (limited to 'svtools/source/passwordcontainer/syscreds.cxx')
-rw-r--r-- | svtools/source/passwordcontainer/syscreds.cxx | 298 |
1 files changed, 0 insertions, 298 deletions
diff --git a/svtools/source/passwordcontainer/syscreds.cxx b/svtools/source/passwordcontainer/syscreds.cxx deleted file mode 100644 index b8c223040e6d..000000000000 --- a/svtools/source/passwordcontainer/syscreds.cxx +++ /dev/null @@ -1,298 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: $ - * $Revision: $ - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "syscreds.hxx" -#include "com/sun/star/beans/PropertyValue.hpp" - -using namespace com::sun::star; - -SysCredentialsConfigItem::SysCredentialsConfigItem( - SysCredentialsConfig * pOwner ) -: utl::ConfigItem( rtl::OUString::createFromAscii( "Office.Common/Passwords" ), - CONFIG_MODE_IMMEDIATE_UPDATE ), - m_bInited( false ), - m_pOwner( pOwner ) -{ - uno::Sequence< ::rtl::OUString > aNode( 1 ); - aNode[ 0 ] = rtl::OUString::createFromAscii( - "Office.Common/Passwords/AuthenticateUsingSystemCredentials" ); - EnableNotification( aNode ); -} - -//virtual -void SysCredentialsConfigItem::Notify( - const uno::Sequence< rtl::OUString > & /*seqPropertyNames*/ ) -{ - { - ::osl::MutexGuard aGuard( m_aMutex ); - m_bInited = false; - // rebuild m_seqURLs - getSystemCredentialsURLs(); - } - m_pOwner->persistentConfigChanged(); -} - -uno::Sequence< rtl::OUString > -SysCredentialsConfigItem::getSystemCredentialsURLs() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - if ( !m_bInited ) - { - // read config item - uno::Sequence< ::rtl::OUString > aPropNames( 1 ); - aPropNames[ 0 ] = rtl::OUString::createFromAscii( - "AuthenticateUsingSystemCredentials" ); - uno::Sequence< uno::Any > aAnyValues( - utl::ConfigItem::GetProperties( aPropNames ) ); - - OSL_ENSURE( - aAnyValues.getLength() == 1, - "SysCredentialsConfigItem::getSystemCredentialsURLs: " - "Error reading config item!" ); - - uno::Sequence< rtl::OUString > aValues; - if ( ( aAnyValues[ 0 ] >>= aValues ) || - ( !aAnyValues[ 0 ].hasValue() ) ) - { - m_seqURLs = aValues; - m_bInited = true; - } - } - return m_seqURLs; -} - -void SysCredentialsConfigItem::setSystemCredentialsURLs( - const uno::Sequence< rtl::OUString > & seqURLList ) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - - // write config item. - uno::Sequence< rtl::OUString > aPropNames( 1 ); - uno::Sequence< uno::Any > aPropValues( 1 ); - aPropNames[ 0 ] - = ::rtl::OUString::createFromAscii( - "AuthenticateUsingSystemCredentials" ); - aPropValues[ 0 ] <<= seqURLList; - - utl::ConfigItem::SetModified(); - utl::ConfigItem::PutProperties( aPropNames, aPropValues ); - - m_seqURLs = seqURLList; - m_bInited = true; -} - -//============================================================================ - -namespace -{ - // TODO: This code is actually copied from svtools/source/passwordcontainer.cxx - bool removeLastSegment( ::rtl::OUString & aURL ) - { - sal_Int32 aInd = aURL.lastIndexOf( sal_Unicode( '/' ) ); - - if( aInd > 0 ) - { - sal_Int32 aPrevInd = aURL.lastIndexOf( sal_Unicode( '/' ), aInd ); - if ( aURL.indexOf( ::rtl::OUString::createFromAscii( "://" ) ) - != aPrevInd - 2 || - aInd != aURL.getLength() - 1 ) - { - aURL = aURL.copy( 0, aInd ); - return true; - } - } - - return false; - } - - bool findURL( StringSet const & rContainer, rtl::OUString const & aURL, rtl::OUString & aResult ) - { - // TODO: This code is actually copied from svtools/source/passwordcontainer.cxx - if( !rContainer.empty() && aURL.getLength() ) - { - ::rtl::OUString aUrl( aURL ); - - // each iteration remove last '/...' section from the aUrl - // while it's possible, up to the most left '://' - do - { - // first look for <url>/somename and then look for <url>/somename/... - StringSet::const_iterator aIter = rContainer.find( aUrl ); - if( aIter != rContainer.end() ) - { - aResult = *aIter; - return true; - } - else - { - ::rtl::OUString tmpUrl( aUrl ); - if ( tmpUrl.getStr()[tmpUrl.getLength() - 1] != (sal_Unicode)'/' ) - tmpUrl += ::rtl::OUString::createFromAscii( "/" ); - - aIter = rContainer.lower_bound( tmpUrl ); - if( aIter != rContainer.end() && aIter->match( tmpUrl ) ) - { - aResult = *aIter; - return true; - } - } - } - while( removeLastSegment( aUrl ) && aUrl.getLength() ); - } - aResult = rtl::OUString(); - return false; - } - -} // namespace - -SysCredentialsConfig::SysCredentialsConfig() -: m_aConfigItem( this ), - m_bCfgInited( false ) -{ -} - -void SysCredentialsConfig::initCfg() -{ - osl::MutexGuard aGuard( m_aMutex ); - if ( !m_bCfgInited ) - { - uno::Sequence< rtl::OUString > aURLs( - m_aConfigItem.getSystemCredentialsURLs() ); - for ( sal_Int32 n = 0; n < aURLs.getLength(); ++n ) - m_aCfgContainer.insert( aURLs[ n ] ); - - m_bCfgInited = true; - } -} - -void SysCredentialsConfig::writeCfg() -{ - osl::MutexGuard aGuard( m_aMutex ); - - OSL_ENSURE( m_bCfgInited, "SysCredentialsConfig::writeCfg : not initialized!" ); - - uno::Sequence< rtl::OUString > aURLs( m_aCfgContainer.size() ); - StringSet::const_iterator it = m_aCfgContainer.begin(); - const StringSet::const_iterator end = m_aCfgContainer.end(); - sal_Int32 n = 0; - - while ( it != end ) - { - aURLs[ n ] = *it; - ++it; - ++n; - } - - m_aConfigItem.setSystemCredentialsURLs( aURLs ); -} - -rtl::OUString SysCredentialsConfig::find( rtl::OUString const & aURL ) -{ - osl::MutexGuard aGuard( m_aMutex ); - rtl::OUString aResult; - if ( findURL( m_aMemContainer, aURL, aResult ) ) - return aResult; - - initCfg(); - if ( findURL( m_aCfgContainer, aURL, aResult ) ) - return aResult; - - return rtl::OUString(); -} - -void SysCredentialsConfig::add( rtl::OUString const & rURL, bool bPersistent ) -{ - ::osl::MutexGuard aGuard( m_aMutex ); - - if ( bPersistent ) - { - m_aMemContainer.erase( rURL ); - - initCfg(); - m_aCfgContainer.insert( rURL ); - writeCfg(); - } - else - { - initCfg(); - if ( m_aCfgContainer.erase( rURL ) > 0 ) - writeCfg(); - - m_aMemContainer.insert( rURL ); - } -} - -void SysCredentialsConfig::remove( rtl::OUString const & rURL ) -{ - m_aMemContainer.erase( rURL ); - - initCfg(); - if ( m_aCfgContainer.erase( rURL ) > 0 ) - writeCfg(); -} - -uno::Sequence< rtl::OUString > SysCredentialsConfig::list( bool bOnlyPersistent ) -{ - initCfg(); - sal_Int32 nCount = m_aCfgContainer.size() - + ( bOnlyPersistent ? 0 : m_aMemContainer.size() ); - uno::Sequence< rtl::OUString > aResult( nCount ); - - StringSet::const_iterator it = m_aCfgContainer.begin(); - StringSet::const_iterator end = m_aCfgContainer.end(); - sal_Int32 n = 0; - - while ( it != end ) - { - aResult[ n ] = *it; - ++it; - ++n; - } - - if ( !bOnlyPersistent ) - { - it = m_aMemContainer.begin(); - end = m_aMemContainer.end(); - - while ( it != end ) - { - aResult[ n ] = *it; - ++it; - ++n; - } - } - return aResult; -} - -void SysCredentialsConfig::persistentConfigChanged() -{ - ::osl::MutexGuard aGuard( m_aMutex ); - m_bCfgInited = false; // re-init on demand. -} |