fixing linking account problems on oculus/steam, changing callback

This commit is contained in:
Wayne Chen 2019-01-16 21:07:54 -08:00
parent bb61334c0d
commit ef63213d28
9 changed files with 59 additions and 50 deletions

View file

@ -287,6 +287,8 @@ Item {
case Qt.Key_Return: case Qt.Key_Return:
event.accepted = true; event.accepted = true;
loginDialog.createAccountFromOculus(emailField.text, usernameField.text, passwordField.text); loginDialog.createAccountFromOculus(emailField.text, usernameField.text, passwordField.text);
bodyLoader.setSource("LoggingInBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": completeProfileBody.withSteam,
"linkSteam": false, "withOculus": completeProfileBody.withOculus, "linkOculus": false, "createOculus": true });
break; break;
} }
} }
@ -434,7 +436,6 @@ Item {
linkColor: hifi.colors.blueAccent linkColor: hifi.colors.blueAccent
onLinkActivated: { onLinkActivated: {
loginDialog.isLogIn = true;
bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": "", bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": "",
"withSteam": completeProfileBody.withSteam, "linkSteam": completeProfileBody.withSteam, "withOculus": completeProfileBody.withOculus, "withSteam": completeProfileBody.withSteam, "linkSteam": completeProfileBody.withSteam, "withOculus": completeProfileBody.withOculus,
"linkOculus": completeProfileBody.withOculus }); "linkOculus": completeProfileBody.withOculus });
@ -467,10 +468,12 @@ Item {
} }
onHandleCreateFailed: { onHandleCreateFailed: {
console.log("Create Failed: " + error); console.log("Create Failed: " + error);
if (!completeProfileBody.withOculus) {
bodyLoader.setSource("UsernameCollisionBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": completeProfileBody.withSteam, bodyLoader.setSource("UsernameCollisionBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": completeProfileBody.withSteam,
"withOculus": completeProfileBody.withOculus }); "withOculus": completeProfileBody.withOculus });
} }
} }
}
Component.onCompleted: { Component.onCompleted: {
//but rise Tablet's one instead for Tablet interface //but rise Tablet's one instead for Tablet interface

View file

@ -36,9 +36,9 @@ Item {
property bool keyboardRaised: false property bool keyboardRaised: false
property bool punctuationMode: false property bool punctuationMode: false
property bool withSteam: false property bool withSteam: withSteam
property bool linkSteam: linkSteam property bool linkSteam: linkSteam
property bool withOculus: false property bool withOculus: withOculus
property bool linkOculus: linkOculus property bool linkOculus: linkOculus
property string errorString: errorString property string errorString: errorString
property bool lostFocus: false property bool lostFocus: false

View file

@ -79,17 +79,6 @@ Item {
loggingInGlyph.visible = true; loggingInGlyph.visible = true;
loggingInText.text = "Creating account with Oculus"; loggingInText.text = "Creating account with Oculus";
loggingInText.x = loggingInHeader.width/2 - loggingInTextMetrics.width/2 + loggingInGlyphTextMetrics.width/2; loggingInText.x = loggingInHeader.width/2 - loggingInTextMetrics.width/2 + loggingInGlyphTextMetrics.width/2;
} else if (loggingInBody.linkSteam) {
loggingInGlyph.visible = true;
loggingInText.text = "Linking to Steam";
loggingInText.x = loggingInHeader.width/2 - loggingInTextMetrics.width/2 + loggingInGlyphTextMetrics.width/2;
loginDialog.linkSteam();
} else if (loggingInBody.linkOculus) {
loggingInGlyph.text = hifi.glyphs.oculus;
loggingInGlyph.visible = true;
loggingInText.text = "Linking to Oculus";
loggingInText.x = loggingInHeader.width/2 - loggingInTextMetrics.width/2 + loggingInGlyphTextMetrics.width/2;
loginDialog.linkOculus();
} else if (loggingInBody.withSteam) { } else if (loggingInBody.withSteam) {
loggingInGlyph.visible = true; loggingInGlyph.visible = true;
loggingInText.text = "Logging in to Steam"; loggingInText.text = "Logging in to Steam";
@ -106,16 +95,18 @@ Item {
loggingInSpinner.visible = true; loggingInSpinner.visible = true;
} }
function loadingSuccess() { function loadingSuccess() {
loggingInSpinner.visible = false;
if (loggingInBody.linkSteam) { if (loggingInBody.linkSteam) {
loggingInText.text = "Linking to Steam"; loggingInText.text = "Linking to Steam";
loggingInText.x = loggingInHeader.width/2 - loggingInTextMetrics.width/2 + loggingInGlyphTextMetrics.width/2;
loginDialog.linkSteam(); loginDialog.linkSteam();
return; return;
} else if (loggingInBody.linkOculus) { } else if (loggingInBody.linkOculus) {
loggingInText.text = "Linking to Oculus"; loggingInText.text = "Linking to Oculus";
loggingInText.x = loggingInHeader.width/2 - loggingInTextMetrics.width/2 + loggingInGlyphTextMetrics.width/2;
loginDialog.linkOculus(); loginDialog.linkOculus();
return; return;
} }
loggingInSpinner.visible = false;
if (loggingInBody.withSteam) { if (loggingInBody.withSteam) {
// reset the flag. // reset the flag.
loggingInGlyph.visible = false; loggingInGlyph.visible = false;
@ -237,6 +228,23 @@ Item {
verticalAlignment: Text.AlignVCenter; verticalAlignment: Text.AlignVCenter;
visible: false; visible: false;
} }
HifiControlsUit.Button {
id: okButton;
width: d.minWidthButton
height: d.minHeightButton
text: qsTr("OK")
color: hifi.buttons.white
anchors {
top: loggedInGlyph.bottom
topMargin: 3 * hifi.dimensions.contentSpacing.y
left: parent.left
leftMargin: (parent.width - width) / 2;
}
onClicked: {
root.tryDestroy();
}
visible: false
}
} }
} }
} }
@ -271,9 +279,15 @@ Item {
} }
onHandleLinkFailed: { onHandleLinkFailed: {
console.log("Link Failed: " + error); console.log("Link Failed: " + error);
loggingInSpinner.visible = false;
if (loggingInBody.linkOculus) {
loggingInText.text = "Oculus failed to link";
okButton.visible = true;
} else {
bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "linkSteam": loggingInBody.linkSteam, bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "linkSteam": loggingInBody.linkSteam,
"linkOculus": loggingInBody.linkOculus, "errorString": error }); "linkOculus": loggingInBody.linkOculus, "errorString": error });
} }
}
onHandleLoginCompleted: { onHandleLoginCompleted: {
console.log("Login Succeeded"); console.log("Login Succeeded");
@ -288,19 +302,19 @@ Item {
if (loggingInBody.linkOculus && loggingInBody.withOculus) { if (loggingInBody.linkOculus && loggingInBody.withOculus) {
errorString = "Username or password is incorrect."; errorString = "Username or password is incorrect.";
bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam, bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam,
"withOculus": loggingInBody.withOculus, "linkSteam": loggingInBody.linkSteam, "errorString": errorString }); "withOculus": loggingInBody.withOculus, "linkSteam": loggingInBody.linkSteam, "linkOculus": loggingInBody.linkOculus, "errorString": errorString });
} else if (loggingInBody.linkSteam && loggingInBody.withSteam) { } else if (loggingInBody.linkSteam && loggingInBody.withSteam) {
errorString = "Username or password is incorrect."; errorString = "Username or password is incorrect.";
bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam, bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam,
"withOculus": loggingInBody.withOculus, "linkSteam": loggingInBody.linkSteam, "errorString": errorString }); "withOculus": loggingInBody.withOculus, "linkSteam": loggingInBody.linkSteam, "linkOculus": loggingInBody.linkOculus, "errorString": errorString });
} else if (loggingInBody.withSteam) { } else if (loggingInBody.withSteam) {
errorString = "Your Steam authentication has failed. Please make sure you are logged into Steam and try again."; errorString = "Your Steam authentication has failed. Please make sure you are logged into Steam and try again.";
bodyLoader.setSource("CompleteProfileBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam, bodyLoader.setSource("CompleteProfileBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam,
"withOculus": loggingInBody.withOculus, "errorString": errorString }); "withOculus": loggingInBody.withOculus, "linkSteam": loggingInBody.linkSteam, "linkOculus": loggingInBody.linkOculus, "errorString": errorString });
} else if (loggingInBody.withOculus) { } else if (loggingInBody.withOculus) {
errorString = "Your Oculus account is not connected to an existing High Fidelity account. Please create a new one." errorString = "Your Oculus account is not connected to an existing High Fidelity account. Please create a new one."
bodyLoader.setSource("CompleteProfileBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam, bodyLoader.setSource("CompleteProfileBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "withSteam": loggingInBody.withSteam,
"withOculus": loggingInBody.withOculus, "errorString": errorString }); "withOculus": loggingInBody.withOculus, "linkSteam": loggingInBody.linkSteam, "linkOculus": loggingInBody.linkOculus, "errorString": errorString });
} else { } else {
errorString = "Username or password is incorrect."; errorString = "Username or password is incorrect.";
bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": errorString }); bodyLoader.setSource("LinkAccountBody.qml", { "loginDialog": loginDialog, "root": root, "bodyLoader": bodyLoader, "errorString": errorString });

View file

@ -138,8 +138,8 @@ void LoginDialog::login(const QString& username, const QString& password) const
void LoginDialog::loginThroughOculus() { void LoginDialog::loginThroughOculus() {
qDebug() << "Attempting to login through Oculus"; qDebug() << "Attempting to login through Oculus";
if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) { if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) {
oculusPlatformPlugin->requestNonceAndUserID([this] (QString nonce, QString userID, QString oculusID) { oculusPlatformPlugin->requestNonceAndUserID([this] (QString nonce, QString oculusID) {
DependencyManager::get<AccountManager>()->requestAccessTokenWithOculus(nonce, userID, oculusID); DependencyManager::get<AccountManager>()->requestAccessTokenWithOculus(nonce, oculusID);
}); });
} }
} }
@ -147,8 +147,8 @@ void LoginDialog::loginThroughOculus() {
void LoginDialog::linkOculus() { void LoginDialog::linkOculus() {
qDebug() << "Attempting to link Oculus account"; qDebug() << "Attempting to link Oculus account";
if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) { if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) {
oculusPlatformPlugin->requestNonceAndUserID([this] (QString nonce, QString userID, QString oculusID) { oculusPlatformPlugin->requestNonceAndUserID([this] (QString nonce, QString oculusID) {
if (nonce.isEmpty() || userID.isEmpty() || oculusID.isEmpty()) { if (nonce.isEmpty() || oculusID.isEmpty()) {
emit handleLoginFailed(); emit handleLoginFailed();
return; return;
} }
@ -174,8 +174,8 @@ void LoginDialog::linkOculus() {
void LoginDialog::createAccountFromOculus(QString email, QString username, QString password) { void LoginDialog::createAccountFromOculus(QString email, QString username, QString password) {
qDebug() << "Attempting to create account from Oculus info"; qDebug() << "Attempting to create account from Oculus info";
if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) { if (auto oculusPlatformPlugin = PluginManager::getInstance()->getOculusPlatformPlugin()) {
oculusPlatformPlugin->requestNonceAndUserID([this, email, username, password] (QString nonce, QString userID, QString oculusID) { oculusPlatformPlugin->requestNonceAndUserID([this, email, username, password] (QString nonce, QString oculusID) {
if (nonce.isEmpty() || userID.isEmpty() || oculusID.isEmpty()) { if (nonce.isEmpty() || oculusID.isEmpty()) {
emit handleLoginFailed(); emit handleLoginFailed();
return; return;
} }
@ -307,14 +307,12 @@ void LoginDialog::createFailed(QNetworkReply* reply) {
auto root = doc.object(); auto root = doc.object();
auto data = root.value("data").toObject(); auto data = root.value("data").toObject();
auto error = data.value("error").toObject(); auto error = data.value("error").toObject();
auto identity = error.value("identity"); auto oculusError = data.value("oculus");
auto user = error.value("username"); auto user = error.value("username");
auto uid = error.value("uid"); auto uid = error.value("uid");
auto email = error.value("email"); auto email = error.value("email");
QString usernameError; QString usernameError;
QString emailError; QString emailError;
QString identityError;
QString errorReply;
if (!uid.isNull() && !uid.isUndefined()) { if (!uid.isNull() && !uid.isUndefined()) {
QJsonArray arr = uid.toArray(); QJsonArray arr = uid.toArray();
if (!arr.isEmpty()) { if (!arr.isEmpty()) {
@ -335,27 +333,21 @@ void LoginDialog::createFailed(QNetworkReply* reply) {
} }
} }
if (!usernameError.isEmpty()) { if (!usernameError.isEmpty()) {
errorReply = usernameError;
if (!emailError.isEmpty()) { if (!emailError.isEmpty()) {
errorReply.append(" " + emailError); usernameError.append(" " + emailError);
} }
emit handleCreateFailed(errorReply); emit handleCreateFailed(usernameError);
return; return;
} }
if (!emailError.isEmpty()) { if (!emailError.isEmpty()) {
emit handleCreateFailed(emailError); emit handleCreateFailed(emailError);
return; return;
} }
if (!oculusError.isNull() && !oculusError.isUndefined()) {
if (!identity.isNull() && !identity.isUndefined()) { emit handleCreateFailed("Could not verify token with Oculus. Please try again.");
QJsonArray arr = identity.toArray();
if (!arr.isEmpty()) {
auto identityError = "Identity " + arr.at(0).toString() + ".";
emit handleCreateFailed(identityError);
return; return;
} }
} }
}
emit handleCreateFailed(reply->errorString()); emit handleCreateFailed(reply->errorString());
} }

View file

@ -588,7 +588,7 @@ void AccountManager::requestAccessTokenWithSteam(QByteArray authSessionTicket) {
connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestAccessTokenError(QNetworkReply::NetworkError))); connect(requestReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(requestAccessTokenError(QNetworkReply::NetworkError)));
} }
void AccountManager::requestAccessTokenWithOculus(const QString& nonce, const QString& userID, const QString &oculusID) { void AccountManager::requestAccessTokenWithOculus(const QString& nonce, const QString &oculusID) {
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
QNetworkRequest request; QNetworkRequest request;

View file

@ -106,7 +106,7 @@ public:
public slots: public slots:
void requestAccessToken(const QString& login, const QString& password); void requestAccessToken(const QString& login, const QString& password);
void requestAccessTokenWithSteam(QByteArray authSessionTicket); void requestAccessTokenWithSteam(QByteArray authSessionTicket);
void requestAccessTokenWithOculus(const QString& nonce, const QString& userID, const QString& oculusID); void requestAccessTokenWithOculus(const QString& nonce, const QString& oculusID);
void requestAccessTokenWithAuthCode(const QString& authCode, void requestAccessTokenWithAuthCode(const QString& authCode,
const QString& clientId, const QString& clientId,
const QString& clientSecret, const QString& clientSecret,

View file

@ -11,7 +11,7 @@
#include <functional> #include <functional>
using NonceUserIDCallback = std::function<void(QString, QString, QString)>; using NonceUserIDCallback = std::function<void(QString, QString)>;
class OculusPlatformPlugin { class OculusPlatformPlugin {
public: public:
@ -20,7 +20,7 @@ public:
virtual const QString getName() const = 0; virtual const QString getName() const = 0;
virtual const QString getOculusUserID() const = 0; virtual const QString getOculusUserID() const = 0;
virtual const bool isRunning() const = 0; virtual bool isRunning() = 0;
virtual void requestNonceAndUserID(NonceUserIDCallback callback) = 0; virtual void requestNonceAndUserID(NonceUserIDCallback callback) = 0;

View file

@ -24,7 +24,7 @@ OculusAPIPlugin::~OculusAPIPlugin() {
hifi::ovr::releaseRenderSession(_session); hifi::ovr::releaseRenderSession(_session);
} }
const bool OculusAPIPlugin::isRunning() const { bool OculusAPIPlugin::isRunning() {
return (qApp->property(hifi::properties::OCULUS_STORE).toBool()); return (qApp->property(hifi::properties::OCULUS_STORE).toBool());
} }
@ -96,7 +96,7 @@ void OculusAPIPlugin::handleOVREvents() {
} }
if (_nonceChanged) { if (_nonceChanged) {
_nonceUserIDCallback(_nonce, _user, QString::number(_userID)); _nonceUserIDCallback(_nonce, QString::number(_userID));
_nonceChanged = false; _nonceChanged = false;
} }

View file

@ -21,7 +21,7 @@ public:
const QString getName() const { return NAME; } const QString getName() const { return NAME; }
const QString getOculusUserID() const { return _user; }; const QString getOculusUserID() const { return _user; };
const bool isRunning() const; bool isRunning();
virtual void requestNonceAndUserID(NonceUserIDCallback callback); virtual void requestNonceAndUserID(NonceUserIDCallback callback);