adding proper checking for saved username/login

This commit is contained in:
Wayne Chen 2018-09-11 09:36:46 -07:00
parent 6bcf6eaae7
commit ee516fd79f
2 changed files with 42 additions and 54 deletions

View file

@ -161,6 +161,10 @@ Item {
onFocusChanged: { onFocusChanged: {
root.text = ""; root.text = "";
} }
Component.onCompleted: {
var savedUsername = Settings.getValue("wallet/savedUsername", "");
usernameField.text = savedUsername === "Unknown user" ? "" : savedUsername;
}
} }
TextField { TextField {
@ -256,18 +260,18 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
CheckBox { CheckBox {
id: autoLogoutCheckbox; id: autoLogoutCheckbox
checked: Settings.getValue("wallet/autoLogout", true); checked: !Settings.getValue("wallet/autoLogout", true)
text: "Keep me signed in" text: "Keep me signed in"
boxSize: 20; boxSize: 20;
labelFontSize: 15; labelFontSize: 15
color: hifi.colors.black; color: hifi.colors.black
onCheckedChanged: { onCheckedChanged: {
Settings.setValue("wallet/autoLogout", !checked); Settings.setValue("wallet/autoLogout", !checked);
if (checked) { if (checked) {
Settings.setValue("wallet/savedUsername", "");
} else {
Settings.setValue("wallet/savedUsername", Account.username); Settings.setValue("wallet/savedUsername", Account.username);
} else {
Settings.setValue("wallet/savedUsername", "");
} }
} }
Component.onDestruction: { Component.onDestruction: {

View file

@ -32,20 +32,17 @@
HIFI_QML_DEF(LoginDialog) HIFI_QML_DEF(LoginDialog)
Q_LOGGING_CATEGORY(login_dialog, "hifi.login.dialog") Q_LOGGING_CATEGORY(login_dialog, "hifi.login.dialog")
LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { LoginDialog::LoginDialog(QQuickItem* parent) : OffscreenQmlDialog(parent) {
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
#if !defined(Q_OS_ANDROID) #if !defined(Q_OS_ANDROID)
connect(accountManager.data(), &AccountManager::loginComplete, connect(accountManager.data(), &AccountManager::loginComplete, this, &LoginDialog::handleLoginCompleted);
this, &LoginDialog::handleLoginCompleted); connect(accountManager.data(), &AccountManager::loginFailed, this, &LoginDialog::handleLoginFailed);
connect(accountManager.data(), &AccountManager::loginFailed,
this, &LoginDialog::handleLoginFailed);
#endif #endif
} }
LoginDialog::~LoginDialog() { LoginDialog::~LoginDialog() {
Setting::Handle<bool> loginDialogPoppedUp{ "loginDialogPoppedUp", false }; Setting::Handle<bool> loginDialogPoppedUp{ "loginDialogPoppedUp", false };
auto poppedUp = loginDialogPoppedUp.get(); if (loginDialogPoppedUp.get()) {
if (poppedUp) {
QJsonObject data; QJsonObject data;
data["action"] = "user opted out"; data["action"] = "user opted out";
UserActivityLogger::getInstance().logAction("encourageLoginDialog", data); UserActivityLogger::getInstance().logAction("encourageLoginDialog", data);
@ -53,8 +50,7 @@ LoginDialog::~LoginDialog() {
loginDialogPoppedUp.set(false); loginDialogPoppedUp.set(false);
} }
void LoginDialog::showWithSelection() void LoginDialog::showWithSelection() {
{
auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();
auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"));
auto hmd = DependencyManager::get<HMDScriptingInterface>(); auto hmd = DependencyManager::get<HMDScriptingInterface>();
@ -86,9 +82,7 @@ void LoginDialog::toggleAction() {
} else { } else {
// change the menu item to login // change the menu item to login
loginAction->setText("Login / Sign Up"); loginAction->setText("Login / Sign Up");
connection = connect(loginAction, &QAction::triggered, [] { connection = connect(loginAction, &QAction::triggered, [] { LoginDialog::showWithSelection(); });
LoginDialog::showWithSelection();
});
} }
} }
@ -136,9 +130,8 @@ void LoginDialog::linkSteam() {
payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket))); payload.insert("steam_auth_ticket", QJsonValue::fromVariant(QVariant(ticket)));
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, accountManager->sendRequest(LINK_STEAM_PATH, AccountManagerAuth::Required, QNetworkAccessManager::PostOperation,
QNetworkAccessManager::PostOperation, callbackParams, callbackParams, QJsonDocument(payload).toJson());
QJsonDocument(payload).toJson());
}); });
} }
} }
@ -167,28 +160,24 @@ void LoginDialog::createAccountFromStream(QString username) {
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None, accountManager->sendRequest(CREATE_ACCOUNT_FROM_STEAM_PATH, AccountManagerAuth::None,
QNetworkAccessManager::PostOperation, callbackParams, QNetworkAccessManager::PostOperation, callbackParams, QJsonDocument(payload).toJson());
QJsonDocument(payload).toJson());
}); });
} }
} }
void LoginDialog::openUrl(const QString& url) const { void LoginDialog::openUrl(const QString& url) const {
auto tablet = dynamic_cast<TabletProxy*>(DependencyManager::get<TabletScriptingInterface>()->getTablet("com.highfidelity.interface.tablet.system")); auto tablet = dynamic_cast<TabletProxy*>(
DependencyManager::get<TabletScriptingInterface>()->getTablet("com.highfidelity.interface.tablet.system"));
auto hmd = DependencyManager::get<HMDScriptingInterface>(); auto hmd = DependencyManager::get<HMDScriptingInterface>();
auto offscreenUi = DependencyManager::get<OffscreenUi>(); auto offscreenUi = DependencyManager::get<OffscreenUi>();
if (tablet->getToolbarMode()) { if (tablet->getToolbarMode()) {
offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); });
newObject->setProperty("url", url);
});
LoginDialog::hide(); LoginDialog::hide();
} else { } else {
if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) {
offscreenUi->load("Browser.qml", [=](QQmlContext* context, QObject* newObject) { offscreenUi->load("Browser.qml",
newObject->setProperty("url", url); [=](QQmlContext* context, QObject* newObject) { newObject->setProperty("url", url); });
});
LoginDialog::hide(); LoginDialog::hide();
} else { } else {
tablet->gotoWebScreen(url); tablet->gotoWebScreen(url);
@ -213,28 +202,26 @@ void LoginDialog::createFailed(QNetworkReply* reply) {
} }
void LoginDialog::signup(const QString& email, const QString& username, const QString& password) { void LoginDialog::signup(const QString& email, const QString& username, const QString& password) {
JSONCallbackParameters callbackParams; JSONCallbackParameters callbackParams;
callbackParams.callbackReceiver = this; callbackParams.callbackReceiver = this;
callbackParams.jsonCallbackMethod = "signupCompleted"; callbackParams.jsonCallbackMethod = "signupCompleted";
callbackParams.errorCallbackMethod = "signupFailed"; callbackParams.errorCallbackMethod = "signupFailed";
QJsonObject payload; QJsonObject payload;
QJsonObject userObject; QJsonObject userObject;
userObject.insert("email", email); userObject.insert("email", email);
userObject.insert("username", username); userObject.insert("username", username);
userObject.insert("password", password); userObject.insert("password", password);
payload.insert("user", userObject); payload.insert("user", userObject);
static const QString API_SIGNUP_PATH = "api/v1/users"; static const QString API_SIGNUP_PATH = "api/v1/users";
qDebug() << "Sending a request to create an account for" << username; qDebug() << "Sending a request to create an account for" << username;
auto accountManager = DependencyManager::get<AccountManager>(); auto accountManager = DependencyManager::get<AccountManager>();
accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, accountManager->sendRequest(API_SIGNUP_PATH, AccountManagerAuth::None, QNetworkAccessManager::PostOperation, callbackParams,
QNetworkAccessManager::PostOperation, callbackParams,
QJsonDocument(payload).toJson()); QJsonDocument(payload).toJson());
} }
@ -253,41 +240,38 @@ QString errorStringFromAPIObject(const QJsonValue& apiObject) {
} }
void LoginDialog::signupFailed(QNetworkReply* reply) { void LoginDialog::signupFailed(QNetworkReply* reply) {
// parse the returned JSON to see what the problem was // parse the returned JSON to see what the problem was
auto jsonResponse = QJsonDocument::fromJson(reply->readAll()); auto jsonResponse = QJsonDocument::fromJson(reply->readAll());
static const QString RESPONSE_DATA_KEY = "data"; static const QString RESPONSE_DATA_KEY = "data";
auto dataJsonValue = jsonResponse.object()[RESPONSE_DATA_KEY]; auto dataJsonValue = jsonResponse.object()[RESPONSE_DATA_KEY];
if (dataJsonValue.isObject()) { if (dataJsonValue.isObject()) {
auto dataObject = dataJsonValue.toObject(); auto dataObject = dataJsonValue.toObject();
static const QString EMAIL_DATA_KEY = "email"; static const QString EMAIL_DATA_KEY = "email";
static const QString USERNAME_DATA_KEY = "username"; static const QString USERNAME_DATA_KEY = "username";
static const QString PASSWORD_DATA_KEY = "password"; static const QString PASSWORD_DATA_KEY = "password";
QStringList errorStringList; QStringList errorStringList;
if (dataObject.contains(EMAIL_DATA_KEY)) { if (dataObject.contains(EMAIL_DATA_KEY)) {
errorStringList.append(QString("Email %1.").arg(errorStringFromAPIObject(dataObject[EMAIL_DATA_KEY]))); errorStringList.append(QString("Email %1.").arg(errorStringFromAPIObject(dataObject[EMAIL_DATA_KEY])));
} }
if (dataObject.contains(USERNAME_DATA_KEY)) { if (dataObject.contains(USERNAME_DATA_KEY)) {
errorStringList.append(QString("Username %1.").arg(errorStringFromAPIObject(dataObject[USERNAME_DATA_KEY]))); errorStringList.append(QString("Username %1.").arg(errorStringFromAPIObject(dataObject[USERNAME_DATA_KEY])));
} }
if (dataObject.contains(PASSWORD_DATA_KEY)) { if (dataObject.contains(PASSWORD_DATA_KEY)) {
errorStringList.append(QString("Password %1.").arg(errorStringFromAPIObject(dataObject[PASSWORD_DATA_KEY]))); errorStringList.append(QString("Password %1.").arg(errorStringFromAPIObject(dataObject[PASSWORD_DATA_KEY])));
} }
emit handleSignupFailed(errorStringList.join('\n')); emit handleSignupFailed(errorStringList.join('\n'));
} else { } else {
static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE = "There was an unknown error while creating your account. Please try again later."; static const QString DEFAULT_SIGN_UP_FAILURE_MESSAGE =
"There was an unknown error while creating your account. Please try again later.";
emit handleSignupFailed(DEFAULT_SIGN_UP_FAILURE_MESSAGE); emit handleSignupFailed(DEFAULT_SIGN_UP_FAILURE_MESSAGE);
} }
} }