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