ldapurl.cpp
/*
This file is part of libkabc.
Copyright (c) 2004 Szombathelyi György <gyurco@freemail.hu>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <kdebug.h>
#include <qstringlist.h>
#include <qdir.h>
#include "ldapurl.h"
using namespace KABC;
LDAPUrl::LDAPUrl()
{
m_scope = Base;
}
LDAPUrl::LDAPUrl(const KURL &_url)
: KURL(_url), m_extensions()
{
m_dn = path();
if ( !QDir::isRelativePath(m_dn) )
#ifdef Q_WS_WIN
m_dn.remove(0,3); // e.g. "c:/"
#else
m_dn.remove(0,1);
#endif
parseQuery();
}
void LDAPUrl::setDn( const QString &dn)
{
m_dn = dn;
if ( !QDir::isRelativePath(m_dn) )
#ifdef Q_WS_WIN
m_dn.remove(0,3); // e.g. "c:/"
#else
m_dn.remove(0,1);
#endif
setPath(m_dn);
}
bool LDAPUrl::hasExtension( const QString &key ) const
{
return m_extensions.contains( key );
}
LDAPUrl::Extension LDAPUrl::extension( const QString &key ) const
{
QMap<QString, Extension>::const_iterator it;
it = m_extensions.find( key );
if ( it != m_extensions.constEnd() )
return (*it);
else {
Extension ext;
ext.value = "";
ext.critical = false;
return ext;
}
}
QString LDAPUrl::extension( const QString &key, bool &critical ) const
{
Extension ext;
ext = extension( key );
critical = ext.critical;
return ext.value;
}
void LDAPUrl::setExtension( const QString &key, const LDAPUrl::Extension &ext )
{
m_extensions[ key ] = ext;
updateQuery();
}
void LDAPUrl::setExtension( const QString &key, const QString &value, bool critical )
{
Extension ext;
ext.value = value;
ext.critical = critical;
setExtension( key, ext );
}
void LDAPUrl::removeExtension( const QString &key )
{
m_extensions.remove( key );
updateQuery();
}
void LDAPUrl::updateQuery()
{
Extension ext;
QMap<QString, Extension>::iterator it;
QString q = "?";
// set the attributes to query
if ( m_attributes.count() > 0 ) q += m_attributes.join(",");
// set the scope
q += "?";
switch( m_scope ) {
case Sub:
q += "sub";
break;
case One:
q += "one";
break;
case Base:
q += "base";
break;
}
// set the filter
q += "?";
if ( m_filter != "(objectClass=*)" && !m_filter.isEmpty() )
q += m_filter;
// set the extensions
q += "?";
for ( it = m_extensions.begin(); it != m_extensions.end(); ++it ) {
if ( it.data().critical ) q += "!";
q += it.key();
if ( !it.data().value.isEmpty() )
q += "=" + it.data().value;
q += ",";
}
while ( q.endsWith("?") || q.endsWith(",") )
q.remove( q.length() - 1, 1 );
setQuery(q);
kdDebug(5700) << "LDAP URL updateQuery(): " << prettyURL() << endl;
}
void LDAPUrl::parseQuery()
{
Extension ext;
QStringList extensions;
QString q = query();
// remove first ?
if (q.startsWith("?"))
q.remove(0,1);
// split into a list
QStringList url_items = QStringList::split("?", q, true);
m_attributes.clear();
m_scope = Base;
m_filter = "(objectClass=*)";
m_extensions.clear();
int i = 0;
for ( QStringList::Iterator it = url_items.begin(); it != url_items.end(); ++it, i++ ) {
switch (i) {
case 0:
m_attributes = QStringList::split(",", (*it), false);
break;
case 1:
if ( (*it) == "sub" ) m_scope = Sub; else
if ( (*it) == "one") m_scope = One;
break;
case 2:
m_filter = decode_string( *it );
break;
case 3:
extensions = QStringList::split(",", (*it), false);
break;
}
}
QString name,value;
for ( QStringList::Iterator it = extensions.begin(); it != extensions.end(); ++it ) {
ext.critical = false;
name = decode_string( (*it).section('=',0,0) ).lower();
value = decode_string( (*it).section('=',1) );
if ( name.startsWith("!") ) {
ext.critical = true;
name.remove(0, 1);
}
kdDebug(5700) << "LDAPUrl extensions name= " << name << " value: " << value << endl;
ext.value = value.replace( "%2", "," );
setExtension( name, ext );
}
}
KABC::LDAPUrl::hasExtension
bool hasExtension(const QString &key) const
Returns if the specified extension exists in the LDAP Url.
Definition: ldapurl.cpp:59
KURL
KURL::prettyURL
QString prettyURL(int _trailing=0) const
KURL::query
QString query() const
KURL::setQuery
void setQuery(const QString &_txt, int encoding_hint=0)
kdDebug
kdbgstream kdDebug(int area=0)
KABC::LDAPUrl::dn
const QString & dn() const
Returns the dn part of the LDAP Url (same as path(), but slash removed from the beginning).
Definition: ldapurl.h:62
KABC::LDAPUrl::setDn
void setDn(const QString &dn)
Sets the the dn part of the LDAP Url.
Definition: ldapurl.cpp:47
KABC::LDAPUrl::setExtension
void setExtension(const QString &key, const Extension &ext)
Sets the specified extension key with the value and criticality in ext.
Definition: ldapurl.cpp:88
KABC::LDAPUrl::extension
Extension extension(const QString &key) const
Returns the specified extension.
Definition: ldapurl.cpp:64
KABC::LDAPUrl::removeExtension
void removeExtension(const QString &key)
Removes the specified extension.
Definition: ldapurl.cpp:102
KABC::LDAPUrl::updateQuery
void updateQuery()
Updates the query component from the attributes, scope, filter and extensions.
Definition: ldapurl.cpp:108
KURL::setPath
void setPath(const QString &path)
KABC::LDAPUrl::LDAPUrl
LDAPUrl()
Constructs an empty KLDAPUrl.
Definition: ldapurl.cpp:29
KURL::decode_string
static QString decode_string(const QString &str, int encoding_hint=0)
KURL::path
QString path() const
endl
kndbgstream & endl(kndbgstream &s)
KStdAccel::name
QString name(StdAccel id)

KDE Home | KDE Accessibility Home | Description of Access Keys