Skip to content

Commit a2b3937

Browse files
committed
fix: make auth providers non singletons
1 parent f297607 commit a2b3937

File tree

3 files changed

+29
-32
lines changed

3 files changed

+29
-32
lines changed

src/cmap/auth/mongodb_oidc/azure_machine_workflow.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ export class AzureMachineWorkflow extends MachineWorkflow {
5252
} else {
5353
this.cache.deleteEntry(tokenAudience);
5454
const response = await getAzureTokenData(tokenAudience, tokenClientId);
55-
console.log(response);
5655
if (!isEndpointResultValid(response)) {
5756
throw new MongoAzureError(ENDPOINT_RESULT_ERROR);
5857
}

src/cmap/connect.ts

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,28 @@ import {
4141
} from './wire_protocol/constants';
4242

4343
/** @internal */
44-
export const AUTH_PROVIDERS = new Map<AuthMechanism | string, AuthProvider>([
45-
[AuthMechanism.MONGODB_AWS, new MongoDBAWS()],
46-
[AuthMechanism.MONGODB_CR, new MongoCR()],
47-
[AuthMechanism.MONGODB_GSSAPI, new GSSAPI()],
48-
[AuthMechanism.MONGODB_OIDC, new MongoDBOIDC()],
49-
[AuthMechanism.MONGODB_PLAIN, new Plain()],
50-
[AuthMechanism.MONGODB_SCRAM_SHA1, new ScramSHA1()],
51-
[AuthMechanism.MONGODB_SCRAM_SHA256, new ScramSHA256()],
52-
[AuthMechanism.MONGODB_X509, new X509()]
53-
]);
44+
export function getAuthProvider(name: AuthMechanism | string): AuthProvider {
45+
switch (name) {
46+
case AuthMechanism.MONGODB_AWS:
47+
return new MongoDBAWS();
48+
case AuthMechanism.MONGODB_CR:
49+
return new MongoCR();
50+
case AuthMechanism.MONGODB_GSSAPI:
51+
return new GSSAPI();
52+
case AuthMechanism.MONGODB_OIDC:
53+
return new MongoDBOIDC();
54+
case AuthMechanism.MONGODB_PLAIN:
55+
return new Plain();
56+
case AuthMechanism.MONGODB_SCRAM_SHA1:
57+
return new ScramSHA1();
58+
case AuthMechanism.MONGODB_SCRAM_SHA256:
59+
return new ScramSHA256();
60+
case AuthMechanism.MONGODB_X509:
61+
return new X509();
62+
default:
63+
throw new MongoInvalidArgumentError(`No auth provider found for type ${name}`);
64+
}
65+
}
5466

5567
/** @public */
5668
export type Stream = Socket | TLSSocket;
@@ -108,15 +120,6 @@ export async function performInitialHandshake(
108120
): Promise<void> {
109121
const credentials = options.credentials;
110122

111-
if (credentials) {
112-
if (
113-
!(credentials.mechanism === AuthMechanism.MONGODB_DEFAULT) &&
114-
!AUTH_PROVIDERS.get(credentials.mechanism)
115-
) {
116-
throw new MongoInvalidArgumentError(`AuthMechanism '${credentials.mechanism}' not supported`);
117-
}
118-
}
119-
120123
const authContext = new AuthContext(conn, credentials, options);
121124
conn.authContext = authContext;
122125

@@ -166,7 +169,7 @@ export async function performInitialHandshake(
166169
authContext.response = response;
167170

168171
const resolvedCredentials = credentials.resolveAuthMechanism(response);
169-
const provider = AUTH_PROVIDERS.get(resolvedCredentials.mechanism);
172+
const provider = getAuthProvider(resolvedCredentials.mechanism);
170173
if (!provider) {
171174
throw new MongoInvalidArgumentError(
172175
`No AuthProvider for ${resolvedCredentials.mechanism} defined.`
@@ -232,16 +235,10 @@ export async function prepareHandshakeDocument(
232235
if (credentials.mechanism === AuthMechanism.MONGODB_DEFAULT && credentials.username) {
233236
handshakeDoc.saslSupportedMechs = `${credentials.source}.${credentials.username}`;
234237

235-
const provider = AUTH_PROVIDERS.get(AuthMechanism.MONGODB_SCRAM_SHA256);
236-
if (!provider) {
237-
// This auth mechanism is always present.
238-
throw new MongoInvalidArgumentError(
239-
`No AuthProvider for ${AuthMechanism.MONGODB_SCRAM_SHA256} defined.`
240-
);
241-
}
238+
const provider = getAuthProvider(AuthMechanism.MONGODB_SCRAM_SHA256);
242239
return provider.prepare(handshakeDoc, authContext);
243240
}
244-
const provider = AUTH_PROVIDERS.get(credentials.mechanism);
241+
const provider = getAuthProvider(credentials.mechanism);
245242
if (!provider) {
246243
throw new MongoInvalidArgumentError(`No AuthProvider for ${credentials.mechanism} defined.`);
247244
}

src/cmap/connection_pool.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
import { CancellationToken, TypedEventEmitter } from '../mongo_types';
2929
import type { Server } from '../sdam/server';
3030
import { type Callback, eachAsync, List, makeCounter, TimeoutController } from '../utils';
31-
import { AUTH_PROVIDERS, connect } from './connect';
31+
import { connect, getAuthProvider } from './connect';
3232
import { Connection, type ConnectionEvents, type ConnectionOptions } from './connection';
3333
import {
3434
ConnectionCheckedInEvent,
@@ -622,7 +622,8 @@ export class ConnectionPool extends TypedEventEmitter<ConnectionPoolEvents> {
622622
);
623623
}
624624
const resolvedCredentials = credentials.resolveAuthMechanism(connection.hello);
625-
const provider = AUTH_PROVIDERS.get(resolvedCredentials.mechanism);
625+
// TODO: Use existing auth provider.
626+
const provider = getAuthProvider(resolvedCredentials.mechanism);
626627
if (!provider) {
627628
return callback(
628629
new MongoMissingCredentialsError(
@@ -639,7 +640,7 @@ export class ConnectionPool extends TypedEventEmitter<ConnectionPoolEvents> {
639640
callback(undefined, fnResult);
640641
});
641642
},
642-
error => callback(error)
643+
(error: AnyError | undefined) => callback(error)
643644
);
644645
}
645646

0 commit comments

Comments
 (0)