2024-08-04 07:09:52 -07:00
|
|
|
import { getClient } from '../api';
|
2022-06-19 11:38:51 -07:00
|
|
|
|
2024-08-28 04:41:08 -07:00
|
|
|
import type { AppDispatch, RootState } from 'pl-fe/store';
|
2022-06-19 11:38:51 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const MFA_FETCH_REQUEST = 'MFA_FETCH_REQUEST' as const;
|
|
|
|
const MFA_FETCH_SUCCESS = 'MFA_FETCH_SUCCESS' as const;
|
|
|
|
const MFA_FETCH_FAIL = 'MFA_FETCH_FAIL' as const;
|
2022-06-19 11:38:51 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const MFA_BACKUP_CODES_FETCH_REQUEST = 'MFA_BACKUP_CODES_FETCH_REQUEST' as const;
|
|
|
|
const MFA_BACKUP_CODES_FETCH_SUCCESS = 'MFA_BACKUP_CODES_FETCH_SUCCESS' as const;
|
|
|
|
const MFA_BACKUP_CODES_FETCH_FAIL = 'MFA_BACKUP_CODES_FETCH_FAIL' as const;
|
2022-06-19 11:38:51 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const MFA_SETUP_REQUEST = 'MFA_SETUP_REQUEST' as const;
|
|
|
|
const MFA_SETUP_SUCCESS = 'MFA_SETUP_SUCCESS' as const;
|
|
|
|
const MFA_SETUP_FAIL = 'MFA_SETUP_FAIL' as const;
|
2022-06-19 11:38:51 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const MFA_CONFIRM_REQUEST = 'MFA_CONFIRM_REQUEST' as const;
|
|
|
|
const MFA_CONFIRM_SUCCESS = 'MFA_CONFIRM_SUCCESS' as const;
|
|
|
|
const MFA_CONFIRM_FAIL = 'MFA_CONFIRM_FAIL' as const;
|
2022-06-19 11:38:51 -07:00
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const MFA_DISABLE_REQUEST = 'MFA_DISABLE_REQUEST' as const;
|
|
|
|
const MFA_DISABLE_SUCCESS = 'MFA_DISABLE_SUCCESS' as const;
|
|
|
|
const MFA_DISABLE_FAIL = 'MFA_DISABLE_FAIL' as const;
|
2022-06-19 11:38:51 -07:00
|
|
|
|
|
|
|
const fetchMfa = () =>
|
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch({ type: MFA_FETCH_REQUEST });
|
2024-08-11 01:48:58 -07:00
|
|
|
return getClient(getState).settings.mfa.getMfaSettings().then((data) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_FETCH_SUCCESS, data });
|
|
|
|
}).catch(() => {
|
|
|
|
dispatch({ type: MFA_FETCH_FAIL });
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
const fetchBackupCodes = () =>
|
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch({ type: MFA_BACKUP_CODES_FETCH_REQUEST });
|
2024-08-11 01:48:58 -07:00
|
|
|
return getClient(getState).settings.mfa.getMfaBackupCodes().then((data) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_BACKUP_CODES_FETCH_SUCCESS, data });
|
|
|
|
return data;
|
2024-08-11 01:48:58 -07:00
|
|
|
}).catch((error: unknown) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_BACKUP_CODES_FETCH_FAIL });
|
2024-08-11 01:48:58 -07:00
|
|
|
throw error;
|
2022-06-19 11:38:51 -07:00
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const setupMfa = (method: 'totp') =>
|
2022-06-19 11:38:51 -07:00
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch({ type: MFA_SETUP_REQUEST, method });
|
2024-08-11 01:48:58 -07:00
|
|
|
return getClient(getState).settings.mfa.getMfaSetup(method).then((data) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_SETUP_SUCCESS, data });
|
|
|
|
return data;
|
2023-10-23 15:22:10 -07:00
|
|
|
}).catch((error: unknown) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_SETUP_FAIL });
|
|
|
|
throw error;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const confirmMfa = (method: 'totp', code: string, password: string) =>
|
2022-06-19 11:38:51 -07:00
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch({ type: MFA_CONFIRM_REQUEST, method, code });
|
2024-08-11 01:48:58 -07:00
|
|
|
return getClient(getState).settings.mfa.confirmMfaSetup(method, code, password).then((data) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_CONFIRM_SUCCESS, method, code });
|
|
|
|
return data;
|
2023-10-23 15:22:10 -07:00
|
|
|
}).catch((error: unknown) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_CONFIRM_FAIL, method, code, error, skipAlert: true });
|
|
|
|
throw error;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
2024-08-11 01:48:58 -07:00
|
|
|
const disableMfa = (method: 'totp', password: string) =>
|
2022-06-19 11:38:51 -07:00
|
|
|
(dispatch: AppDispatch, getState: () => RootState) => {
|
|
|
|
dispatch({ type: MFA_DISABLE_REQUEST, method });
|
2024-08-11 01:48:58 -07:00
|
|
|
return getClient(getState).settings.mfa.disableMfa(method, password).then((data) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_DISABLE_SUCCESS, method });
|
|
|
|
return data;
|
2023-10-23 15:22:10 -07:00
|
|
|
}).catch((error: unknown) => {
|
2022-06-19 11:38:51 -07:00
|
|
|
dispatch({ type: MFA_DISABLE_FAIL, method, skipAlert: true });
|
|
|
|
throw error;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
export {
|
|
|
|
MFA_FETCH_REQUEST,
|
|
|
|
MFA_FETCH_SUCCESS,
|
|
|
|
MFA_FETCH_FAIL,
|
|
|
|
MFA_BACKUP_CODES_FETCH_REQUEST,
|
|
|
|
MFA_BACKUP_CODES_FETCH_SUCCESS,
|
|
|
|
MFA_BACKUP_CODES_FETCH_FAIL,
|
|
|
|
MFA_SETUP_REQUEST,
|
|
|
|
MFA_SETUP_SUCCESS,
|
|
|
|
MFA_SETUP_FAIL,
|
|
|
|
MFA_CONFIRM_REQUEST,
|
|
|
|
MFA_CONFIRM_SUCCESS,
|
|
|
|
MFA_CONFIRM_FAIL,
|
|
|
|
MFA_DISABLE_REQUEST,
|
|
|
|
MFA_DISABLE_SUCCESS,
|
|
|
|
MFA_DISABLE_FAIL,
|
|
|
|
fetchMfa,
|
|
|
|
fetchBackupCodes,
|
|
|
|
setupMfa,
|
|
|
|
confirmMfa,
|
|
|
|
disableMfa,
|
|
|
|
};
|