/*************************************************************************** * * knetworkmanager-strongswan.cpp - A NetworkManager frontend for KDE * * Author: Thomas Kallenberg , * * Strongly based on the Code of Helmut Schaa * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * **************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include "knetworkmanager-strongswan.h" typedef KGenericFactory StrongswanPluginFactory; K_EXPORT_COMPONENT_FACTORY( knetworkmanager_strongswan, StrongswanPluginFactory("knetworkmanager_strongswan")); StrongswanPlugin::StrongswanPlugin(TQObject* parent, const char* name, const TQStringList& args) : VPNPlugin(parent, name, args) { KLocale* loc = KGlobal::locale(); loc->insertCatalogue("NetworkManager-strongswan"); } StrongswanPlugin::~StrongswanPlugin() { } VPNConfigWidget* StrongswanPlugin::CreateConfigWidget(TQWidget* parent) { return new StrongswanConfig(parent); } VPNAuthenticationWidget* StrongswanPlugin::CreateAuthenticationWidget(TQWidget* parent) { return new StrongswanAuthentication(parent); } StrongswanConfig::StrongswanConfig(TQWidget* parent) : VPNConfigWidget(parent) { TQVBoxLayout* layout = new TQVBoxLayout(this, 1, 1); _strongswanWidget = new StrongswanConfigWidget(this); layout->addWidget(_strongswanWidget); /* TODO not sure if we need this here */ this->languageChange(); } StrongswanConfig::~StrongswanConfig() { } void StrongswanConfig::languageChange() { } // usercert agent password userkey StrongswanConnectionType::CONNECTIONTYPE StrongswanConnectionType::mapString2ConnectionType(int prop) { if (prop == 0) return psk; else if (prop == 1) return key; else if (prop == 2) return agent; return UNKNOWN; } int StrongswanConnectionType::mapConnectionType2String(CONNECTIONTYPE connType) { switch(connType) { case psk: return 0; case key: return 1; case agent: return 2; default: return -1; } return -1; } void StrongswanConfig::setVPNData(const TQStringList& routes, const TQMap& properties) { // fill up our inputfields (only textfields atm) for(TQMap::ConstIterator it = properties.begin(); it != properties.end(); ++it) { TQString entry = it.key(); TQString value = it.data(); if (entry == "gateway") { _strongswanWidget->gateway->setText(value); } else if (entry == "certificate") { _strongswanWidget->certificate->setURL(value); } else if (entry == "username") { _strongswanWidget->username->setText(value); } else if (entry == "method") { StrongswanConnectionType::CONNECTIONTYPE type = StrongswanConnectionType::mapString2ConnectionType(value.toInt()); _strongswanWidget->authtype->setCurrentItem(type); } // Options else if (entry == "chkUDPenc") { _strongswanWidget->chkUDPenc->setChecked(value == "true"); } else if (entry == "chkIPcomp") { _strongswanWidget->chkIPcomp->setChecked(value == "true"); } else if (entry == "chkIPinner") { _strongswanWidget->chkIPinner->setChecked(value == "true"); } } } TQMap StrongswanConfig::getVPNProperties() { // build a StingList of properties TQMap strlist; strlist.insert("gateway", TQString(_strongswanWidget->gateway->text())); strlist.insert("certificate", TQString(_strongswanWidget->certificate->url())); strlist.insert("username", TQString(_strongswanWidget->username->text())); strlist.insert("method", TQString::number(StrongswanConnectionType::mapConnectionType2String((StrongswanConnectionType::CONNECTIONTYPE)_strongswanWidget->authtype->currentItem()))); if (_strongswanWidget->chkUDPenc->isChecked()) strlist.insert("encap", TQString("yes")); if (_strongswanWidget->chkIPcomp->isChecked()) strlist.insert("ipcomp", TQString("yes")); if (_strongswanWidget->chkIPinner->isChecked()) strlist.insert("virtual", TQString("yes")); return strlist; } TQStringList StrongswanConfig::getVPNRoutes() { TQStringList strlist; /*if(_strongswanWidget->chkIPAdresses->isChecked()) { strlist = TQStringList::split(" ", _strongswanWidget->routes->text()); } */ return strlist; } bool StrongswanConfig::hasChanged() { return true; } bool StrongswanConfig::isValid(TQStringList& err_msg) { bool retval = true; if(_strongswanWidget->gateway->text() == "" || _strongswanWidget->username->text() == "") { err_msg.append(i18n("At least the gateway and group has to be supplied.")); retval = false; } return retval; } StrongswanAuthentication::StrongswanAuthentication(TQWidget* parent, char* name) : VPNAuthenticationWidget(parent, name) { TQVBoxLayout* layout = new TQVBoxLayout(this, 1, 1); _strongswanAuth = new StrongswanAuthenticationWidget(this); layout->addWidget(_strongswanAuth); } StrongswanAuthentication::~StrongswanAuthentication() { } TQMap StrongswanAuthentication::getPasswords() { TQMap pwds; pwds.insert("user", TQString(_strongswanAuth->username->text())); pwds.insert("password", TQString(_strongswanAuth->password->password())); return pwds; } void StrongswanAuthentication::setPasswords(TQString name, TQString value) { if (name == TQString("password")) { _strongswanAuth->password->erase(); _strongswanAuth->password->insert(value); } }