diff --git a/dev/Remote/AbstractFetch.js b/dev/Remote/AbstractFetch.js index c92b8edc9..84a10ad64 100644 --- a/dev/Remote/AbstractFetch.js +++ b/dev/Remote/AbstractFetch.js @@ -47,7 +47,11 @@ abort = (sAction, bClearOnly) => { fetchJSON = (action, sGetAdd, params, timeout, jsonCallback) => { sGetAdd = pString(sGetAdd); params = params || {}; - params.Action = action; + if (params instanceof FormData) { + params.set('Action', action); + } else { + params.Action = action; + } let init = {}; if (window.AbortController) { abort(action); diff --git a/dev/Remote/User/Fetch.js b/dev/Remote/User/Fetch.js index fdc205072..cf125f1b0 100644 --- a/dev/Remote/User/Fetch.js +++ b/dev/Remote/User/Fetch.js @@ -50,20 +50,10 @@ class RemoteUserFetch extends AbstractFetchRemote { /** * @param {?Function} fCallback - * @param {string} sEmail - * @param {string} sLogin - * @param {string} sPassword - * @param {boolean} bSignMe - * @param {string=} sLanguage + * @param {FormData} oData */ - login(fCallback, sEmail, sPassword, bSignMe, sLanguage) { - this.defaultRequest(fCallback, 'Login', { - Email: sEmail, - Login: '', - Password: sPassword, - Language: sLanguage || '', - SignMe: bSignMe ? 1 : 0 - }); + login(fCallback, oData) { + this.defaultRequest(fCallback, 'Login', oData); } /** diff --git a/dev/View/User/Login.js b/dev/View/User/Login.js index 432f4dc22..4bdfcc4a6 100644 --- a/dev/View/User/Login.js +++ b/dev/View/User/Login.js @@ -104,17 +104,19 @@ class LoginUserView extends AbstractViewCenter { } submitCommand(self, event) { - let email = this.email().trim(), - valid = event.target.form.reportValidity() && email, - pass = this.password(); + let form = event.target.form, + data = new FormData(form), + email = this.email().trim(), + valid = form.reportValidity() && email; this.emailError(!email); - this.passwordError(!pass); + this.passwordError(!this.password()); this.formError(!valid); if (valid) { this.submitRequest(true); - + data.set('Language', this.bSendLanguage ? this.language() : ''); + data.set('SignMe', this.signMe() ? 1 : 0); Remote.login( (iError, oData) => { if (iError) { @@ -129,10 +131,7 @@ class LoginUserView extends AbstractViewCenter { rl.route.reload(); } }, - email, - pass, - !!this.signMe(), - this.bSendLanguage ? this.language() : '' + data ); Local.set(ClientSideKeyName.LastSignMe, this.signMe() ? '-1-' : '-0-'); diff --git a/dev/bootstrap.js b/dev/bootstrap.js index 9cb786364..8f76009f9 100644 --- a/dev/bootstrap.js +++ b/dev/bootstrap.js @@ -94,10 +94,7 @@ export default App => { if (postData) { init.method = 'POST'; init.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; - postData.XToken = Settings.app('token'); -// init.body = JSON.stringify(postData); - const formData = new FormData(), - buildFormData = (formData, data, parentKey) => { + const buildFormData = (formData, data, parentKey) => { if (data && typeof data === 'object' && !(data instanceof Date || data instanceof File)) { Object.keys(data).forEach(key => buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key) @@ -105,9 +102,14 @@ export default App => { } else { formData.set(parentKey, data == null ? '' : data); } + return formData; }; - buildFormData(formData, postData); - init.body = new URLSearchParams(formData); + postData = (postData instanceof FormData) + ? postData + : buildFormData(new FormData(), postData); + postData.set('XToken', Settings.app('token')); +// init.body = JSON.stringify(Object.fromEntries(postData)); + init.body = new URLSearchParams(postData); } return fetch(resource, init).then(response => { diff --git a/snappymail/v/0.0.0/app/templates/Views/User/Login.html b/snappymail/v/0.0.0/app/templates/Views/User/Login.html index c677637f4..7635440e1 100644 --- a/snappymail/v/0.0.0/app/templates/Views/User/Login.html +++ b/snappymail/v/0.0.0/app/templates/Views/User/Login.html @@ -9,7 +9,7 @@ data-bind="submit: submitForm, css: {'errorAnimated': formError, 'submitting': submitRequest()}">
- @@ -18,7 +18,7 @@
-