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,11 @@ 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); });
159167 if (auto *add = ui->leftPane ->findChild <QWidget*>(QStringLiteral (" add" )))
160168 add->setVisible (true );
161169 }
162-
163170 if (select)
164171 addRecipientToRightPane (leftItem);
165172}
@@ -202,7 +209,6 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
202209 return ;
203210 }
204211 }
205- updated = update;
206212
207213 rightList.append (key);
208214
@@ -212,7 +218,6 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
212218 if (auto *leftItem = itemListValue (ui->leftPane , rightItem->getKey ().cert ))
213219 leftItem->setDisabled (false );
214220 rightList.removeAll (rightItem->getKey ());
215- updated = true ;
216221 ui->confirm ->setDisabled (rightList.isEmpty ());
217222 });
218223 ui->rightPane ->addWidget (rightItem);
@@ -222,14 +227,9 @@ void AddRecipients::addRecipientToRightPane(Item *item, bool update)
222227 leftItem->setDisabled (true );
223228}
224229
225- QString AddRecipients::defaultUrl (QLatin1String key, const QString &defaultValue)
226- {
227- return Application::confValue (key).toString (defaultValue);
228- }
229-
230230bool AddRecipients::isUpdated () const
231231{
232- return updated ;
232+ return ui-> confirm -> isEnabled () ;
233233}
234234
235235AddressItem* AddRecipients::itemListValue (ItemList *list, const CKey &cert)
@@ -273,6 +273,7 @@ void AddRecipients::search(const QString &term, bool select, const QString &type
273273 .replace (QStringLiteral (" (" ), QStringLiteral (" \\ (" ))
274274 .replace (QStringLiteral (" )" ), QStringLiteral (" \\ )" ));
275275#endif
276+ multiSearch = 0 ;
276277 bool isDigit = false ;
277278 void (cleanTerm.toULongLong (&isDigit));
278279 if (!isDigit || (cleanTerm.size () != 11 && cleanTerm.size () != 8 ))
@@ -282,7 +283,10 @@ void AddRecipients::search(const QString &term, bool select, const QString &type
282283 else if (IKValidator::isValid (cleanTerm))
283284 {
284285 userData[QStringLiteral (" personSearch" )] = true ;
285- ldap_person->search (QStringLiteral (" (serialNumber=%1%2)" ).arg (ldap_person->isSSL () ? QStringLiteral (" PNOEE-" ) : QString (), cleanTerm), userData);
286+ for (auto *ldap: ldap_person) {
287+ ldap->search (QStringLiteral (" (serialNumber=PNOEE-%1)" ).arg (cleanTerm), userData);
288+ ++multiSearch;
289+ }
286290 }
287291 else
288292 {
@@ -314,7 +318,7 @@ void AddRecipients::showResult(const QList<QSslCertificate> &result, int resultC
314318 }
315319 if (resultCount >= 50 )
316320 showError (tr (" The name you were looking for gave too many results, please refine your search." ));
317- else if (ui->leftPane ->items .isEmpty ())
321+ else if (--multiSearch <= 0 && ui->leftPane ->items .isEmpty ())
318322 {
319323 showError (tr (" Person or company does not own a valid certificate.<br />"
320324 " It is necessary to have a valid certificate for encryption.<br />"
0 commit comments