Skip to content

Commit 90efc28

Browse files
committed
Use mfa context in api calls.
1 parent 5f3df13 commit 90efc28

File tree

4 files changed

+24
-16
lines changed

4 files changed

+24
-16
lines changed

web/packages/teleport/src/MFAContext/MFAContext.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import { PropsWithChildren, createContext, useCallback, useRef } from 'react';
22
import AuthnDialog from 'teleport/components/AuthnDialog';
33
import { useMfa } from 'teleport/lib/useMfa';
4+
import api from 'teleport/services/api';
45
import { MfaChallengeScope } from 'teleport/services/auth/auth';
56
import { MfaChallengeResponse } from 'teleport/services/mfa';
67

78
import { useTeleport } from '..';
89

9-
export interface MFAContextValue {
10+
export interface MfaContextValue {
1011
getAdminActionMfaResponse(reusable?: boolean): Promise<MfaChallengeResponse>;
1112
}
1213

13-
export const MFAContext = createContext<MFAContextValue>(null);
14+
export const MfaContext = createContext<MfaContextValue>(null);
1415

15-
export const MFAContextProvider = ({ children }: PropsWithChildren) => {
16+
export const MfaContextProvider = ({ children }: PropsWithChildren) => {
1617
const allowReuse = useRef(false);
1718
const adminMfa = useMfa({
1819
req: {
@@ -36,11 +37,12 @@ export const MFAContextProvider = ({ children }: PropsWithChildren) => {
3637

3738
const ctx = useTeleport();
3839
ctx.joinTokenService.setMfaContext(mfaCtx);
40+
api.setMfaContext(mfaCtx);
3941

4042
return (
41-
<MFAContext.Provider value={mfaCtx}>
43+
<MfaContext.Provider value={mfaCtx}>
4244
<AuthnDialog {...adminMfa}></AuthnDialog>
4345
{children}
44-
</MFAContext.Provider>
46+
</MfaContext.Provider>
4547
);
4648
};

web/packages/teleport/src/Teleport.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import { Welcome } from './Welcome';
4343

4444
import { Player } from './Player';
4545

46-
import { MFAContextProvider } from './MFAContext/MFAContext';
46+
import { MfaContextProvider } from './MFAContext/MFAContext';
4747

4848
import { Main } from './Main';
4949
import TeleportContext from './teleportContext';
@@ -90,15 +90,15 @@ const Teleport: React.FC<Props> = props => {
9090
<Authenticated>
9191
<UserContextProvider>
9292
<TeleportContextProvider ctx={ctx}>
93-
<MFAContextProvider>
93+
<MfaContextProvider>
9494
<Switch>
9595
<Route
9696
path={cfg.routes.appLauncher}
9797
component={AppLauncher}
9898
/>
9999
<Route>{createPrivateRoutes()}</Route>
100100
</Switch>
101-
</MFAContextProvider>
101+
</MfaContextProvider>
102102
</TeleportContextProvider>
103103
</UserContextProvider>
104104
</Authenticated>

web/packages/teleport/src/services/api/api.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,25 @@
1818

1919
import 'whatwg-fetch';
2020

21-
import auth, { MfaChallengeScope } from 'teleport/services/auth/auth';
2221
import websession from 'teleport/services/websession';
22+
import 'whatwg-fetch';
23+
24+
import { MfaContextValue } from 'teleport/MFAContext/MFAContext';
2325

2426
import { MfaChallengeResponse } from '../mfa';
2527
import { storageService } from '../storageService';
28+
2629
import parseError, { ApiError } from './parseError';
2730

2831
export const MFA_HEADER = 'Teleport-Mfa-Response';
2932

33+
let mfaContext: MfaContextValue;
34+
3035
const api = {
36+
setMfaContext(mfa: MfaContextValue) {
37+
mfaContext = mfa;
38+
},
39+
3140
get(
3241
url: string,
3342
abortSignal?: AbortSignal,
@@ -189,10 +198,7 @@ const api = {
189198

190199
let mfaResponseForRetry;
191200
try {
192-
const challenge = await auth.getMfaChallenge({
193-
scope: MfaChallengeScope.ADMIN_ACTION,
194-
});
195-
mfaResponseForRetry = await auth.getMfaChallengeResponse(challenge);
201+
mfaResponseForRetry = await mfaContext.getAdminActionMfaResponse();
196202
} catch {
197203
throw new Error(
198204
'Failed to fetch MFA challenge. Please connect a registered hardware key and try again. If you do not have a hardware key registered, you can add one from your account settings page.'

web/packages/teleport/src/services/joinToken/joinToken.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818

1919
import cfg from 'teleport/config';
20-
import { MFAContextValue } from 'teleport/MFAContext/MFAContext';
20+
import { MfaContextValue } from 'teleport/MFAContext/MFAContext';
2121
import api from 'teleport/services/api';
2222

2323
import { makeLabelMapOfStrArrs } from '../agents/make';
@@ -29,8 +29,8 @@ const TeleportTokenNameHeader = 'X-Teleport-TokenName';
2929

3030
class JoinTokenService {
3131
// MFA context is set late by the MFA Context provider.
32-
mfa: MFAContextValue;
33-
setMfaContext(mfa: MFAContextValue) {
32+
mfa: MfaContextValue;
33+
setMfaContext(mfa: MfaContextValue) {
3434
this.mfa = mfa;
3535
}
3636

0 commit comments

Comments
 (0)