2323
2424#include " Application.h"
2525#include " CheckConnection.h"
26- #include " common_enums.h"
2726#include " FileDialog.h"
2827#include " IKValidator.h"
2928#include " LdapSearch.h"
3231#include " TokenData.h"
3332#include " dialogs/WarningDialog.h"
3433#include " effects/Overlay.h"
34+ #include " widgets/AddressItem.h"
35+ #include " widgets/ItemList.h"
3536
3637#include < QtCore/QDateTime>
3738#include < QtCore/QJsonArray>
38- #include < QtCore/QJsonObject>
3939#include < QtNetwork/QSslConfiguration>
4040#include < QtNetwork/QSslError>
4141#include < QtWidgets/QMessageBox>
4242
4343AddRecipients::AddRecipients (ItemList* itemList, QWidget *parent)
4444 : QDialog(parent)
4545 , ui(new Ui::AddRecipients)
46- , ldap_person(new LdapSearch(defaultUrl(QLatin1String(" LDAP-PERSON-URL" ), QStringLiteral(" ldaps://esteid.ldap.sk.ee" )).toUtf8(), this))
47- , ldap_corp(new LdapSearch(defaultUrl(QLatin1String(" LDAP-CORP-URL" ), QStringLiteral(" ldaps://k3.ldap.sk.ee" )).toUtf8(), this))
46+ , ldap_corp(new LdapSearch(Application::confValue(QLatin1String(" LDAP-CORP-URL" )).toString(QStringLiteral(" ldaps://k3.ldap.sk.ee" )), this))
4847{
48+ for (const auto list = Application::confValue (QLatin1String (" LDAP-PERSON-URLS" )).toArray (); auto url: list) {
49+ ldap_person.append (new LdapSearch (url.toString (), this ));
50+ }
51+ if (ldap_person.isEmpty ()) {
52+ ldap_person.append (new LdapSearch (QStringLiteral (" ldaps://esteid.ldap.sk.ee" ), this ));
53+ ldap_person.append (new LdapSearch (QStringLiteral (" ldaps://ldap.eidpki.ee/dc=eidpki,dc=ee" ), this ));
54+ }
55+
4956 ui->setupUi (this );
5057#if defined (Q_OS_WIN)
5158 ui->actionLayout ->setDirection (QBoxLayout::RightToLeft);
@@ -62,9 +69,11 @@ AddRecipients::AddRecipients(ItemList* itemList, QWidget *parent)
6269 ui->leftPane ->clear ();
6370 search (term);
6471 });
65- connect (ldap_person, &LdapSearch::searchResult, this , &AddRecipients::showResult);
72+ for (auto ldap: ldap_person) {
73+ connect (ldap, &LdapSearch::searchResult, this , &AddRecipients::showResult);
74+ connect (ldap, &LdapSearch::error, this , &AddRecipients::showError);
75+ }
6676 connect (ldap_corp, &LdapSearch::searchResult, this , &AddRecipients::showResult);
67- connect (ldap_person, &LdapSearch::error, this , &AddRecipients::showError);
6877 connect (ldap_corp, &LdapSearch::error, this , &AddRecipients::showError);
6978 connect (this , &AddRecipients::finished, this , &AddRecipients::close);
7079
@@ -139,7 +148,7 @@ void AddRecipients::addRecipientFromHistory()
139148
140149 ui->leftPane ->clear ();
141150 for (const HistoryCertData &certData: selectedCertData) {
142- QString term = (certData.type == QStringLiteral (" 1" ) || certData.type == QStringLiteral (" 3" )) ? certData.CN : certData.CN .split (' ,' ).value (2 );
151+ QString term = (certData.type == QLatin1String (" 1" ) || certData.type == QLatin1String (" 3" )) ? certData.CN : certData.CN .split (' ,' ).value (2 );
143152 search (term, true , certData.type );
144153 }
145154 });
@@ -153,13 +162,9 @@ void AddRecipients::addRecipient(const QSslCertificate& cert, bool select)
153162 {
154163 leftItem = new AddressItem (cert, AddressItem::Add, ui->leftPane );
155164 ui->leftPane ->addWidget (leftItem);
156- bool contains = rightList.contains (cert);
157- leftItem->setDisabled (contains);
165+ leftItem->setDisabled (rightList.contains (cert));
158166 connect (leftItem, &AddressItem::add, this , [this ](Item *item) { addRecipientToRightPane (item); });
159- if (auto *add = ui->leftPane ->findChild <QWidget*>(QStringLiteral (" add" )))
160- add->setVisible (true );
161167 }
162-
163168 if (select)
164169 addRecipientToRightPane (leftItem);
165170}
@@ -202,7 +207,6 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
202207 return ;
203208 }
204209 }
205- updated = update;
206210
207211 rightList.append (key);
208212
@@ -212,7 +216,6 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
212216 if (auto *leftItem = itemListValue (ui->leftPane , rightItem->getKey ().cert ))
213217 leftItem->setDisabled (false );
214218 rightList.removeAll (rightItem->getKey ());
215- updated = true ;
216219 ui->confirm ->setDisabled (rightList.isEmpty ());
217220 });
218221 ui->rightPane ->addWidget (rightItem);
@@ -222,14 +225,9 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
222225 leftItem->setDisabled (true );
223226}
224227
225- QString AddRecipients::defaultUrl (QLatin1String key, const QString &defaultValue)
226- {
227- return Application::confValue (key).toString (defaultValue);
228- }
229-
230228bool AddRecipients::isUpdated () const
231229{
232- return updated ;
230+ return ui-> confirm -> isEnabled () ;
233231}
234232
235233AddressItem* AddRecipients::itemListValue (ItemList *list, const CKey &cert)
@@ -273,6 +271,7 @@ void AddRecipients::search(const QString &term, bool select, const QString &type
273271 .replace (QStringLiteral (" (" ), QStringLiteral (" \\ (" ))
274272 .replace (QStringLiteral (" )" ), QStringLiteral (" \\ )" ));
275273#endif
274+ multiSearch = 0 ;
276275 bool isDigit = false ;
277276 void (cleanTerm.toULongLong (&isDigit));
278277 if (!isDigit || (cleanTerm.size () != 11 && cleanTerm.size () != 8 ))
@@ -282,7 +281,10 @@ void AddRecipients::search(const QString &term, bool select, const QString &type
282281 else if (IKValidator::isValid (cleanTerm))
283282 {
284283 userData[QStringLiteral (" personSearch" )] = true ;
285- ldap_person->search (QStringLiteral (" (serialNumber=%1%2)" ).arg (ldap_person->isSSL () ? QStringLiteral (" PNOEE-" ) : QString (), cleanTerm), userData);
284+ for (auto *ldap: ldap_person) {
285+ ldap->search (QStringLiteral (" (serialNumber=PNOEE-%1)" ).arg (cleanTerm), userData);
286+ ++multiSearch;
287+ }
286288 }
287289 else
288290 {
@@ -314,7 +316,7 @@ void AddRecipients::showResult(const QList<QSslCertificate> &result, int resultC
314316 }
315317 if (resultCount >= 50 )
316318 showError (tr (" The name you were looking for gave too many results, please refine your search." ));
317- else if (ui->leftPane ->items .isEmpty ())
319+ else if (--multiSearch <= 0 && ui->leftPane ->items .isEmpty ())
318320 {
319321 showError (tr (" Person or company does not own a valid certificate.<br />"
320322 " It is necessary to have a valid certificate for encryption.<br />"
0 commit comments