Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WebUI MFA types refactor #49678

Merged
merged 10 commits into from
Dec 9, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion web/packages/shared/utils/createMfaOptions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@

import { Auth2faType, PreferredMfaType } from 'shared/services/types';

export default function createMfaOptions(opts: Options) {
// Deprecated: use getMfaRegisterOptions or getMfaChallengeOptions instead.
// TODO(Joerger): Delete once no longer used.
export default function createMfaOptions(opts: Options): MfaOption[] {
Joerger marked this conversation as resolved.
Show resolved Hide resolved
const { auth2faType, required = false } = opts;
const mfaOptions: MfaOption[] = [];

Expand Down
4 changes: 2 additions & 2 deletions web/packages/teleport/src/Account/Account.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ import {

import cfg from 'teleport/config';

import { DeviceUsage } from 'teleport/services/auth';

import { PasswordState } from 'teleport/services/user';

import { DeviceUsage } from 'teleport/services/mfa';

import { AuthDeviceList } from './ManageDevices/AuthDeviceList/AuthDeviceList';
import useManageDevices, {
State as ManageDevicesState,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ import useAttempt from 'shared/hooks/useAttemptNext';

import Ctx from 'teleport/teleportContext';
import cfg from 'teleport/config';
import auth, { DeviceUsage } from 'teleport/services/auth';
import { MfaDevice } from 'teleport/services/mfa';
import auth from 'teleport/services/auth';
import { DeviceUsage, MfaDevice } from 'teleport/services/mfa';
import { MfaChallengeScope } from 'teleport/services/auth/auth';

export default function useManageDevices(ctx: Ctx) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,13 @@ import Dialog from 'design/Dialog';

import { http, HttpResponse, delay } from 'msw';

import { DeviceUsage } from 'teleport/services/auth';
import { createTeleportContext } from 'teleport/mocks/contexts';
import { ContextProvider } from 'teleport/index';

import cfg from 'teleport/config';

import { DeviceUsage } from 'teleport/services/mfa';

import {
AddAuthDeviceWizardStepProps,
CreateDeviceStep,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,9 @@ import { StepHeader } from 'design/StepSlider';
import { P } from 'design/Text/Text';

import auth from 'teleport/services/auth/auth';
import { DeviceUsage } from 'teleport/services/auth';
import useTeleport from 'teleport/useTeleport';

import { MfaDevice } from 'teleport/services/mfa';
import { DeviceUsage, MfaDevice } from 'teleport/services/mfa';

import { PasskeyBlurb } from '../../../components/Passkeys/PasskeyBlurb';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ import { NodeMeta } from '../../useDiscover';

import type { Option } from 'shared/components/Select';
import type { AgentStepProps } from '../../types';
import type { MfaAuthnResponse } from 'teleport/services/mfa';
import type { MfaChallengeResponse } from 'teleport/services/mfa';
import type { ConnectionDiagnosticRequest } from 'teleport/services/agents';

export function TestConnection(props: AgentStepProps) {
Expand Down Expand Up @@ -144,7 +144,7 @@ export function TestConnection(props: AgentStepProps) {
function testConnection(args: {
login: string;
sshPrincipalSelectionMode: ConnectionDiagnosticRequest['sshPrincipalSelectionMode'];
mfaResponse?: MfaAuthnResponse;
mfaResponse?: MfaChallengeResponse;
}) {
return runConnectionDiagnostic(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import { CustomInputFieldForAsterisks } from 'teleport/Discover/Shared/CustomInp

import { MfaChallengeScope } from 'teleport/services/auth/auth';
import { DbMeta, useDiscover } from 'teleport/Discover/useDiscover';
import { MfaAuthnResponse } from 'teleport/services/mfa';
import { MfaChallengeResponse } from 'teleport/services/mfa';
import { WILD_CARD } from 'teleport/Discover/Shared/const';

import {
Expand Down Expand Up @@ -93,7 +93,7 @@ export function TestConnection() {

function testConnection(
validator: Validator,
mfaResponse?: MfaAuthnResponse
mfaResponse?: MfaChallengeResponse
) {
if (!validator.validate()) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import { KubeMeta } from '../../useDiscover';

import type { KubeImpersonation } from 'teleport/services/agents';
import type { AgentStepProps } from '../../types';
import type { MfaAuthnResponse } from 'teleport/services/mfa';
import type { MfaChallengeResponse } from 'teleport/services/mfa';

/**
* @deprecated Refactor Discover/Kubernetes/TestConnection away from the container component
Expand All @@ -34,7 +34,7 @@ export function useTestConnection(props: AgentStepProps) {

function testConnection(
impersonate: KubeImpersonation,
mfaResponse?: MfaAuthnResponse
mfaResponse?: MfaChallengeResponse
) {
runConnectionDiagnostic(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,8 @@ export function CreateEc2IceDialog({
style={{ display: 'flex', textAlign: 'left', width: '100%' }}
>
<Icons.Check size="small" ml={1} mr={2} color="success.main" />
The EC2 instance [{
typedAgentMeta?.node.awsMetadata.instanceId
}] has been added to Teleport.
The EC2 instance [{typedAgentMeta?.node.awsMetadata.instanceId}] has
been added to Teleport.
</Text>
<ButtonPrimary width="100%" onClick={() => nextStep()}>
Next
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ import { NodeMeta } from '../../useDiscover';

import type { Option } from 'shared/components/Select';
import type { AgentStepProps } from '../../types';
import type { MfaAuthnResponse } from 'teleport/services/mfa';
import type { MfaChallengeResponse } from 'teleport/services/mfa';

export function TestConnection(props: AgentStepProps) {
const {
Expand All @@ -65,7 +65,7 @@ export function TestConnection(props: AgentStepProps) {
openNewTab(url);
}

function testConnection(login: string, mfaResponse?: MfaAuthnResponse) {
function testConnection(login: string, mfaResponse?: MfaChallengeResponse) {
runConnectionDiagnostic(
{
resourceKind: 'node',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,7 @@ export function CreatedDiscoveryConfigDialog({
<>
{' '}
The discovery service can take a few minutes to finish
auto-enrolling resources found in region <Mark>
{region}
</Mark>.
auto-enrolling resources found in region <Mark>{region}</Mark>.
</>
)}
</Text>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import type {
ConnectionDiagnostic,
ConnectionDiagnosticRequest,
} from 'teleport/services/agents';
import type { MfaAuthnResponse } from 'teleport/services/mfa';
import type { MfaChallengeResponse } from 'teleport/services/mfa';
import type { ResourceSpec } from 'teleport/Discover/SelectResource';

export function useConnectionDiagnostic() {
Expand Down Expand Up @@ -60,7 +60,7 @@ export function useConnectionDiagnostic() {
*/
async function runConnectionDiagnostic(
req: ConnectionDiagnosticRequest,
mfaAuthnResponse?: MfaAuthnResponse
mfaAuthnResponse?: MfaChallengeResponse
): Promise<{ mfaRequired: boolean }> {
setDiagnosis(null); // reset since user's can re-test connection.
setRanDiagnosis(true);
Expand Down
3 changes: 2 additions & 1 deletion web/packages/teleport/src/Welcome/NewCredentials/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ import { NewFlow, StepComponentProps } from 'design/StepSlider';

import { ReactElement } from 'react';

import { DeviceUsage, RecoveryCodes, ResetToken } from 'teleport/services/auth';
import { RecoveryCodes, ResetToken } from 'teleport/services/auth';
import { RecoveryCodesProps } from 'teleport/components/RecoveryCodes';
import { DeviceUsage } from 'teleport/services/mfa';

export type UseTokenState = {
auth2faType: Auth2faType;
Expand Down
2 changes: 1 addition & 1 deletion web/packages/teleport/src/Welcome/useToken.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ import cfg from 'teleport/config';
import history from 'teleport/services/history';
import auth, {
ChangedUserAuthn,
DeviceUsage,
RecoveryCodes,
ResetPasswordReqWithEvent,
ResetPasswordWithWebauthnReqWithEvent,
ResetToken,
} from 'teleport/services/auth';
import { UseTokenState } from 'teleport/Welcome/NewCredentials/types';
import { DeviceUsage } from 'teleport/services/mfa';

export default function useToken(tokenId: string): UseTokenState {
const [resetToken, setResetToken] = useState<ResetToken>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ import React from 'react';
import { render, screen, fireEvent } from 'design/utils/testing';

import { makeDefaultMfaState, MfaState } from 'teleport/lib/useMfa';
import { SSOChallenge } from 'teleport/services/auth';

import { SSOChallenge } from 'teleport/services/mfa';

import AuthnDialog from './AuthnDialog';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import cfg from 'teleport/config';
import auth from 'teleport/services/auth';
import { MfaChallengeScope } from 'teleport/services/auth/auth';

import type { MfaAuthnResponse } from 'teleport/services/mfa';
import type { MfaChallengeResponse } from 'teleport/services/mfa';

// useReAuthenticate will have different "submit" behaviors depending on:
// - If prop field `onMfaResponse` is defined, after a user submits, the
Expand Down Expand Up @@ -121,7 +121,7 @@ type BaseProps = {
// that accepts a MFA response. No
// authentication has been done at this point.
type MfaResponseProps = BaseProps & {
onMfaResponse(res: MfaAuthnResponse): void;
onMfaResponse(res: MfaChallengeResponse): void;
/**
* The MFA challenge scope of the action to perform, as defined in webauthn.proto.
*/
Expand Down
2 changes: 1 addition & 1 deletion web/packages/teleport/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import type {

import type { SortType } from 'teleport/services/agents';
import type { RecordingType } from 'teleport/services/recordings';
import type { WebauthnAssertionResponse } from './services/auth';
import type { WebauthnAssertionResponse } from './services/mfa';
import type {
PluginKind,
Regions,
Expand Down
2 changes: 1 addition & 1 deletion web/packages/teleport/src/lib/EventEmitterMfaSender.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { EventEmitter } from 'events';
import {
MfaChallengeResponse,
WebauthnAssertionResponse,
} from 'teleport/services/auth';
} from 'teleport/services/mfa';

class EventEmitterMfaSender extends EventEmitter {
constructor() {
Expand Down
2 changes: 1 addition & 1 deletion web/packages/teleport/src/lib/tdp/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ import type {
SyncKeys,
SharedDirectoryTruncateResponse,
} from './codec';
import type { WebauthnAssertionResponse } from 'teleport/services/auth';
import type { WebauthnAssertionResponse } from 'teleport/services/mfa';

export enum TdpClientEvent {
TDP_CLIENT_SCREEN_SPEC = 'tdp client screen spec',
Expand Down
7 changes: 3 additions & 4 deletions web/packages/teleport/src/lib/term/tty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,11 @@
import Logger from 'shared/libs/logger';

import { EventEmitterMfaSender } from 'teleport/lib/EventEmitterMfaSender';
import {
MfaChallengeResponse,
WebauthnAssertionResponse,
} from 'teleport/services/auth';
import { WebauthnAssertionResponse } from 'teleport/services/mfa';
import { AuthenticatedWebSocket } from 'teleport/lib/AuthenticatedWebSocket';

import { MfaChallengeResponse } from 'teleport/services/mfa';

import { EventType, TermEvent, WebsocketCloseCode } from './enums';
import { Protobuf, MessageTypeEnum } from './protobuf';

Expand Down
13 changes: 10 additions & 3 deletions web/packages/teleport/src/lib/useMfa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,13 @@ import { useState, useEffect, useCallback } from 'react';
import { EventEmitterMfaSender } from 'teleport/lib/EventEmitterMfaSender';
import { TermEvent } from 'teleport/lib/term/enums';
import {
makeMfaAuthenticateChallenge,
parseMfaChallengeJson as parseMfaChallenge,
makeWebauthnAssertionResponse,
} from 'teleport/services/mfa/makeMfa';
import {
MfaAuthenticateChallengeJson,
SSOChallenge,
} from 'teleport/services/auth';
} from 'teleport/services/mfa';

export function useMfa(emitterSender: EventEmitterMfaSender): MfaState {
const [state, setState] = useState<{
Expand Down Expand Up @@ -129,8 +132,12 @@ export function useMfa(emitterSender: EventEmitterMfaSender): MfaState {
useEffect(() => {
let ssoChallengeAbortController: AbortController | undefined;
const challengeHandler = (challengeJson: string) => {
const challenge = JSON.parse(
challengeJson
) as MfaAuthenticateChallengeJson;

const { webauthnPublicKey, ssoChallenge, totpChallenge } =
makeMfaAuthenticateChallenge(challengeJson);
parseMfaChallenge(challenge);

setState(prevState => ({
...prevState,
Expand Down
4 changes: 2 additions & 2 deletions web/packages/teleport/src/services/agents/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import { Desktop } from 'teleport/services/desktops';

import { UserGroup } from '../userGroups';

import type { MfaAuthnResponse } from '../mfa';
import type { MfaChallengeResponse } from '../mfa';
import type { Platform } from 'design/platform';

export type UnifiedResource =
Expand Down Expand Up @@ -142,7 +142,7 @@ export type ConnectionDiagnosticRequest = {
sshNodeSetupMethod?: 'script' | 'connect_my_computer'; // `json:"ssh_node_setup_method"`
kubeImpersonation?: KubeImpersonation; // `json:"kubernetes_impersonation"`
dbTester?: DatabaseTester;
mfaAuthnResponse?: MfaAuthnResponse;
mfaAuthnResponse?: MfaChallengeResponse;
};

export type KubeImpersonation = {
Expand Down
2 changes: 1 addition & 1 deletion web/packages/teleport/src/services/api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import auth, { MfaChallengeScope } from 'teleport/services/auth/auth';
import websession from 'teleport/services/websession';

import { storageService } from '../storageService';
import { WebauthnAssertionResponse } from '../auth';
import { WebauthnAssertionResponse } from '../mfa';

import parseError, { ApiError } from './parseError';

Expand Down
Loading
Loading