1 /*
2 SPDX-FileCopyrightText: 2012-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "importwizardutil.h"
8 #include "importwizardsavepasswordjob.h"
9 #include "libimportwizard_debug.h"
10 #include <Akonadi/Tag>
11 #include <Akonadi/TagAttribute>
12 #include <Akonadi/TagCreateJob>
13 #include <KConfigGroup>
14 #include <KSharedConfig>
15
mergeLdap(const ldapStruct & ldap)16 void ImportWizardUtil::mergeLdap(const ldapStruct &ldap)
17 {
18 KSharedConfigPtr ldapConfig = KSharedConfig::openConfig(QStringLiteral("kabldaprc"));
19 int numberOfLdapSelected = 0;
20 KConfigGroup grp;
21 if (ldapConfig->hasGroup(QStringLiteral("LDAP"))) {
22 grp = ldapConfig->group(QStringLiteral("LDAP"));
23 numberOfLdapSelected = grp.readEntry(QStringLiteral("NumSelectedHosts"), 0);
24 grp.writeEntry(QStringLiteral("NumSelectedHosts"), (numberOfLdapSelected + 1));
25 } else {
26 grp = ldapConfig->group(QStringLiteral("LDAP"));
27 grp.writeEntry(QStringLiteral("NumSelectedHosts"), 1);
28
29 KConfigGroup ldapSeach = ldapConfig->group(QStringLiteral("LDAPSearch"));
30 ldapSeach.writeEntry(QStringLiteral("SearchType"), 0);
31 }
32 const int port = ldap.port;
33 if (port != -1) {
34 grp.writeEntry(QStringLiteral("SelectedPort%1").arg(numberOfLdapSelected), port);
35 }
36 grp.writeEntry(QStringLiteral("SelectedHost%1").arg(numberOfLdapSelected), ldap.ldapUrl.host());
37 if (ldap.useSSL) {
38 grp.writeEntry(QStringLiteral("SelectedSecurity%1").arg(numberOfLdapSelected), QStringLiteral("SSL"));
39 } else if (ldap.useTLS) {
40 grp.writeEntry(QStringLiteral("SelectedSecurity%1").arg(numberOfLdapSelected), QStringLiteral("TLS"));
41 } else {
42 grp.writeEntry(QStringLiteral("SelectedSecurity%1").arg(numberOfLdapSelected), QStringLiteral("None"));
43 }
44
45 if (ldap.saslMech == QLatin1String("GSSAPI")) {
46 grp.writeEntry(QStringLiteral("SelectedMech%1").arg(numberOfLdapSelected), QStringLiteral("GSSAPI"));
47 grp.writeEntry(QStringLiteral("SelectedAuth%1").arg(numberOfLdapSelected), QStringLiteral("SASL"));
48 } else if (ldap.saslMech.isEmpty()) {
49 grp.writeEntry(QStringLiteral("SelectedMech%1").arg(numberOfLdapSelected), QStringLiteral("PLAIN"));
50 grp.writeEntry(QStringLiteral("SelectedAuth%1").arg(numberOfLdapSelected), QStringLiteral("Simple"));
51 } else {
52 qCDebug(LIBIMPORTWIZARD_LOG) << " Mech SASL undefined" << ldap.saslMech;
53 }
54 grp.writeEntry(QStringLiteral("SelectedVersion%1").arg(numberOfLdapSelected), QString::number(3));
55 grp.writeEntry(QStringLiteral("SelectedBind%1").arg(numberOfLdapSelected), ldap.dn);
56 // TODO: Verify selectedbase
57 grp.writeEntry(QStringLiteral("SelectedBase%1").arg(numberOfLdapSelected), ldap.ldapUrl.path());
58 if (ldap.timeout != -1) {
59 grp.writeEntry(QStringLiteral("SelectedTimeLimit%1").arg(numberOfLdapSelected), ldap.timeout);
60 }
61 if (ldap.limit != -1) {
62 grp.writeEntry(QStringLiteral("SelectedSizeLimit%1").arg(numberOfLdapSelected), ldap.limit);
63 }
64 if (!ldap.password.isEmpty()) {
65 storePassword(QStringLiteral("SelectedPwdBind%1").arg(numberOfLdapSelected), ImportWizardUtil::Ldap, ldap.password);
66 }
67 grp.sync();
68 }
69
addAkonadiTag(const QVector<tagStruct> & tagList)70 void ImportWizardUtil::addAkonadiTag(const QVector<tagStruct> &tagList)
71 {
72 for (int i = 0; i < tagList.size(); ++i) {
73 Akonadi::Tag tag(tagList.at(i).name);
74 if (tagList.at(i).color.isValid()) {
75 tag.attribute<Akonadi::TagAttribute>(Akonadi::Tag::AddIfMissing)->setTextColor(tagList.at(i).color);
76 }
77 new Akonadi::TagCreateJob(tag);
78 }
79 }
80
storePassword(const QString & name,ImportWizardUtil::ResourceType type,const QString & password)81 void ImportWizardUtil::storePassword(const QString &name, ImportWizardUtil::ResourceType type, const QString &password)
82 {
83 auto job = new ImportWizardSavePasswordJob;
84 switch (type) {
85 case Imap:
86 job->setName(QStringLiteral("imap"));
87 job->setPassword(password);
88 job->setKey(name + QLatin1String("rc"));
89 break;
90 case Pop3:
91 job->setName(QStringLiteral("pop3"));
92 job->setPassword(password);
93 job->setKey(name);
94 break;
95 case Ldap:
96 job->setName(QStringLiteral("ldapclient"));
97 job->setPassword(password);
98 job->setKey(name);
99 }
100 job->start();
101 }
102