LeechCraft
0.6.70-18450-gabe19ee3b0
Modular cross-platform feature rich live environment.
Toggle main menu visibility
Loading...
Searching...
No Matches
passutils.cpp
Go to the documentation of this file.
1
/**********************************************************************
2
* LeechCraft - modular cross-platform feature rich internet client.
3
* Copyright (C) 2006-2014 Georg Rudoy
4
*
5
* Distributed under the Boost Software License, Version 1.0.
6
* (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7
**********************************************************************/
8
9
#include "
passutils.h
"
10
#include <QString>
11
#include <QObject>
12
#include <QInputDialog>
13
#include <
util/xpc/util.h
>
14
#include <
interfaces/structures.h
>
15
#include <
interfaces/core/ientitymanager.h
>
16
#include <
interfaces/core/ipluginsmanager.h
>
17
#include <
interfaces/ipersistentstorageplugin.h
>
18
#include <
util/sll/eithercont.h
>
19
#include <
util/sll/qtutil.h
>
20
21
namespace
LC::Util
22
{
23
namespace
24
{
25
QString GetPasswordHelper (
const
QByteArray& key,
const
ICoreProxy_ptr
& proxy)
26
{
27
const
auto
& result =
GetPersistentData
(key, proxy);
28
if
(!result.isValid ())
29
{
30
qWarning () <<
"invalid result for key"
<< key;
31
return
{};
32
}
33
34
return
HandleQVariant
(result,
35
[] (
const
QString& str) {
return
str; },
36
[] (
const
QVariantList& list) {
return
list.value (0).toString (); },
37
[] (
const
QStringList& list) {
return
list.value (0); },
38
[&]
39
{
40
qWarning () <<
"unknown result type"
<< result.metaType () << result <<
"for key"
<< key;
41
return
QString {};
42
});
43
}
44
}
45
46
QString
GetPassword
(
const
QString& key,
const
QString& diaText,
47
const
ICoreProxy_ptr
& proxy,
bool
useStored)
48
{
49
if
(useStored)
50
{
51
const
auto
& result = GetPasswordHelper (key.toUtf8 (), proxy);
52
if
(!result.isNull ())
53
return
result;
54
}
55
56
const
auto
& result = QInputDialog::getText (
nullptr
,
57
QStringLiteral (
"LeechCraft"
),
58
diaText,
59
QLineEdit::Password);
60
if
(!result.isNull ())
61
SavePassword
(result, key, proxy);
62
return
result;
63
}
64
65
void
GetPassword
(
const
QString& key,
const
QString& diaText,
66
const
ICoreProxy_ptr
& proxy,
67
const
EitherCont
<
void
(),
void
(QString)>& cont,
68
QObject *depender,
69
bool
useStored)
70
{
71
if
(useStored)
72
{
73
const
auto
& result = GetPasswordHelper (key.toUtf8 (), proxy);
74
if
(!result.isNull ())
75
{
76
cont.Right (result);
77
return
;
78
}
79
}
80
81
const
auto
dialog =
new
QInputDialog;
82
dialog->setInputMode (QInputDialog::TextInput);
83
dialog->setWindowTitle (QStringLiteral (
"LeechCraft"
));
84
dialog->setLabelText (diaText);
85
dialog->setTextEchoMode (QLineEdit::Password);
86
dialog->setAttribute (Qt::WA_DeleteOnClose);
87
88
if
(depender)
89
QObject::connect (depender,
90
&QObject::destroyed,
91
dialog,
92
&QObject::deleteLater);
93
94
QObject::connect (dialog,
95
&QDialog::finished,
96
[dialog, cont] (
int
r)
97
{
98
const
auto
& value = dialog->textValue ();
99
if
(r == QDialog::Rejected || value.isEmpty ())
100
cont.Left ();
101
else
102
cont.Right (value);
103
});
104
105
dialog->show ();
106
}
107
108
void
SavePassword
(
const
QString& password,
const
QString& key,
109
const
ICoreProxy_ptr
& proxy)
110
{
111
const
auto
& plugins = proxy->
GetPluginsManager
()->
GetAllCastableTo
<
IPersistentStoragePlugin
*> ();
112
for
(
const
auto
plugin : plugins)
113
if
(
const
auto
& storage = plugin->RequestStorage ())
114
storage->Set (key.toUtf8 (), password);
115
}
116
}
ICoreProxy::GetPluginsManager
virtual IPluginsManager * GetPluginsManager() const =0
Returns the application's plugin manager.
IPersistentStoragePlugin
Interface for plugins providing persistent (and possibly secure) storage.
Definition
ipersistentstorageplugin.h:79
IPluginsManager::GetAllCastableTo
QList< T > GetAllCastableTo() const
Similar to GetAlLCastableRoots() and provided for convenience.
Definition
ipluginsmanager.h:91
LC::Util::EitherCont
A peir of two functions, typically a continuation and an error handler.
Definition
eithercont.h:31
eithercont.h
ICoreProxy_ptr
std::shared_ptr< ICoreProxy > ICoreProxy_ptr
Definition
icoreproxy.h:177
ientitymanager.h
ipersistentstorageplugin.h
ipluginsmanager.h
LC::Util
Definition
icoreproxy.h:34
LC::Util::GetPersistentData
QVariant GetPersistentData(const QByteArray &key, const ICoreProxy_ptr &proxy)
Returns persistent data stored under given key.
Definition
util.cpp:125
LC::Util::HandleQVariant
auto HandleQVariant(const QVariant &variant, Fs &&... handlers)
Definition
qtutil.h:143
LC::Util::SavePassword
void SavePassword(const QString &password, const QString &key, const ICoreProxy_ptr &proxy)
Saves the password to be retrieved later via GetPassword().
Definition
passutils.cpp:108
LC::Util::GetPassword
QString GetPassword(const QString &key, const QString &diaText, const ICoreProxy_ptr &proxy, bool useStored)
Returns password for the key, possibly asking the user.
Definition
passutils.cpp:46
passutils.h
qtutil.h
structures.h
util.h
src
util
xpc
passutils.cpp
Generated by
1.17.0