forked from blue/squawk
first moves to safe pasword storing, preparing the structure
This commit is contained in:
parent
ddfb3419cc
commit
3477226367
21 changed files with 288 additions and 153 deletions
|
@ -53,7 +53,8 @@ Account::Account(const QString& p_login, const QString& p_server, const QString&
|
|||
avatarType(),
|
||||
ownVCardRequestInProgress(false),
|
||||
network(p_net),
|
||||
pendingStateMessages()
|
||||
pendingStateMessages(),
|
||||
passwordType(Shared::AccountPassword::plain)
|
||||
{
|
||||
config.setUser(p_login);
|
||||
config.setDomain(p_server);
|
||||
|
@ -266,6 +267,11 @@ QString Core::Account::getServer() const
|
|||
return config.domain();
|
||||
}
|
||||
|
||||
Shared::AccountPassword Core::Account::getPasswordType() const
|
||||
{
|
||||
return passwordType;
|
||||
}
|
||||
|
||||
void Core::Account::onRosterReceived()
|
||||
{
|
||||
vm->requestClientVCard(); //TODO need to make sure server actually supports vCards
|
||||
|
@ -296,6 +302,11 @@ void Core::Account::onRosterItemAdded(const QString& bareJid)
|
|||
}
|
||||
}
|
||||
|
||||
void Core::Account::setPasswordType(Shared::AccountPassword pt)
|
||||
{
|
||||
passwordType = pt;
|
||||
}
|
||||
|
||||
void Core::Account::onRosterItemChanged(const QString& bareJid)
|
||||
{
|
||||
std::map<QString, Contact*>::const_iterator itr = contacts.find(bareJid);
|
||||
|
|
|
@ -55,7 +55,13 @@ class Account : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
Account(const QString& p_login, const QString& p_server, const QString& p_password, const QString& p_name, NetworkAccess* p_net, QObject* parent = 0);
|
||||
Account(
|
||||
const QString& p_login,
|
||||
const QString& p_server,
|
||||
const QString& p_password,
|
||||
const QString& p_name,
|
||||
NetworkAccess* p_net,
|
||||
QObject* parent = 0);
|
||||
~Account();
|
||||
|
||||
void connect();
|
||||
|
@ -70,6 +76,7 @@ public:
|
|||
QString getResource() const;
|
||||
QString getAvatarPath() const;
|
||||
Shared::Availability getAvailability() const;
|
||||
Shared::AccountPassword getPasswordType() const;
|
||||
|
||||
void setName(const QString& p_name);
|
||||
void setLogin(const QString& p_login);
|
||||
|
@ -77,6 +84,7 @@ public:
|
|||
void setPassword(const QString& p_password);
|
||||
void setResource(const QString& p_resource);
|
||||
void setAvailability(Shared::Availability avail);
|
||||
void setPasswordType(Shared::AccountPassword pt);
|
||||
QString getFullJid() const;
|
||||
void sendMessage(Shared::Message data);
|
||||
void sendMessage(const Shared::Message& data, const QString& path);
|
||||
|
@ -158,6 +166,7 @@ private:
|
|||
bool ownVCardRequestInProgress;
|
||||
NetworkAccess* network;
|
||||
std::map<QString, QString> pendingStateMessages;
|
||||
Shared::AccountPassword passwordType;
|
||||
|
||||
private slots:
|
||||
void onClientConnected();
|
||||
|
|
|
@ -26,7 +26,8 @@ Core::Squawk::Squawk(QObject* parent):
|
|||
QObject(parent),
|
||||
accounts(),
|
||||
amap(),
|
||||
network()
|
||||
network(),
|
||||
waitingForAccounts(0)
|
||||
{
|
||||
connect(&network, &NetworkAccess::fileLocalPathResponse, this, &Squawk::fileLocalPathResponse);
|
||||
connect(&network, &NetworkAccess::downloadFileProgress, this, &Squawk::downloadFileProgress);
|
||||
|
@ -72,21 +73,7 @@ void Core::Squawk::start()
|
|||
{
|
||||
qDebug("Starting squawk core..");
|
||||
|
||||
QSettings settings;
|
||||
settings.beginGroup("core");
|
||||
int size = settings.beginReadArray("accounts");
|
||||
for (int i = 0; i < size; ++i) {
|
||||
settings.setArrayIndex(i);
|
||||
addAccount(
|
||||
settings.value("login").toString(),
|
||||
settings.value("server").toString(),
|
||||
settings.value("password").toString(),
|
||||
settings.value("name").toString(),
|
||||
settings.value("resource").toString()
|
||||
);
|
||||
}
|
||||
settings.endArray();
|
||||
settings.endGroup();
|
||||
readSettings();
|
||||
network.start();
|
||||
}
|
||||
|
||||
|
@ -98,10 +85,17 @@ void Core::Squawk::newAccountRequest(const QMap<QString, QVariant>& map)
|
|||
QString password = map.value("password").toString();
|
||||
QString resource = map.value("resource").toString();
|
||||
|
||||
addAccount(login, server, password, name, resource);
|
||||
addAccount(login, server, password, name, resource, Shared::AccountPassword::plain);
|
||||
}
|
||||
|
||||
void Core::Squawk::addAccount(const QString& login, const QString& server, const QString& password, const QString& name, const QString& resource)
|
||||
void Core::Squawk::addAccount(
|
||||
const QString& login,
|
||||
const QString& server,
|
||||
const QString& password,
|
||||
const QString& name,
|
||||
const QString& resource,
|
||||
Shared::AccountPassword passwordType
|
||||
)
|
||||
{
|
||||
QSettings settings;
|
||||
unsigned int reconnects = settings.value("reconnects", 2).toUInt();
|
||||
|
@ -109,6 +103,7 @@ void Core::Squawk::addAccount(const QString& login, const QString& server, const
|
|||
Account* acc = new Account(login, server, password, name, &network);
|
||||
acc->setResource(resource);
|
||||
acc->setReconnectTimes(reconnects);
|
||||
acc->setPasswordType(passwordType);
|
||||
accounts.push_back(acc);
|
||||
amap.insert(std::make_pair(name, acc));
|
||||
|
||||
|
@ -119,8 +114,10 @@ void Core::Squawk::addAccount(const QString& login, const QString& server, const
|
|||
connect(acc, &Account::addContact, this, &Squawk::onAccountAddContact);
|
||||
connect(acc, &Account::addGroup, this, &Squawk::onAccountAddGroup);
|
||||
connect(acc, &Account::removeGroup, this, &Squawk::onAccountRemoveGroup);
|
||||
connect(acc, qOverload<const QString&, const QString&>(&Account::removeContact), this, qOverload<const QString&, const QString&>(&Squawk::onAccountRemoveContact));
|
||||
connect(acc, qOverload<const QString&>(&Account::removeContact), this, qOverload<const QString&>(&Squawk::onAccountRemoveContact));
|
||||
connect(acc, qOverload<const QString&, const QString&>(&Account::removeContact),
|
||||
this, qOverload<const QString&, const QString&>(&Squawk::onAccountRemoveContact));
|
||||
connect(acc, qOverload<const QString&>(&Account::removeContact),
|
||||
this, qOverload<const QString&>(&Squawk::onAccountRemoveContact));
|
||||
connect(acc, &Account::changeContact, this, &Squawk::onAccountChangeContact);
|
||||
connect(acc, &Account::addPresence, this, &Squawk::onAccountAddPresence);
|
||||
connect(acc, &Account::removePresence, this, &Squawk::onAccountRemovePresence);
|
||||
|
@ -149,7 +146,8 @@ void Core::Squawk::addAccount(const QString& login, const QString& server, const
|
|||
{"state", QVariant::fromValue(Shared::ConnectionState::disconnected)},
|
||||
{"offline", QVariant::fromValue(Shared::Availability::offline)},
|
||||
{"error", ""},
|
||||
{"avatarPath", acc->getAvatarPath()}
|
||||
{"avatarPath", acc->getAvatarPath()},
|
||||
{"passwordType", QVariant::fromValue(passwordType)}
|
||||
};
|
||||
|
||||
emit newAccount(map);
|
||||
|
@ -486,8 +484,6 @@ void Core::Squawk::onAccountRemoveRoomPresence(const QString& jid, const QString
|
|||
emit removeRoomParticipant(acc->getName(), jid, nick);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Core::Squawk::onAccountChangeMessage(const QString& jid, const QString& id, const QMap<QString, QVariant>& data)
|
||||
{
|
||||
Account* acc = static_cast<Account*>(sender());
|
||||
|
@ -574,3 +570,49 @@ void Core::Squawk::uploadVCard(const QString& account, const Shared::VCard& card
|
|||
itr->second->uploadVCard(card);
|
||||
}
|
||||
|
||||
void Core::Squawk::readSettings()
|
||||
{
|
||||
QSettings settings;
|
||||
settings.beginGroup("core");
|
||||
int size = settings.beginReadArray("accounts");
|
||||
waitingForAccounts = size;
|
||||
for (int i = 0; i < size; ++i) {
|
||||
settings.setArrayIndex(i);
|
||||
parseAccount(
|
||||
settings.value("login").toString(),
|
||||
settings.value("server").toString(),
|
||||
settings.value("password", "").toString(),
|
||||
settings.value("name").toString(),
|
||||
settings.value("resource").toString(),
|
||||
Shared::Global::fromInt<Shared::AccountPassword>(settings.value("passwordType", static_cast<int>(Shared::AccountPassword::plain)).toInt())
|
||||
);
|
||||
}
|
||||
settings.endArray();
|
||||
settings.endGroup();
|
||||
}
|
||||
|
||||
void Core::Squawk::accountReady()
|
||||
{
|
||||
--waitingForAccounts;
|
||||
|
||||
if (waitingForAccounts == 0) {
|
||||
emit ready();
|
||||
}
|
||||
}
|
||||
|
||||
void Core::Squawk::parseAccount(
|
||||
const QString& login,
|
||||
const QString& server,
|
||||
const QString& password,
|
||||
const QString& name,
|
||||
const QString& resource,
|
||||
Shared::AccountPassword passwordType
|
||||
)
|
||||
{
|
||||
switch (passwordType) {
|
||||
case Shared::AccountPassword::plain:
|
||||
addAccount(login, server, password, name, resource, passwordType);
|
||||
accountReady();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ public:
|
|||
|
||||
signals:
|
||||
void quit();
|
||||
void ready();
|
||||
void newAccount(const QMap<QString, QVariant>&);
|
||||
void changeAccount(const QString& account, const QMap<QString, QVariant>& data);
|
||||
void removeAccount(const QString& account);
|
||||
|
@ -109,11 +110,18 @@ private:
|
|||
AccountsMap amap;
|
||||
Shared::Availability state;
|
||||
NetworkAccess network;
|
||||
|
||||
private:
|
||||
void addAccount(const QString& login, const QString& server, const QString& password, const QString& name, const QString& resource);
|
||||
uint8_t waitingForAccounts;
|
||||
|
||||
private slots:
|
||||
void addAccount(
|
||||
const QString& login,
|
||||
const QString& server,
|
||||
const QString& password,
|
||||
const QString& name,
|
||||
const QString& resource,
|
||||
Shared::AccountPassword passwordType
|
||||
);
|
||||
|
||||
void onAccountConnectionStateChanged(Shared::ConnectionState state);
|
||||
void onAccountAvailabilityChanged(Shared::Availability state);
|
||||
void onAccountChanged(const QMap<QString, QVariant>& data);
|
||||
|
@ -135,6 +143,18 @@ private slots:
|
|||
void onAccountChangeRoomPresence(const QString& jid, const QString& nick, const QMap<QString, QVariant>& data);
|
||||
void onAccountRemoveRoomPresence(const QString& jid, const QString& nick);
|
||||
void onAccountChangeMessage(const QString& jid, const QString& id, const QMap<QString, QVariant>& data);
|
||||
|
||||
private:
|
||||
void readSettings();
|
||||
void accountReady();
|
||||
void parseAccount(
|
||||
const QString& login,
|
||||
const QString& server,
|
||||
const QString& password,
|
||||
const QString& name,
|
||||
const QString& resource,
|
||||
Shared::AccountPassword passwordType
|
||||
);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue