|
|
|
@@ -156,12 +156,14 @@ function findGetParameter(parameterName) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var signup = function() {
|
|
|
|
var signup = function() {
|
|
|
|
|
|
|
|
log('[app] Signup');
|
|
|
|
var username = $('#input-signup-username').val();
|
|
|
|
var username = $('#input-signup-username').val();
|
|
|
|
var email = $('#input-signup-email').val();
|
|
|
|
var email = $('#input-signup-email').val();
|
|
|
|
var password = $('#input-signup-password').val();
|
|
|
|
var password = $('#input-signup-password').val();
|
|
|
|
if (username == '') { $('#input-signup-username').focus(); return; }
|
|
|
|
if (username == '') { $('#input-signup-username').focus(); return; }
|
|
|
|
if (email == '') { $('#input-signup-email').focus(); return; }
|
|
|
|
if (email == '') { $('#input-signup-email').focus(); return; }
|
|
|
|
if (password == '') { $('#input-signup-password').focus(); return; }
|
|
|
|
if (password == '') { $('#input-signup-password').focus(); return; }
|
|
|
|
|
|
|
|
log('[app] Signup: All fields okay');
|
|
|
|
showLoader();
|
|
|
|
showLoader();
|
|
|
|
$('#input-signup-username').val('').trigger('focusin').trigger('focusout');
|
|
|
|
$('#input-signup-username').val('').trigger('focusin').trigger('focusout');
|
|
|
|
$('#input-signup-email').val('').trigger('focusin').trigger('focusout');
|
|
|
|
$('#input-signup-email').val('').trigger('focusin').trigger('focusout');
|
|
|
|
@@ -175,6 +177,7 @@ var signup = function() {
|
|
|
|
password: password
|
|
|
|
password: password
|
|
|
|
},
|
|
|
|
},
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
|
|
|
|
log('[app] Signup: error:', xhr.status, status);
|
|
|
|
if (xhr.status == 409) {
|
|
|
|
if (xhr.status == 409) {
|
|
|
|
toastError('Benutzername bereits vergeben');
|
|
|
|
toastError('Benutzername bereits vergeben');
|
|
|
|
$('#input-signup-email').val(email).trigger('focusin').trigger('focusout');
|
|
|
|
$('#input-signup-email').val(email).trigger('focusin').trigger('focusout');
|
|
|
|
@@ -189,6 +192,7 @@ var signup = function() {
|
|
|
|
hideLoader();
|
|
|
|
hideLoader();
|
|
|
|
},
|
|
|
|
},
|
|
|
|
success: function (data, status, xhr) {
|
|
|
|
success: function (data, status, xhr) {
|
|
|
|
|
|
|
|
log('[app] Signup successful, logging in');
|
|
|
|
$('#input-login-username').val(username);
|
|
|
|
$('#input-login-username').val(username);
|
|
|
|
$('#input-login-password').val(password);
|
|
|
|
$('#input-login-password').val(password);
|
|
|
|
login();
|
|
|
|
login();
|
|
|
|
@@ -197,6 +201,7 @@ var signup = function() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var login = function() {
|
|
|
|
var login = function() {
|
|
|
|
|
|
|
|
log('[app] Login');
|
|
|
|
showLoader();
|
|
|
|
showLoader();
|
|
|
|
var username = $('#input-login-username').val();
|
|
|
|
var username = $('#input-login-username').val();
|
|
|
|
var password = $('#input-login-password').val();
|
|
|
|
var password = $('#input-login-password').val();
|
|
|
|
@@ -211,6 +216,7 @@ var login = function() {
|
|
|
|
device: navigator.userAgent
|
|
|
|
device: navigator.userAgent
|
|
|
|
},
|
|
|
|
},
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
|
|
|
|
log('[app] Login: error:', xhr.status, status);
|
|
|
|
if (xhr.status == 401) {
|
|
|
|
if (xhr.status == 401) {
|
|
|
|
toastError('Benutzername oder Passwort falsch');
|
|
|
|
toastError('Benutzername oder Passwort falsch');
|
|
|
|
$('#input-login-username').val(username).trigger('focusin').trigger('focusout');
|
|
|
|
$('#input-login-username').val(username).trigger('focusin').trigger('focusout');
|
|
|
|
@@ -225,6 +231,7 @@ var login = function() {
|
|
|
|
hideLoader();
|
|
|
|
hideLoader();
|
|
|
|
},
|
|
|
|
},
|
|
|
|
success: function (data, status, xhr) {
|
|
|
|
success: function (data, status, xhr) {
|
|
|
|
|
|
|
|
log('[app] Login successful');
|
|
|
|
localStorage.setItem('auth_id', data.id);
|
|
|
|
localStorage.setItem('auth_id', data.id);
|
|
|
|
localStorage.setItem('auth_hash', data.auth);
|
|
|
|
localStorage.setItem('auth_hash', data.auth);
|
|
|
|
localStorage.setItem('auth_user', data.user);
|
|
|
|
localStorage.setItem('auth_user', data.user);
|
|
|
|
@@ -245,6 +252,7 @@ var logoutClearStorage = function() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var logout = function() {
|
|
|
|
var logout = function() {
|
|
|
|
|
|
|
|
log('[app] Logout');
|
|
|
|
showLoader();
|
|
|
|
showLoader();
|
|
|
|
var auth = {
|
|
|
|
var auth = {
|
|
|
|
id: localStorage.getItem('auth_id'),
|
|
|
|
id: localStorage.getItem('auth_id'),
|
|
|
|
@@ -262,6 +270,7 @@ var logout = function() {
|
|
|
|
auth: auth
|
|
|
|
auth: auth
|
|
|
|
},
|
|
|
|
},
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
error: function (xhr, status, error) {
|
|
|
|
|
|
|
|
log('[app] Logout: error:', xhr.status, status);
|
|
|
|
if (xhr.status == 401) {
|
|
|
|
if (xhr.status == 401) {
|
|
|
|
log('[app] Not logged in');
|
|
|
|
log('[app] Not logged in');
|
|
|
|
logoutClearStorage();
|
|
|
|
logoutClearStorage();
|
|
|
|
@@ -276,12 +285,14 @@ var logout = function() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
success: function (data, status, xhr) {
|
|
|
|
success: function (data, status, xhr) {
|
|
|
|
|
|
|
|
log('[app] Logout successful');
|
|
|
|
logoutClearStorage();
|
|
|
|
logoutClearStorage();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function deleteDb() {
|
|
|
|
function deleteDb() {
|
|
|
|
|
|
|
|
log('[app] Deleting DB');
|
|
|
|
$('#menu-developer').hideMenu();
|
|
|
|
$('#menu-developer').hideMenu();
|
|
|
|
if (canUseLocalDB) {
|
|
|
|
if (canUseLocalDB) {
|
|
|
|
showLoader();
|
|
|
|
showLoader();
|
|
|
|
@@ -298,11 +309,13 @@ function deleteDb() {
|
|
|
|
setTimeout(function(){ location.reload(); }, 3000);
|
|
|
|
setTimeout(function(){ location.reload(); }, 3000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
log('[app] DB not supported');
|
|
|
|
toastWarn('Dein Gerät unterstützt kein lokales Speichern der Daten. Alle Daten werden direkt vom Server gezogen.<br>Entsprechend kannst Du die Datenbank auch nicht zurücksetzen.', 10000);
|
|
|
|
toastWarn('Dein Gerät unterstützt kein lokales Speichern der Daten. Alle Daten werden direkt vom Server gezogen.<br>Entsprechend kannst Du die Datenbank auch nicht zurücksetzen.', 10000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function deleteCache() {
|
|
|
|
function deleteCache() {
|
|
|
|
|
|
|
|
log('[app] Deleting cache');
|
|
|
|
$('#menu-developer').hideMenu();
|
|
|
|
$('#menu-developer').hideMenu();
|
|
|
|
navigator.serviceWorker.getRegistrations().then(function (registrations) {
|
|
|
|
navigator.serviceWorker.getRegistrations().then(function (registrations) {
|
|
|
|
for (let registration of registrations) {
|
|
|
|
for (let registration of registrations) {
|
|
|
|
@@ -340,16 +353,27 @@ function urlB64ToUint8Array(base64String) {
|
|
|
|
function pushesSubscribe() {
|
|
|
|
function pushesSubscribe() {
|
|
|
|
log('[app] Subscribing');
|
|
|
|
log('[app] Subscribing');
|
|
|
|
const applicationServerKey = urlB64ToUint8Array(PUSH_SERVER_KEY);
|
|
|
|
const applicationServerKey = urlB64ToUint8Array(PUSH_SERVER_KEY);
|
|
|
|
|
|
|
|
log('[app] Subscription app server key:', applicationServerKey);
|
|
|
|
swRegistration.pushManager.subscribe({
|
|
|
|
swRegistration.pushManager.subscribe({
|
|
|
|
userVisibleOnly: true,
|
|
|
|
userVisibleOnly: true,
|
|
|
|
applicationServerKey: applicationServerKey
|
|
|
|
applicationServerKey: applicationServerKey
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.then(function(subscription) {
|
|
|
|
.then(async function(subscription) {
|
|
|
|
pushesUpdateServerSubscription(subscription, true);
|
|
|
|
log('[app] Subscription:', subscription);
|
|
|
|
|
|
|
|
if (await pushesUpdateServerSubscription(subscription, true)) {
|
|
|
|
|
|
|
|
log('[app] Subscription: Sent to server, updating UI');
|
|
|
|
updatePushSwitches();
|
|
|
|
updatePushSwitches();
|
|
|
|
updatePushBadge();
|
|
|
|
updatePushBadge();
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
$('#menu-pushes').hideMenu();
|
|
|
|
|
|
|
|
log('[app] Failed to subscribe the user due to connection error');
|
|
|
|
|
|
|
|
toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000);
|
|
|
|
|
|
|
|
pushesUnSubscribe(true);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
hideLoader();
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.catch(function(err) {
|
|
|
|
.catch(function(err) {
|
|
|
|
|
|
|
|
$('#menu-pushes').hideMenu();
|
|
|
|
log('[app] Failed to subscribe the user: ', err);
|
|
|
|
log('[app] Failed to subscribe the user: ', err);
|
|
|
|
toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000);
|
|
|
|
toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000);
|
|
|
|
pushesUnSubscribe(true);
|
|
|
|
pushesUnSubscribe(true);
|
|
|
|
@@ -359,13 +383,21 @@ function pushesSubscribe() {
|
|
|
|
function pushesUnSubscribe(silent = false) {
|
|
|
|
function pushesUnSubscribe(silent = false) {
|
|
|
|
log('[app] Unsubscribing');
|
|
|
|
log('[app] Unsubscribing');
|
|
|
|
swRegistration.pushManager.getSubscription()
|
|
|
|
swRegistration.pushManager.getSubscription()
|
|
|
|
.then(function(subscription) {
|
|
|
|
.then(async function(subscription) {
|
|
|
|
|
|
|
|
log('[app] Subscription:', subscription);
|
|
|
|
if (subscription) {
|
|
|
|
if (subscription) {
|
|
|
|
pushesUpdateServerSubscription(subscription, false);
|
|
|
|
if (await pushesUpdateServerSubscription(subscription, false)) {
|
|
|
|
|
|
|
|
log('[app] Subscription: Removed from server');
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
log('[app] Failed to unsubscribe the user due to connection error');
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log('[app] Removing subscription');
|
|
|
|
subscription.unsubscribe();
|
|
|
|
subscription.unsubscribe();
|
|
|
|
|
|
|
|
log('[app] Subscription: Updating UI');
|
|
|
|
$('#menu-pushes').hideMenu();
|
|
|
|
$('#menu-pushes').hideMenu();
|
|
|
|
updatePushBadge();
|
|
|
|
updatePushBadge();
|
|
|
|
hideLoader();
|
|
|
|
hideLoader();
|
|
|
|
|
|
|
|
if (!silent) toastOk('Du erhältst ab sofort keine Benachrichtigungen mehr von uns.');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.catch(function(error) {
|
|
|
|
.catch(function(error) {
|
|
|
|
@@ -378,21 +410,22 @@ function pushesUnSubscribe(silent = false) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function pushesUpdateServerSubscription(subscription, enabled) {
|
|
|
|
function pushesUpdateServerSubscription(subscription, enabled) {
|
|
|
|
|
|
|
|
return new Promise(function(resolve){
|
|
|
|
log('[app] updateServer', enabled, subscription);
|
|
|
|
log('[app] updateServer', enabled, subscription);
|
|
|
|
$.ajax({
|
|
|
|
$.ajax({
|
|
|
|
url: QUERY_URL + (enabled ? 'add' : 'remove') + '_subscription',
|
|
|
|
url: QUERY_URL + (enabled ? 'add' : 'remove') + '_subscription',
|
|
|
|
type: 'POST',
|
|
|
|
type: 'POST',
|
|
|
|
data: { subscription: JSON.stringify(subscription) },
|
|
|
|
data: { subscription: JSON.stringify(subscription) },
|
|
|
|
success: function (data, textStatus, jqXHR) {
|
|
|
|
success: function (data, textStatus, jqXHR) {
|
|
|
|
if (!enabled) {
|
|
|
|
log('[app] Subscription sent to server');
|
|
|
|
toastOk('Du erhältst ab sofort keine Benachrichtigungen mehr von uns.');
|
|
|
|
resolve(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
hideLoader();
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
error: function (jqXHR, textStatus, errorThrown) {
|
|
|
|
error: function (jqXHR, textStatus, errorThrown) {
|
|
|
|
throw 'Cannot update server subscription';
|
|
|
|
log('[app] Error sending subscription to server');
|
|
|
|
|
|
|
|
resolve(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function initPushSettings() {
|
|
|
|
async function initPushSettings() {
|
|
|
|
|