fixing unit tests
[accounts-sso:signon.git] / src / plugins / password / passwordplugin.cpp
1 /*
2  * This file is part of signon
3  *
4  * Copyright (C) 2009-2010 Nokia Corporation.
5  *
6  * Contact: Alberto Mardegan <alberto.mardegan@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * version 2.1 as published by the Free Software Foundation.
11  *
12  * This library is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20  * 02110-1301 USA
21  */
22
23 #include "passwordplugin.h"
24 #include "SignOn/signonplugincommon.h"
25
26 using namespace SignOn;
27 static bool isProcessing = false;
28 static bool isUnitTesting = false;
29
30 namespace PasswordPluginNS {
31
32     PasswordPlugin::PasswordPlugin(QObject *parent)
33     : AuthPluginInterface(parent)
34     {
35         TRACE();
36     }
37
38     PasswordPlugin::~PasswordPlugin()
39     {
40         TRACE();
41    }
42
43     QString PasswordPlugin::type() const
44     {
45         return QLatin1String("password");
46     }
47
48     QStringList PasswordPlugin::mechanisms() const
49     {
50         QStringList res = QStringList(QLatin1String("password"));
51
52         return res;
53     }
54
55     void PasswordPlugin::cancel()
56     {
57         replyError(Error(Error::SessionCanceled));
58     }
59
60     /*
61      * Password plugin is used for returning password
62      * */
63     void PasswordPlugin::process(const SignOn::SessionData &inData,
64                                 const QString &mechanism )
65     {
66         TRACE();
67         Q_UNUSED(mechanism);
68         SignOn::SessionData response;
69
70         isProcessing = true;
71
72         if (!inData.UserName().isEmpty())
73             response.setUserName(inData.UserName());
74
75         if (!inData.Secret().isEmpty()) {
76             response.setSecret(inData.Secret());
77             replyResult(response);
78             return;
79         }
80
81         //we didn't receive password from signond, so ask from user
82         SignOn::UiSessionData data = inData.data<UiSessionData>();
83         if (inData.UserName().isEmpty())
84             data.setQueryUserName(true);
85         else
86             data.setUserName(inData.UserName());
87
88         data.setQueryPassword(true);
89
90         TRACE() << data.propertyNames();
91         emit userActionRequired(data);
92
93         return;
94     }
95
96     void PasswordPlugin::userActionFinished(const SignOn::UiSessionData &data)
97     {
98         TRACE();
99
100         if (data.QueryErrorCode() == QUERY_ERROR_NONE) {
101             SignOn::SessionData response;
102             response.setUserName(data.UserName());
103             response.setSecret(data.Secret());
104             replyResult(response);
105             return;
106         }
107
108         if (data.QueryErrorCode() == QUERY_ERROR_CANCELED)
109             replyError(Error::SessionCanceled);
110         else
111             replyError(Error(Error::UserInteraction,
112                        QLatin1String("userActionFinished error: ")
113                        + QString::number(data.QueryErrorCode())));
114
115         return;
116     }
117
118     void PasswordPlugin::replyError(const Error &err)
119     {
120         if (isProcessing || isUnitTesting) {
121             TRACE() << "Error Emitted";
122             emit error(err);
123             isProcessing = false;
124         }
125     }
126
127     void PasswordPlugin::replyResult(const SessionData &data)
128     {
129         if (isProcessing || isUnitTesting) {
130             TRACE() << "Result Emitted";
131             emit result(data);
132             isProcessing = false;
133         }
134     }
135
136     void PasswordPlugin::setupForUnitTests()
137     {
138         isUnitTesting = true;
139     }
140
141
142     SIGNON_DECL_AUTH_PLUGIN(PasswordPlugin)
143 } //namespace PasswordPluginNS