Commit c714ad8d authored by Ronan Abhamon's avatar Ronan Abhamon

feat(ui/views/App/Main): display popup when auth failed

parent c1645184
...@@ -89,6 +89,7 @@ set(SOURCES ...@@ -89,6 +89,7 @@ set(SOURCES
src/app/providers/ThumbnailProvider.cpp src/app/providers/ThumbnailProvider.cpp
src/app/translator/DefaultTranslator.cpp src/app/translator/DefaultTranslator.cpp
src/components/assistant/AssistantModel.cpp src/components/assistant/AssistantModel.cpp
src/components/authentication/Authentication.cpp
src/components/call/CallModel.cpp src/components/call/CallModel.cpp
src/components/calls/CallsListModel.cpp src/components/calls/CallsListModel.cpp
src/components/camera/Camera.cpp src/components/camera/Camera.cpp
...@@ -126,9 +127,10 @@ set(HEADERS ...@@ -126,9 +127,10 @@ set(HEADERS
src/app/providers/ThumbnailProvider.hpp src/app/providers/ThumbnailProvider.hpp
src/app/translator/DefaultTranslator.hpp src/app/translator/DefaultTranslator.hpp
src/components/assistant/AssistantModel.hpp src/components/assistant/AssistantModel.hpp
src/components/camera/Camera.hpp src/components/authentication/Authentication.hpp
src/components/call/CallModel.hpp src/components/call/CallModel.hpp
src/components/calls/CallsListModel.hpp src/components/calls/CallsListModel.hpp
src/components/camera/Camera.hpp
src/components/camera/MSFunctions.hpp src/components/camera/MSFunctions.hpp
src/components/chat/ChatModel.hpp src/components/chat/ChatModel.hpp
src/components/chat/ChatProxyModel.hpp src/components/chat/ChatProxyModel.hpp
......
...@@ -144,6 +144,33 @@ ...@@ -144,6 +144,33 @@
<translation>Please verify that you have validated your account or try again.</translation> <translation>Please verify that you have validated your account or try again.</translation>
</message> </message>
</context> </context>
<context>
<name>AuthenticationRequest</name>
<message>
<source>cancel</source>
<translation>CANCEL</translation>
</message>
<message>
<source>confirm</source>
<translation>LOGIN</translation>
</message>
<message>
<source>identityLabel</source>
<translation>Identity</translation>
</message>
<message>
<source>passwordLabel</source>
<translation>Password</translation>
</message>
<message>
<source>authentificationRequestDescription</source>
<translation>Unable to authenticate. Please verify your password.</translation>
</message>
<message>
<source>userIdLabel</source>
<translation>User ID (optional)</translation>
</message>
</context>
<context> <context>
<name>Calls</name> <name>Calls</name>
<message> <message>
......
...@@ -144,6 +144,33 @@ ...@@ -144,6 +144,33 @@
<translation>Merci de vérifier que vous avez validé votre compte ou réessayez plus tard.</translation> <translation>Merci de vérifier que vous avez validé votre compte ou réessayez plus tard.</translation>
</message> </message>
</context> </context>
<context>
<name>AuthenticationRequest</name>
<message>
<source>cancel</source>
<translation>ANNULER</translation>
</message>
<message>
<source>confirm</source>
<translation>SE CONNECTER</translation>
</message>
<message>
<source>identityLabel</source>
<translation>Identité</translation>
</message>
<message>
<source>passwordLabel</source>
<translation>Mot de passe</translation>
</message>
<message>
<source>authentificationRequestDescription</source>
<translation>Impossible de vous authentifier. Merci de vérifier votre mot de passe.</translation>
</message>
<message>
<source>userIdLabel</source>
<translation>ID utilisateur (optionnel)</translation>
</message>
</context>
<context> <context>
<name>Calls</name> <name>Calls</name>
<message> <message>
......
...@@ -345,6 +345,8 @@ ...@@ -345,6 +345,8 @@
<file>ui/views/App/Main/Assistant/UseLinphoneSipAccountWithPhoneNumber.qml</file> <file>ui/views/App/Main/Assistant/UseLinphoneSipAccountWithPhoneNumber.qml</file>
<file>ui/views/App/Main/Assistant/UseLinphoneSipAccountWithUsername.qml</file> <file>ui/views/App/Main/Assistant/UseLinphoneSipAccountWithUsername.qml</file>
<file>ui/views/App/Main/Assistant/UseOtherSipAccount.qml</file> <file>ui/views/App/Main/Assistant/UseOtherSipAccount.qml</file>
<file>ui/views/App/Main/AuthenticationRequest.js</file>
<file>ui/views/App/Main/AuthenticationRequest.qml</file>
<file>ui/views/App/Main/ContactEdit.js</file> <file>ui/views/App/Main/ContactEdit.js</file>
<file>ui/views/App/Main/ContactEdit.qml</file> <file>ui/views/App/Main/ContactEdit.qml</file>
<file>ui/views/App/Main/Contacts.qml</file> <file>ui/views/App/Main/Contacts.qml</file>
...@@ -375,6 +377,7 @@ ...@@ -375,6 +377,7 @@
<file>ui/views/App/Styles/Main/Assistant/CreateLinphoneSipAccountStyle.qml</file> <file>ui/views/App/Styles/Main/Assistant/CreateLinphoneSipAccountStyle.qml</file>
<file>ui/views/App/Styles/Main/AssistantStyle.qml</file> <file>ui/views/App/Styles/Main/AssistantStyle.qml</file>
<file>ui/views/App/Styles/Main/Assistant/UseLinphoneSipAccountStyle.qml</file> <file>ui/views/App/Styles/Main/Assistant/UseLinphoneSipAccountStyle.qml</file>
<file>ui/views/App/Styles/Main/AuthenticationRequestStyle.qml</file>
<file>ui/views/App/Styles/Main/ContactEditStyle.qml</file> <file>ui/views/App/Styles/Main/ContactEditStyle.qml</file>
<file>ui/views/App/Styles/Main/ContactsStyle.qml</file> <file>ui/views/App/Styles/Main/ContactsStyle.qml</file>
<file>ui/views/App/Styles/Main/ConversationStyle.qml</file> <file>ui/views/App/Styles/Main/ConversationStyle.qml</file>
......
...@@ -276,10 +276,11 @@ void App::registerTypes () { ...@@ -276,10 +276,11 @@ void App::registerTypes () {
qInfo() << "Registering types..."; qInfo() << "Registering types...";
qmlRegisterType<AssistantModel>("Linphone", 1, 0, "AssistantModel"); qmlRegisterType<AssistantModel>("Linphone", 1, 0, "AssistantModel");
qmlRegisterType<Authentication>("Linphone", 1, 0, "Authentication");
qmlRegisterType<Camera>("Linphone", 1, 0, "Camera"); qmlRegisterType<Camera>("Linphone", 1, 0, "Camera");
qmlRegisterType<ContactsListProxyModel>("Linphone", 1, 0, "ContactsListProxyModel");
qmlRegisterType<ChatModel>("Linphone", 1, 0, "ChatModel"); qmlRegisterType<ChatModel>("Linphone", 1, 0, "ChatModel");
qmlRegisterType<ChatProxyModel>("Linphone", 1, 0, "ChatProxyModel"); qmlRegisterType<ChatProxyModel>("Linphone", 1, 0, "ChatProxyModel");
qmlRegisterType<ContactsListProxyModel>("Linphone", 1, 0, "ContactsListProxyModel");
qmlRegisterType<SmartSearchBarModel>("Linphone", 1, 0, "SmartSearchBarModel"); qmlRegisterType<SmartSearchBarModel>("Linphone", 1, 0, "SmartSearchBarModel");
qRegisterMetaType<ChatModel::EntryType>("ChatModel::EntryType"); qRegisterMetaType<ChatModel::EntryType>("ChatModel::EntryType");
...@@ -394,7 +395,7 @@ void App::openAppAfterInit () { ...@@ -394,7 +395,7 @@ void App::openAppAfterInit () {
getMainWindow()->showNormal(); getMainWindow()->showNormal();
#else #else
getMainWindow()->showNormal(); getMainWindow()->showNormal();
#endif // ifndef __APPLE__ #endif // ifndef __APPLE__
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
*/ */
#include "assistant/AssistantModel.hpp" #include "assistant/AssistantModel.hpp"
#include "authentication/Authentication.hpp"
#include "calls/CallsListModel.hpp" #include "calls/CallsListModel.hpp"
#include "camera/Camera.hpp" #include "camera/Camera.hpp"
#include "chat/ChatProxyModel.hpp" #include "chat/ChatProxyModel.hpp"
......
/*
* Authentication.cpp
* Copyright (C) 2017 Belledonne Communications, Grenoble, France
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Created on: April 13, 2017
* Author: Ronan Abhamon
*/
#include "../../utils.hpp"
#include "../core/CoreManager.hpp"
#include "Authentication.hpp"
using namespace std;
// =============================================================================
Authentication::Authentication (QObject *parent) : QObject(parent) {
QObject::connect(
&(*CoreManager::getInstance()->getHandlers()), &CoreHandlers::authenticationRequested,
this, &Authentication::handleAuthenticationRequested
);
}
void Authentication::handleAuthenticationRequested (const shared_ptr<linphone::AuthInfo> &authInfo) {
emit authenticationRequested(
QVariant::fromValue(authInfo),
QStringLiteral("%1@%2").arg(
::Utils::linphoneStringToQString(authInfo->getUsername())
).arg(
::Utils::linphoneStringToQString(authInfo->getDomain())
),
::Utils::linphoneStringToQString(authInfo->getUserid())
);
}
/*
* Authentication.hpp
* Copyright (C) 2017 Belledonne Communications, Grenoble, France
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Created on: April 13, 2017
* Author: Ronan Abhamon
*/
#ifndef AUTHENTICATION_H_
#define AUTHENTICATION_H_
#include <linphone++/linphone.hh>
#include <QObject>
// =============================================================================
class Authentication : public QObject {
Q_OBJECT;
public:
Authentication (QObject *parent = Q_NULLPTR);
~Authentication () = default;
signals:
void authenticationRequested (const QVariant &authInfo, const QString &sipAddress, const QString &userId);
private:
void handleAuthenticationRequested (const std::shared_ptr<linphone::AuthInfo> &authInfo);
};
Q_DECLARE_METATYPE(std::shared_ptr<linphone::AuthInfo> );
#endif // AUTHENTICATION_H_
...@@ -34,10 +34,10 @@ using namespace std; ...@@ -34,10 +34,10 @@ using namespace std;
void CoreHandlers::onAuthenticationRequested ( void CoreHandlers::onAuthenticationRequested (
const shared_ptr<linphone::Core> &, const shared_ptr<linphone::Core> &,
const shared_ptr<linphone::AuthInfo> &, const shared_ptr<linphone::AuthInfo> &auth_info,
linphone::AuthMethod linphone::AuthMethod
) { ) {
qDebug() << "Auth request"; emit authenticationRequested(auth_info);
} }
void CoreHandlers::onCallStateChanged ( void CoreHandlers::onCallStateChanged (
......
...@@ -34,6 +34,7 @@ class CoreHandlers : ...@@ -34,6 +34,7 @@ class CoreHandlers :
Q_OBJECT; Q_OBJECT;
signals: signals:
void authenticationRequested (const std::shared_ptr<linphone::AuthInfo> &auth_info);
void callStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::CallState state); void callStateChanged (const std::shared_ptr<linphone::Call> &call, linphone::CallState state);
void messageReceived (const std::shared_ptr<linphone::ChatMessage> &message); void messageReceived (const std::shared_ptr<linphone::ChatMessage> &message);
void presenceReceived (const QString &sip_address, const std::shared_ptr<const linphone::PresenceModel> &presence_model); void presenceReceived (const QString &sip_address, const std::shared_ptr<const linphone::PresenceModel> &presence_model);
......
...@@ -171,6 +171,17 @@ shared_ptr<linphone::ProxyConfig> AccountSettingsModel::createProxyConfig () { ...@@ -171,6 +171,17 @@ shared_ptr<linphone::ProxyConfig> AccountSettingsModel::createProxyConfig () {
return CoreManager::getInstance()->getCore()->createProxyConfig(); return CoreManager::getInstance()->getCore()->createProxyConfig();
} }
void AccountSettingsModel::addAuthInfo (
const shared_ptr<linphone::AuthInfo> &auth_info,
const QString &password,
const QString &user_id
) {
auth_info->setPasswd(::Utils::qStringToLinphoneString(password));
auth_info->setUserid(::Utils::qStringToLinphoneString(user_id));
CoreManager::getInstance()->getCore()->addAuthInfo(auth_info);
}
void AccountSettingsModel::eraseAllPasswords () { void AccountSettingsModel::eraseAllPasswords () {
CoreManager::getInstance()->getCore()->clearAllAuthInfo(); CoreManager::getInstance()->getCore()->clearAllAuthInfo();
} }
......
...@@ -66,6 +66,12 @@ public: ...@@ -66,6 +66,12 @@ public:
Q_INVOKABLE std::shared_ptr<linphone::ProxyConfig> createProxyConfig (); Q_INVOKABLE std::shared_ptr<linphone::ProxyConfig> createProxyConfig ();
Q_INVOKABLE void addAuthInfo (
const std::shared_ptr<linphone::AuthInfo> &auth_info,
const QString &password,
const QString &user_id
);
Q_INVOKABLE void eraseAllPasswords (); Q_INVOKABLE void eraseAllPasswords ();
signals: signals:
......
...@@ -23,7 +23,7 @@ QtObject { ...@@ -23,7 +23,7 @@ QtObject {
} }
property QtObject description: QtObject { property QtObject description: QtObject {
property color color: Colors.l property color color: Colors.j
property int fontSize: 11 property int fontSize: 11
property int verticalMargin: 25 property int verticalMargin: 25
} }
......
// =============================================================================
// `AuthenticationRequest.qml` Logic.
// =============================================================================
.import Linphone 1.0 as Linphone
// =============================================================================
function confirmPassword () {
Linphone.AccountSettingsModel.addAuthInfo(dialog.authInfo, password.text, userId.text)
}
import QtQuick 2.7
import Common 1.0
import App.Styles 1.0
import 'AuthenticationRequest.js' as Logic
// =============================================================================
DialogPlus {
id: dialog
property alias sipAddress: identity.text
property alias userId: userId.text
property var authInfo
buttons: [
TextButtonA {
text: qsTr('cancel')
onClicked: exit(0)
},
TextButtonB {
enabled: password.length > 0
text: qsTr('confirm')
onClicked: {
Logic.confirmPassword()
exit(1)
}
}
]
centeredButtons: true
descriptionText: qsTr('authentificationRequestDescription')
height: AuthenticationRequestStyle.height
width: AuthenticationRequestStyle.width
// ---------------------------------------------------------------------------
Form {
orientation: Qt.Vertical
anchors {
left: parent.left
leftMargin: AuthenticationRequestStyle.leftMargin
right: parent.right
rightMargin: AuthenticationRequestStyle.rightMargin
}
FormLine {
FormGroup {
label: qsTr('identityLabel')
TextField {
id: identity
readOnly: true
}
}
}
FormLine {
FormGroup {
label: qsTr('userIdLabel')
TextField {
id: userId
}
}
}
FormLine {
FormGroup {
label: qsTr('passwordLabel')
TextField {
id: password
}
}
}
}
}
...@@ -85,3 +85,13 @@ function updateSelectedEntry (view, props) { ...@@ -85,3 +85,13 @@ function updateSelectedEntry (view, props) {
timeline.resetSelectedEntry() timeline.resetSelectedEntry()
} }
} }
// -----------------------------------------------------------------------------
function handleAuthenticationRequested (authInfo, sipAddress, userId) {
window.attachVirtualWindow(Qt.resolvedUrl('AuthenticationRequest.qml'), {
authInfo: authInfo,
sipAddress: sipAddress,
userId: userId
})
}
...@@ -84,6 +84,12 @@ ApplicationWindow { ...@@ -84,6 +84,12 @@ ApplicationWindow {
spacing: 0 spacing: 0
// -----------------------------------------------------------------------
Authentication {
onAuthenticationRequested: Logic.handleAuthenticationRequested(authInfo, sipAddress, userId)
}
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
// Toolbar properties. // Toolbar properties.
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
......
pragma Singleton
import QtQuick 2.7
// =============================================================================
QtObject {
property int height: 366
property int leftMargin: 35
property int rightMargin: 35
property int width: 480
}
pragma Singleton pragma Singleton
import QtQuick 2.7 import QtQuick 2.7
import Common 1.0
// ============================================================================= // =============================================================================
QtObject { QtObject {
......
...@@ -14,6 +14,7 @@ singleton CreateLinphoneSipAccountStyle 1.0 Main/Assistant/CreateLinp ...@@ -14,6 +14,7 @@ singleton CreateLinphoneSipAccountStyle 1.0 Main/Assistant/CreateLinp
singleton UseLinphoneSipAccountStyle 1.0 Main/Assistant/UseLinphoneSipAccountStyle.qml singleton UseLinphoneSipAccountStyle 1.0 Main/Assistant/UseLinphoneSipAccountStyle.qml
singleton AssistantStyle 1.0 Main/AssistantStyle.qml singleton AssistantStyle 1.0 Main/AssistantStyle.qml
singleton AuthenticationRequestStyle 1.0 Main/AuthenticationRequestStyle.qml
singleton ContactEditStyle 1.0 Main/ContactEditStyle.qml singleton ContactEditStyle 1.0 Main/ContactEditStyle.qml
singleton ContactsStyle 1.0 Main/ContactsStyle.qml singleton ContactsStyle 1.0 Main/ContactsStyle.qml
singleton ConversationStyle 1.0 Main/ConversationStyle.qml singleton ConversationStyle 1.0 Main/ConversationStyle.qml
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment