return state.remoteHostsConfig[state.localCluster];
};
-export const saveApiToken = (token: string) => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
+export const saveApiToken = (token: string) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<any> => {
const config = dispatch<any>(getConfig);
const svc = createServices(config, { progressFn: () => { }, errorFn: () => { } });
setAuthorizationHeader(svc, token);
- return svc.authService.getUserDetails().then((user: User) => {
+ try {
+ const user = await svc.authService.getUserDetails();
dispatch(authActions.INIT_USER({ user, token }));
- // Upon user init, request an extra token that won't be expired on logout
- // for other uses like the "get token" dialog, or S3 URL building.
- dispatch<any>(getNewExtraToken());
- }).catch(() => {
+ } catch (e) {
dispatch(authActions.LOGOUT({ deleteLinkData: false }));
- });
+ }
};
-export const getNewExtraToken = () =>
+export const getNewExtraToken = (reuseStored: boolean = false) =>
async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ if (reuseStored && getState().auth.extraApiToken !== undefined) {
+ return getState().auth.extraApiToken;
+ }
const user = getState().auth.user;
const loginCluster = getState().auth.config.clusterConfig.Login.LoginCluster;
if (user === undefined) { return; }
import { RootState } from "~/store/store";
import { ServiceRepository } from "~/services/services";
import { dialogActions } from '~/store/dialog/dialog-actions';
+import { getNewExtraToken } from "../auth/auth-action";
export const COLLECTION_WEBDAV_S3_DIALOG_NAME = 'collectionWebdavS3Dialog';
}
export const openWebDavS3InfoDialog = (uuid: string, activeTab?: number) =>
- (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+ await dispatch<any>(getNewExtraToken(true));
dispatch(dialogActions.OPEN_DIALOG({
id: COLLECTION_WEBDAV_S3_DIALOG_NAME,
data: {
import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu";
import { UserPanelIcon } from "~/components/icon/icon";
import { DispatchProp, connect } from 'react-redux';
-import { authActions } from '~/store/auth/auth-action';
+import { authActions, getNewExtraToken } from '~/store/auth/auth-action';
import { RootState } from "~/store/store";
import { openTokenDialog } from '~/store/token-dialog/token-dialog-actions';
import { openRepositoriesPanel } from "~/store/repositories/repositories-actions";
{user.isActive ? <>
<MenuItem onClick={() => dispatch(openUserVirtualMachines())}>Virtual Machines</MenuItem>
{!user.isAdmin && <MenuItem onClick={() => dispatch(openRepositoriesPanel())}>Repositories</MenuItem>}
- <MenuItem onClick={() => dispatch(openTokenDialog)}>Get API token</MenuItem>
+ <MenuItem onClick={() => {
+ dispatch<any>(getNewExtraToken(true));
+ dispatch(openTokenDialog);
+ }}>Get API token</MenuItem>
<MenuItem onClick={() => dispatch(navigateToSshKeysUser)}>Ssh Keys</MenuItem>
<MenuItem onClick={() => dispatch(navigateToSiteManager)}>Site Manager</MenuItem>
<MenuItem onClick={() => dispatch(navigateToMyAccount)}>My account</MenuItem>