mirror of
https://gitlab.com/skysthelimit.dev/selenite.git
synced 2025-06-16 02:22:07 -05:00
513 lines
16 KiB
JavaScript
513 lines
16 KiB
JavaScript
'use strict';
|
|
|
|
var unityFirebaseGameOjbectName = 'JavascriptMessageReceiver';
|
|
|
|
var firstLoad = true;
|
|
|
|
function onAuthStateChanged(user) {
|
|
if(!user)
|
|
{
|
|
if(firstLoad)
|
|
{
|
|
signInAnonymously();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendAuthDataToUnity();
|
|
}
|
|
firstLoad = false;
|
|
}
|
|
|
|
|
|
function signInAnonymously()
|
|
{
|
|
firebase.auth().signInAnonymously().catch(function(error) {
|
|
var errorCode = error.code;
|
|
console.log("error logging in " + errorCode);
|
|
console.error(error);
|
|
});
|
|
}
|
|
|
|
function signInWithEmail(email, password)
|
|
{
|
|
firebase.auth().signInWithEmailAndPassword(email, password)
|
|
.then((userCredential) => {
|
|
console.log("signInWithEmailAndPassword Success");
|
|
})
|
|
.catch(function(error)
|
|
{
|
|
console.log("error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseSignInWithEmailFailed", error.message);
|
|
});
|
|
}
|
|
|
|
function linkUserWithEmail(email, password)
|
|
{
|
|
if(firebase.auth().currentUser != null && firebase.auth().currentUser.isAnonymous)
|
|
{
|
|
var credential = firebase.auth.EmailAuthProvider.credential(email, password);
|
|
firebase.auth().currentUser.linkWithCredential(credential).then(function(user) {
|
|
console.log("Anonymous account successfully upgraded", user);
|
|
sendAuthDataToUnity();
|
|
}, function(error) {
|
|
console.log("Error upgrading anonymous account", error);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseLinkUserWithEmailFailed", error.message);
|
|
});
|
|
}
|
|
}
|
|
|
|
function linkOrSignInWithGoogle()
|
|
{
|
|
var provider = new firebase.auth.GoogleAuthProvider();
|
|
|
|
if(firebase.auth().currentUser != null && firebase.auth().currentUser.isAnonymous)
|
|
{
|
|
if(isMobile())
|
|
{
|
|
firebase.auth().linkWithRedirect(provider);
|
|
|
|
firebase.auth().getRedirectResult().then(function(result)
|
|
{
|
|
console.log("linkOrSignInWithGoogle:success");
|
|
sendAuthDataToUnity();
|
|
}, function(error)
|
|
{
|
|
if(error.code == "auth/credential-already-in-use")
|
|
{
|
|
firebase.auth().signInWithCredential(error.credential).catch(function(error)
|
|
{
|
|
console.log("signInWithCredential:: Error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseSignInWithEmailFailed", error.message);
|
|
});
|
|
}
|
|
else
|
|
{
|
|
console.log("linkOrSignInWithGoogle:: Error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseLinkUserWithEmailFailed", error.message);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
firebase.auth().currentUser.linkWithPopup(provider).then((result) =>
|
|
{
|
|
console.log("linkOrSignInWithGoogle:: Success");
|
|
sendAuthDataToUnity();
|
|
}).catch((error) =>
|
|
{
|
|
if(error.code == "auth/credential-already-in-use")
|
|
{
|
|
firebase.auth().signInWithCredential(error.credential).catch(function(error)
|
|
{
|
|
console.log("signInWithCredential:: Error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseSignInWithEmailFailed", error.message);
|
|
});
|
|
}
|
|
else
|
|
{
|
|
console.log("linkOrSignInWithGoogle:: Error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseLinkUserWithEmailFailed", error.message);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
function linkOrSignInWithApple()
|
|
{
|
|
var provider = new firebase.auth.OAuthProvider('apple.com');
|
|
|
|
if(firebase.auth().currentUser != null && firebase.auth().currentUser.isAnonymous)
|
|
{
|
|
var isSafariBrowser = (navigator.userAgent.indexOf('Safari') > -1 && navigator.userAgent.indexOf('Chrome') <= -1);
|
|
if(isMobile() || isSafariBrowser)
|
|
{
|
|
firebase.auth().currentUser.linkWithRedirect(provider);
|
|
}
|
|
else
|
|
{
|
|
firebase.auth().currentUser.linkWithPopup(provider).then((result) =>
|
|
{
|
|
console.log("linkOrSignInWithApple:: Success");
|
|
sendAuthDataToUnity();
|
|
}).catch((error) =>
|
|
{
|
|
if(error.code == "auth/credential-already-in-use")
|
|
{
|
|
firebase.auth().signInWithCredential(error.credential).catch(function(error)
|
|
{
|
|
console.log("signInWithCredential:: Error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseSignInWithEmailFailed", error.message);
|
|
});
|
|
}
|
|
else
|
|
{
|
|
console.log("linkOrSignInWithApple:: Error logging in " + error.code);
|
|
console.error(error);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "firebaseLinkUserWithEmailFailed", error.message);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
function signOut()
|
|
{
|
|
firebase.auth().signOut().then(function() {
|
|
console.log("signOut:: Success");
|
|
signInAnonymously();
|
|
}).catch(function(error) {
|
|
console.log("signOut:: Failed ");
|
|
console.error(error);
|
|
});
|
|
}
|
|
|
|
function sendAuthDataToUnity()
|
|
{
|
|
if(window.unityGame != null && firebase.auth().currentUser != null)
|
|
{
|
|
var firebaseUid = firebase.auth().currentUser.uid;
|
|
var isAnon = firebase.auth().currentUser.isAnonymous;
|
|
var data = {authToken:"",uid:firebaseUid,isAnonymous:isAnon};
|
|
var dataJson = JSON.stringify(data);
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, 'SetAuthToken', dataJson);
|
|
}
|
|
}
|
|
|
|
function sendPasswordResetEmail(emailAddress)
|
|
{
|
|
firebase.auth().sendPasswordResetEmail(emailAddress).then(function() {
|
|
console.log("sendPasswordResetEmail:: Success");
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "SendPasswordResetEmailSuccess");
|
|
}).catch(function(error) {
|
|
console.log("sendPasswordResetEmail:: Failed ");
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "SendPasswordResetEmailFailed", error.message);
|
|
console.error(error);
|
|
});
|
|
}
|
|
|
|
function getValueTT(nodeKey)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
const dbRef = firebase.database().ref();
|
|
dbRef.child(nodeKey).once('value').then((snapshot) => {
|
|
if (snapshot.exists())
|
|
{
|
|
var valJsonStr = JSON.stringify(snapshot.val());
|
|
SendDataToUnity("OnGetValueSuccess", nodeKey, valJsonStr);
|
|
}
|
|
else
|
|
{
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "OnGetValueEmptySuccess", nodeKey);
|
|
}
|
|
}).catch((error) =>
|
|
{
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "OnGetValueError", nodeKey, error.message);
|
|
console.error(error);
|
|
});
|
|
}
|
|
}
|
|
|
|
function SendDataToUnity(functionName, nk, ds)
|
|
{
|
|
var obj =
|
|
{
|
|
nodeKey: nk,
|
|
dataStr: ds
|
|
}
|
|
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, functionName, JSON.stringify(obj));
|
|
}
|
|
|
|
|
|
function SendResponseToUnity(functionName, k, resonseData)
|
|
{
|
|
resonseData["key"] = k;
|
|
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, functionName, JSON.stringify(resonseData));
|
|
}
|
|
|
|
function setValueTT(nodeKey, jsonData)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
const dbRef = firebase.database().ref();
|
|
var jsonObj = JSON.parse(jsonData);
|
|
dbRef.child(nodeKey).set(jsonObj, (error) => {
|
|
if (error) {
|
|
console.log("auth.js::setValue - Error " + nodeKey);
|
|
SendDataToUnity("OnSetValueError", nodeKey, error.message);
|
|
} else {
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "OnSetValueSuccess", nodeKey);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function removeValueTT(nodeKey)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
const dbRef = firebase.database().ref();
|
|
dbRef.child(nodeKey).remove()
|
|
.then(function(){
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "OnRemoveValueSuccess", nodeKey);
|
|
})
|
|
.catch(function(error){
|
|
console.log("auth.js::removeValueTT error");
|
|
SendDataToUnity("OnRemoveValueError", nodeKey, error.message);
|
|
});
|
|
}
|
|
}
|
|
|
|
function updateValueTT(nodeKey, jsonData)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
const dbRef = firebase.database().ref();
|
|
var jsonObj = JSON.parse(jsonData);
|
|
dbRef.child(nodeKey).update(jsonObj, (error) => {
|
|
if (error) {
|
|
console.log("auth.js::updateValue Error " + nodeKey);
|
|
SendDataToUnity( "OnUpdateValueError", nodeKey, error.message);
|
|
} else {
|
|
window.unityGame.SendMessage(unityFirebaseGameOjbectName, "OnUpdateValueSuccess", nodeKey);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
var cloudFunctionSuccess = 0;
|
|
var cloudFunctionFail = 0;
|
|
|
|
function callCloudFunction(functionId, jsonData, key)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
try
|
|
{
|
|
const dataObject = JSON.parse(jsonData);
|
|
var functionRef = firebase.app().functions("us-east1").httpsCallable(functionId + "Multi");
|
|
|
|
functionRef(dataObject).then((response)=>
|
|
{
|
|
SendResponseToUnity( "OnFunctionComplete", key, response.data);
|
|
cloudFunctionSuccess++;
|
|
}).catch((error4)=> {
|
|
cloudFunctionFail++;
|
|
//SendDataToUnity( "OnFunctionError", key, error4.message);
|
|
callCloudFunctionOG(functionId, jsonData, key);
|
|
logCloudFunctionError("v4a", jsonData, error4.message, functionId);
|
|
});
|
|
} catch (error1)
|
|
{
|
|
cloudFunctionFail++;
|
|
//SendDataToUnity( "OnFunctionError", key, error1.message);
|
|
callCloudFunctionOG(functionId, jsonData, key);
|
|
logCloudFunctionError("v4b", jsonData, error1.message, functionId);
|
|
}
|
|
}
|
|
}
|
|
|
|
function callCloudFunctionOG(functionId, jsonData, key)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
try
|
|
{
|
|
const dataObject = JSON.parse(jsonData);
|
|
var functionRef = firebase.app().functions().httpsCallable(functionId);
|
|
|
|
functionRef(dataObject).then((response)=>
|
|
{
|
|
SendResponseToUnity( "OnFunctionComplete", key, response.data);
|
|
logCloudFunctionSuccess("v4s1", jsonData, functionId);
|
|
cloudFunctionSuccess++;
|
|
}).catch((error4)=> {
|
|
cloudFunctionFail++;
|
|
//SendDataToUnity( "OnFunctionError", key, error4.message);
|
|
callCloudFunctionAlt(functionId, jsonData, key);
|
|
logCloudFunctionError("v4c", jsonData, error4.message, functionId);
|
|
});
|
|
} catch (error1)
|
|
{
|
|
cloudFunctionFail++;
|
|
//SendDataToUnity( "OnFunctionError", key, error1.message);
|
|
callCloudFunctionAlt(functionId, jsonData, key);
|
|
logCloudFunctionError("v4d", jsonData, error1.message, functionId);
|
|
}
|
|
}
|
|
}
|
|
|
|
function callCloudFunctionAlt(functionId, jsonData, key)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
try
|
|
{
|
|
const dataObject = JSON.parse(jsonData);
|
|
//var functionRef = firebase.app().functions().httpsCallable(functionId);
|
|
var functionRef = firebase.app().functions("europe-west1").httpsCallable(functionId + "Multi");
|
|
|
|
functionRef(dataObject).then((response)=>
|
|
{
|
|
SendResponseToUnity( "OnFunctionComplete", key, response.data);
|
|
logCloudFunctionSuccess("v4s2", jsonData, functionId);
|
|
cloudFunctionSuccess++;
|
|
}).catch((error4)=> {
|
|
cloudFunctionFail++;
|
|
callCloudFunctionRewrite(functionId, jsonData, key);
|
|
logCloudFunctionError("v4e", jsonData, error4.message, functionId);
|
|
});
|
|
} catch (error1)
|
|
{
|
|
cloudFunctionFail++;
|
|
callCloudFunctionRewrite(functionId, jsonData, key);
|
|
logCloudFunctionError("v4f", jsonData, error1.message, functionId);
|
|
}
|
|
}
|
|
}
|
|
|
|
function callCloudFunctionRewrite(functionId, jsonData, key)
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
try
|
|
{
|
|
const dataObject = JSON.parse(jsonData);
|
|
dataObject["funcName"] = functionId;
|
|
|
|
firebase.auth().currentUser.getIdToken(false).then((authToken) =>
|
|
{
|
|
fetch("https://smashkarts.io/rewriteCF", {
|
|
method: 'POST',
|
|
cache: 'no-cache',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'Authorization': `Bearer ${authToken}`,
|
|
},
|
|
body: JSON.stringify(dataObject)
|
|
}).then((fetchResponse) =>
|
|
{
|
|
//Need to parse fetch response into usable json data
|
|
fetchResponse.json().then((responseJsonData) =>
|
|
{
|
|
SendResponseToUnity( "OnFunctionComplete", key, responseJsonData);
|
|
logCloudFunctionSuccess("v4s3", jsonData, functionId);
|
|
cloudFunctionSuccess++;
|
|
}).catch((error4) =>
|
|
{
|
|
cloudFunctionFail++;
|
|
SendDataToUnity( "OnFunctionError", key, error4.message);
|
|
logCloudFunctionError("v4g", jsonData, error4.message, functionId);
|
|
});
|
|
}).catch((error3) =>
|
|
{
|
|
cloudFunctionFail++;
|
|
SendDataToUnity( "OnFunctionError", key, error3.message);
|
|
logCloudFunctionError("v4h", jsonData, error3.message, functionId);
|
|
});
|
|
}).catch((error2)=> {
|
|
cloudFunctionFail++;
|
|
SendDataToUnity( "OnFunctionError", key, error2.message);
|
|
logCloudFunctionError("v4i", jsonData, error2.message, functionId);
|
|
});
|
|
}
|
|
catch(error1)
|
|
{
|
|
cloudFunctionFail++;
|
|
SendDataToUnity( "OnFunctionError", key, error1.message);
|
|
logCloudFunctionError("v4j", jsonData, error1.message, functionId);
|
|
}
|
|
}
|
|
}
|
|
|
|
function logCloudFunctionError(debugErrorRootNode, jsonData, message, functionId)
|
|
{
|
|
var firebaseUid = firebase.auth().currentUser.uid;
|
|
var currentTime = new Date().getTime();
|
|
var debugErrorNode = "cferror/" + debugErrorRootNode + "/" + firebaseUid + "/" + functionId + "/" + currentTime;
|
|
const dbRef = firebase.database().ref();
|
|
dbRef.child(debugErrorNode).set({
|
|
errorData: jsonData,
|
|
os: getOS(),
|
|
time: currentTime,
|
|
successCount: cloudFunctionSuccess,
|
|
failCound: cloudFunctionFail,
|
|
errorMessage: message
|
|
}, (setValueError) =>
|
|
{
|
|
if (setValueError)
|
|
{
|
|
console.log("logCloudFunctionError setValueError:: " + setValueError.message);
|
|
} else
|
|
{
|
|
var debugErrorWriteSuccessNode = "cferror/" + debugErrorRootNode + "/" + firebaseUid + "/" + functionId + "/" + currentTime + "/successTime";
|
|
var successTime = new Date().getTime();
|
|
dbRef.child(debugErrorWriteSuccessNode).set(successTime);
|
|
console.log("logCloudFunctionError Successfdfd ");
|
|
}
|
|
});
|
|
}
|
|
|
|
function logCloudFunctionSuccess(debugErrorRootNode, jsonData, functionId)
|
|
{
|
|
var firebaseUid = firebase.auth().currentUser.uid;
|
|
var currentTime = new Date().getTime();
|
|
var debugErrorNode = "cferror/" + debugErrorRootNode + "/" + firebaseUid + "/" + functionId + "/" + currentTime;
|
|
const dbRef = firebase.database().ref();
|
|
|
|
dbRef.child(debugErrorNode).set({
|
|
errorData: jsonData,
|
|
os: getOS(),
|
|
time : currentTime,
|
|
successCount : cloudFunctionSuccess,
|
|
failCount : cloudFunctionFail,
|
|
}, (setValueError) => {
|
|
if (setValueError) {
|
|
console.log("logCloudFunctionSuccess setValueError:: " + setValueError.message);
|
|
|
|
} else {
|
|
console.log("logCloudFunctionSuccess Success ");
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
function getCurrentUserId()
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
return firebase.auth().currentUser.uid;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
function getCurrentUserIsAnon()
|
|
{
|
|
if(firebase.auth().currentUser != null)
|
|
{
|
|
return firebase.auth().currentUser.isAnonymous;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
window.addEventListener('load', function() {
|
|
console.log('Init Auth');
|
|
if (typeof firebase !== 'undefined' && firebase.auth() != null)
|
|
{
|
|
firebase.auth().onAuthStateChanged(onAuthStateChanged);
|
|
}
|
|
}, false);
|
|
|
|
|