[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [sflphone-kde] src: [ #30834 ] Handle password saving correctly depending on the protocol
From: Emmanuel Lepage Vallee <emmanuel.lepage () savoirfairelinux ! com>
Date: 2013-09-30 21:06:37
Message-ID: E1VQkft-0006Yi-Es () scm ! kde ! org
[Download RAW message or body]
Git commit 9610007dcf3da5d3896ac326ef9ec7f632e6c662 by Emmanuel Lepage Vallee.
Committed on 30/09/2013 at 21:03.
Pushed by lepagevalleeemmanuel into branch 'master'.
[ #30834 ] Handle password saving correctly depending on the protocol
M +3 -3 src/accountwizard.cpp
M +14 -20 src/conf/dlgaccounts.cpp
M +53 -15 src/lib/account.cpp
M +18 -11 src/lib/account.h
M +1 -1 src/lib/sflphone_const.h
http://commits.kde.org/sflphone-kde/9610007dcf3da5d3896ac326ef9ec7f632e6c662
diff --git a/src/accountwizard.cpp b/src/accountwizard.cpp
index 63de55b..f57850a 100644
--- a/src/accountwizard.cpp
+++ b/src/accountwizard.cpp
@@ -246,7 +246,7 @@ void AccountWizard::accept()
field( FIELD_SIP_USER ) = QString( acc.user );
field( FIELD_SIP_VOICEMAIL ).clear();
- protocol = QString( Account::Protocol::SIP );
+ protocol = QString( Account::ProtocolName::SIP );
server = QString( SFL_ACCOUNT_HOST );
password = QString( acc.passwd );
user = QString( acc.user );
@@ -265,7 +265,7 @@ void AccountWizard::accept()
alias = field ( FIELD_SIP_ALIAS ).toString();
enabled = QString ( REGISTRATION_ENABLED_TRUE ) ;
mailbox = field ( FIELD_SIP_VOICEMAIL ).toString();
- protocol = QString ( Account::Protocol::SIP ) ;
+ protocol = QString ( Account::ProtocolName::SIP ) ;
server = field ( FIELD_SIP_SERVER ).toString();
password = field ( FIELD_SIP_PASSWORD ).toString();
user = field ( FIELD_SIP_USER ).toString();
@@ -280,7 +280,7 @@ void AccountWizard::accept()
alias = field ( FIELD_IAX_ALIAS ).toString();
enabled = QString ( REGISTRATION_ENABLED_TRUE ) ;
mailbox = field ( FIELD_IAX_VOICEMAIL ).toString();
- protocol = QString ( Account::Protocol::IAX ) ;
+ protocol = QString ( Account::ProtocolName::IAX ) ;
server = field ( FIELD_IAX_SERVER ).toString();
password = field ( FIELD_IAX_PASSWORD ).toString();
user = field ( FIELD_IAX_USER ).toString();
diff --git a/src/conf/dlgaccounts.cpp b/src/conf/dlgaccounts.cpp
index ba86625..043bace 100644
--- a/src/conf/dlgaccounts.cpp
+++ b/src/conf/dlgaccounts.cpp
@@ -205,11 +205,9 @@ void DlgAccounts::saveAccount(QModelIndex item)
m_pProxyLE->setText("");
}
- QString protocolsTab[] = ACCOUNT_TYPES_TAB;
-
//ACCOUNT DETAILS
// WIDGET VALUE \
/
- /**/account->setType ( protocolsTab[edit2_protocol->currentIndex()] \
); + /**/account->setType ( \
static_cast<Account::Protocol>(edit2_protocol->currentIndex()) ); /**/account->setAlias \
( edit1_alias->text() ); /**/account->setHostname \
( edit3_server->text() ); /**/account->setUsername \
( edit4_user->text() ); @@ -299,25 +297,21 @@ void \
DlgAccounts::loadAccount(QModelIndex item)
edit1_alias->setText( account->alias());
- QString protocolsTab[] = ACCOUNT_TYPES_TAB;
- QList<QString> * protocolsList = new QList<QString>();
- for(int i = 0 ; i < (int) (sizeof(protocolsTab) / sizeof(QString)) ; i++) {
- protocolsList->append(protocolsTab[i]);
- }
-
- const QString accountType = account->type();
- const int protocolIndex = protocolsList->indexOf(accountType);
- delete protocolsList;
-
+ const int protocolIndex = static_cast<int>(account->type());
- const QModelIndex idx = account->credentialsModel()->index(0,0);
- disconnect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(main_password_field_changed()));
- if (idx.isValid() && !account->id().isEmpty()) {
- edit5_password->setText(account->credentialsModel()->data(idx,CredentialModel::Role::PASSWORD).toString());
+ if (account->type() == Account::Protocol::SIP) {
+ const QModelIndex idx = account->credentialsModel()->index(0,0);
+ disconnect(edit5_password, SIGNAL(textEdited(QString)), this , \
SLOT(main_password_field_changed())); + if (idx.isValid() && !account->id().isEmpty()) {
+ edit5_password->setText(account->credentialsModel()->data(idx,CredentialModel::Role::PASSWORD).toString());
+ }
+ else
+ edit5_password->setText("");
+ connect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(main_password_field_changed()));
+ }
+ else {
+ edit5_password->setText(account->password());
}
- else
- edit5_password->setText("");
- connect(edit5_password, SIGNAL(textEdited(QString)), this , SLOT(main_password_field_changed()));
disconnect(this,SLOT(aliasChanged(QString)));
connect(account,SIGNAL(aliasChanged(QString)),this,SLOT(aliasChanged(QString)));
diff --git a/src/lib/account.cpp b/src/lib/account.cpp
index 0234ee9..442e337 100644
--- a/src/lib/account.cpp
+++ b/src/lib/account.cpp
@@ -250,26 +250,26 @@ QVariant Account::stateColor() const
}
///Create and return the credential model
-CredentialModel* Account::credentialsModel()
+CredentialModel* Account::credentialsModel() const
{
if (!m_pCredentials)
- reloadCredentials();
+ const_cast<Account*>(this)->reloadCredentials();
return m_pCredentials;
}
///Create and return the audio codec model
-AudioCodecModel* Account::audioCodecModel()
+AudioCodecModel* Account::audioCodecModel() const
{
if (!m_pAudioCodecs)
- reloadAudioCodecs();
+ const_cast<Account*>(this)->reloadAudioCodecs();
return m_pAudioCodecs;
}
///Create and return the video codec model
-VideoCodecModel* Account::videoCodecModel()
+VideoCodecModel* Account::videoCodecModel() const
{
if (!m_pVideoCodecs)
- m_pVideoCodecs = new VideoCodecModel(this);
+ const_cast<Account*>(this)->m_pVideoCodecs = new VideoCodecModel(const_cast<Account*>(this));
return m_pVideoCodecs;
}
@@ -317,6 +317,19 @@ QString Account::proxy() const
return accountDetail(Account::MapField::ROUTE);
}
+
+QString Account::password() const
+{
+ switch (type()) {
+ case Account::Protocol::SIP:
+ if (credentialsModel()->rowCount())
+ return credentialsModel()->data(credentialsModel()->index(0,0),CredentialModel::Role::PASSWORD).toString();
+ case Account::Protocol::IAX:
+ return accountDetail(Account::MapField::PASSWORD);
+ };
+ return "";
+}
+
///
bool Account::isDisplaySasOnce() const
{
@@ -505,9 +518,15 @@ QString Account::registrationStatus() const
}
///Return the account type
-QString Account::type() const
+Account::Protocol Account::type() const
{
- return accountDetail(Account::MapField::TYPE);
+ const QString str = accountDetail(Account::MapField::TYPE);
+ if (str.isEmpty() || str == Account::ProtocolName::SIP)
+ return Account::Protocol::SIP;
+ else if (str == Account::ProtocolName::IAX)
+ return Account::Protocol::IAX;
+ qDebug() << "Warning: unhandled protocol name" << str << ", defaulting to SIP";
+ return Account::Protocol::SIP;
}
///Return the DTMF type
@@ -534,7 +553,7 @@ QVariant Account::roleData(int role) const
case Account::Role::Alias:
return alias();
case Account::Role::Type:
- return type();
+ return static_cast<int>(type());
case Account::Role::Hostname:
return hostname();
case Account::Role::Username:
@@ -617,7 +636,7 @@ QVariant Account::roleData(int role) const
return var;
}
case Account::Role::TypeName:
- return type();
+ return static_cast<int>(type());
case Account::Role::PresenceStatus:
return PresenceStatusModel::instance()->currentStatus();
case Account::Role::PresenceMessage:
@@ -675,9 +694,14 @@ void Account::setId(const QString& id)
}
///Set the account type, SIP or IAX
-void Account::setType(const QString& detail)
+void Account::setType(Account::Protocol proto)
{
- setAccountDetail(Account::MapField::TYPE ,detail);
+ switch (proto) {
+ case Account::Protocol::SIP:
+ setAccountDetail(Account::MapField::TYPE ,Account::ProtocolName::SIP);
+ case Account::Protocol::IAX:
+ setAccountDetail(Account::MapField::TYPE ,Account::ProtocolName::IAX);
+ };
}
///The set account hostname, it can be an hostname or an IP address
@@ -710,7 +734,19 @@ void Account::setProxy(const QString& detail)
///Set the main credential password
void Account::setPassword(const QString& detail)
{
- setAccountDetail(Account::MapField::PASSWORD, detail);
+ switch (type()) {
+ case Account::Protocol::SIP:
+ if (credentialsModel()->rowCount())
+ credentialsModel()->setData(credentialsModel()->index(0,0),detail,CredentialModel::Role::PASSWORD);
+ else {
+ const QModelIndex idx = credentialsModel()->addCredentials();
+ credentialsModel()->setData(idx,detail,CredentialModel::Role::PASSWORD);
+ }
+ break;
+ case Account::Protocol::IAX:
+ setAccountDetail(Account::MapField::PASSWORD, detail);
+ break;
+ };
}
///Set the TLS (encryption) password
@@ -910,8 +946,10 @@ void Account::setRoleData(int role, const QVariant& value)
switch(role) {
case Account::Role::Alias:
setAlias(value.toString());
- case Account::Role::Type:
- setType(value.toString());
+ case Account::Role::Type: {
+ const int proto = value.toInt();
+ setType((proto>=0&&proto<=1)?static_cast<Account::Protocol>(proto):Account::Protocol::SIP);
+ }
case Account::Role::Hostname:
setHostname(value.toString());
case Account::Role::Username:
diff --git a/src/lib/account.h b/src/lib/account.h
index d50ce21..c1251f3 100644
--- a/src/lib/account.h
+++ b/src/lib/account.h
@@ -56,7 +56,7 @@ class LIB_EXPORT Account : public QObject {
//Properties
Q_PROPERTY(QString alias READ alias WRITE \
setAlias )
- Q_PROPERTY(QString type READ type WRITE \
setType ) + Q_PROPERTY(Account::Protocol type READ type \
WRITE setType ) Q_PROPERTY(QString hostname READ \
hostname WRITE setHostname ) Q_PROPERTY(QString username \
READ username WRITE setUsername ) Q_PROPERTY(QString \
mailbox READ mailbox WRITE setMailbox ) @@ \
-94,7 +94,7 @@ class LIB_EXPORT Account : public QObject { Q_PROPERTY(bool \
publishedSameAsLocal READ isPublishedSameAsLocal WRITE setPublishedSameAsLocal ) \
Q_PROPERTY(bool ringtoneEnabled READ isRingtoneEnabled WRITE \
setRingtoneEnabled ) Q_PROPERTY(DtmfType dTMFType READ DTMFType \
WRITE setDTMFType )
- Q_PROPERTY(QString typeName READ type WRITE \
setType ) +// Q_PROPERTY(QString typeName READ type \
WRITE setType ) Q_PROPERTY(bool presenceStatus READ \
presenceStatus ) Q_PROPERTY(QString \
presenceMessage READ presenceMessage )
@@ -217,12 +217,18 @@ class LIB_EXPORT Account : public QObject {
};
};
- class Protocol {
+ class ProtocolName {
public:
constexpr static const char* SIP = "SIP";
constexpr static const char* IAX = "IAX";
};
+ enum class Protocol {
+ SIP = 0,
+ IAX = 1,
+ };
+ Q_ENUMS(Protocol)
+
/**
*Perform an action
* @return If the state changed
@@ -241,9 +247,9 @@ class LIB_EXPORT Account : public QObject {
QString stateColorName() const;
QVariant stateColor() const;
- Q_INVOKABLE CredentialModel* credentialsModel();
- Q_INVOKABLE AudioCodecModel* audioCodecModel ();
- Q_INVOKABLE VideoCodecModel* videoCodecModel ();
+ Q_INVOKABLE CredentialModel* credentialsModel() const;
+ Q_INVOKABLE AudioCodecModel* audioCodecModel () const;
+ Q_INVOKABLE VideoCodecModel* videoCodecModel () const;
//Getters
QString hostname () const;
@@ -252,6 +258,7 @@ class LIB_EXPORT Account : public QObject {
QString username () const;
QString mailbox () const;
QString proxy () const;
+ QString password () const;
bool isDisplaySasOnce () const;
bool isSrtpRtpFallback () const;
bool isZrtpDisplaySas () const;
@@ -281,18 +288,18 @@ class LIB_EXPORT Account : public QObject {
int localPort () const;
QString localInterface () const;
QString registrationStatus () const;
- QString type () const;
DtmfType DTMFType () const;
bool presenceStatus () const;
QString presenceMessage () const;
- TlsMethodModel::Type tlsMethod () const;
+ Account::Protocol type () const;
+ TlsMethodModel::Type tlsMethod () const;
KeyExchangeModel::Type keyExchange () const;
QVariant roleData (int role) const;
//Setters
void setId (const QString& id);
void setAlias (const QString& detail);
- void setType (const QString& detail);
+ void setType (Account::Protocol proto);
void setHostname (const QString& detail);
void setUsername (const QString& detail);
void setMailbox (const QString& detail);
@@ -350,9 +357,9 @@ class LIB_EXPORT Account : public QObject {
Account();
//Attributes
- QString m_AccountId ;
+ QString m_AccountId ;
QHash<QString,QString> m_hAccountDetails;
-
+
public Q_SLOTS:
void setEnabled(bool checked);
diff --git a/src/lib/sflphone_const.h b/src/lib/sflphone_const.h
index 2289dd1..84360f3 100644
--- a/src/lib/sflphone_const.h
+++ b/src/lib/sflphone_const.h
@@ -116,7 +116,7 @@
/** Maybe to remove **/
static const QString REGISTRATION_ENABLED_TRUE("true");
static const QString REGISTRATION_ENABLED_FALSE("false");
-#define ACCOUNT_TYPES_TAB {QString(Account::Protocol::SIP), \
QString(Account::Protocol::IAX)} +// #define ACCOUNT_TYPES_TAB \
{QString(Account::ProtocolName::SIP), QString(Account::ProtocolName::IAX)} /*********************/
/** Constant variables */
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic