On 07.05.20 14:28, Tim Marx wrote:
> Signed-off-by: Tim Marx
> ---
>
> Notes:
> changed since v1:
> * store token including the product prefix
> * add token id to username to make it more obvious that it's note the
> actual user
>
> www/manager6/Workspace.js | 5 ++
> www/manager6/window/LoginWindow.js | 129 ++---
> 2 files changed, 105 insertions(+), 29 deletions(-)
>
> diff --git a/www/manager6/Workspace.js b/www/manager6/Workspace.js
> index 57cb1bb9..b03443cb 100644
> --- a/www/manager6/Workspace.js
> +++ b/www/manager6/Workspace.js
> @@ -73,6 +73,11 @@ Ext.define('PVE.Workspace', {
>
> me.callParent();
>
> + var storedUser = Proxmox.Utils.getStoredUser();
please use `let` and rebase to match the rename to getStoredAuth
> + if (storedUser.username) {
> + Proxmox.UserName = storedUser.username;
> + }
> +
> if (!Proxmox.Utils.authOK()) {
> me.showLogin();
> } else {
> diff --git a/www/manager6/window/LoginWindow.js
> b/www/manager6/window/LoginWindow.js
> index e29b7352..223ad581 100644
> --- a/www/manager6/window/LoginWindow.js
> +++ b/www/manager6/window/LoginWindow.js
> @@ -12,6 +12,8 @@ Ext.define('PVE.window.LoginWindow', {
> var form = this.lookupReference('loginForm');
> var unField = this.lookupReference('usernameField');
> var saveunField = this.lookupReference('saveunField');
> + var tField = this.lookupReference('apitokenField');
tField is not an acceptable variable name, I mean, the existing unField
isn't either but I'd rather change that too instead of adapting to it.
use something like 'tokenField'
> +
> var view = this.getView();
>
> if (!form.isValid()) {
> @@ -20,38 +22,60 @@ Ext.define('PVE.window.LoginWindow', {
>
> view.el.mask(gettext('Please wait...'), 'x-mask-loading');
>
> - // set or clear username
> - var sp = Ext.state.Manager.getProvider();
> - if (saveunField.getValue() === true) {
> - sp.set(unField.getStateId(), unField.getValue());
> + if (tField.value !== '') {
> + var splitToken = tField.value.match(/^(.*)=(.*)$/);
> + Proxmox.Utils.API2Request({
> + url: '/api2/extjs/access/uicapabilities',
Hmm, do I miss a access-control API patch? As uicapabilities isn't available.
> + headers:{
> + Authorization: 'PVEAPIToken=' + tField.value
> + },
> + success: function(response, opts) {
> + var data = {
> + username: splitToken[1],
> + token: 'PVEAPIToken=' + tField.value,
> + cap: response.result.data.cap
> + };
> + me.success(data);
> + },
> +
> + failure: function(response, opts) {
> + me.failure(response);
> + }
> + });
> } else {
> - sp.clear(unField.getStateId());
> - }
> - sp.set(saveunField.getStateId(), saveunField.getValue());
> + // set or clear username
> + var sp = Ext.state.Manager.getProvider();
> + if (saveunField.getValue() === true) {
> + sp.set(unField.getStateId(), unField.getValue());
> + } else {
> + sp.clear(unField.getStateId());
> + }
> + sp.set(saveunField.getStateId(), saveunField.getValue());
>
> - form.submit({
> - failure: function(f, resp){
> - me.failure(resp);
> - },
> - success: function(f, resp){
> - view.el.unmask();
> + form.submit({
> + failure: function(f, resp){
> + me.failure(resp);
> + },
> + success: function(f, resp){
> + view.el.unmask();
>
> - var data = resp.result.data;
> - if (Ext.isDefined(data.NeedTFA)) {
> - // Store first factor login information first:
> - data.LoggedOut = true;
> - Proxmox.Utils.setAuthData(data);
> + var data = resp.result.data;
> + if (Ext.isDefined(data.NeedTFA)) {
> + // Store first factor login information first:
> + data.LoggedOut = true;
> + Proxmox.Utils.setAuthData(data);
>
> - if (Ext.isDefined(data.U2FChallenge)) {
> - me.perform_u2f(data);
> + if (Ext.isDefined(data.U2FChallenge)) {
> + me.perform_u2f(data);
> + } else {
> + me.perform_otp();
> + }
>