CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
mongo_client_auth_providers.ts96 linesDownload Raw Back to src
1import { type AuthProvider } from './cmap/auth/auth_provider';2import { GSSAPI } from './cmap/auth/gssapi';3import { type AuthMechanismProperties } from './cmap/auth/mongo_credentials';4import { MongoDBAWS } from './cmap/auth/mongodb_aws';5import { MongoDBOIDC, OIDC_WORKFLOWS, type Workflow } from './cmap/auth/mongodb_oidc';6import { AutomatedCallbackWorkflow } from './cmap/auth/mongodb_oidc/automated_callback_workflow';7import { HumanCallbackWorkflow } from './cmap/auth/mongodb_oidc/human_callback_workflow';8import { TokenCache } from './cmap/auth/mongodb_oidc/token_cache';9import { Plain } from './cmap/auth/plain';10import { AuthMechanism } from './cmap/auth/providers';11import { ScramSHA1, ScramSHA256 } from './cmap/auth/scram';12import { X509 } from './cmap/auth/x509';13import { MongoInvalidArgumentError } from './error';14 15/** @internal */16const AUTH_PROVIDERS = new Map<17  AuthMechanism | string,18  (authMechanismProperties: AuthMechanismProperties) => AuthProvider19>([20  [21    AuthMechanism.MONGODB_AWS,22    ({ AWS_CREDENTIAL_PROVIDER }) => new MongoDBAWS(AWS_CREDENTIAL_PROVIDER)23  ],24  [25    AuthMechanism.MONGODB_CR,26    () => {27      throw new MongoInvalidArgumentError(28        'MONGODB-CR is no longer a supported auth mechanism in MongoDB 4.0+'29      );30    }31  ],32  [AuthMechanism.MONGODB_GSSAPI, () => new GSSAPI()],33  [AuthMechanism.MONGODB_OIDC, properties => new MongoDBOIDC(getWorkflow(properties))],34  [AuthMechanism.MONGODB_PLAIN, () => new Plain()],35  [AuthMechanism.MONGODB_SCRAM_SHA1, () => new ScramSHA1()],36  [AuthMechanism.MONGODB_SCRAM_SHA256, () => new ScramSHA256()],37  [AuthMechanism.MONGODB_X509, () => new X509()]38]);39 40/**41 * Create a set of providers per client42 * to avoid sharing the provider's cache between different clients.43 * @internal44 */45export class MongoClientAuthProviders {46  private existingProviders: Map<AuthMechanism | string, AuthProvider> = new Map();47 48  /**49   * Get or create an authentication provider based on the provided mechanism.50   * We don't want to create all providers at once, as some providers may not be used.51   * @param name - The name of the provider to get or create.52   * @param credentials - The credentials.53   * @returns The provider.54   * @throws MongoInvalidArgumentError if the mechanism is not supported.55   * @internal56   */57  getOrCreateProvider(58    name: AuthMechanism | string,59    authMechanismProperties: AuthMechanismProperties60  ): AuthProvider {61    const authProvider = this.existingProviders.get(name);62    if (authProvider) {63      return authProvider;64    }65 66    const providerFunction = AUTH_PROVIDERS.get(name);67    if (!providerFunction) {68      throw new MongoInvalidArgumentError(`authMechanism ${name} not supported`);69    }70 71    const provider = providerFunction(authMechanismProperties);72    this.existingProviders.set(name, provider);73    return provider;74  }75}76 77/**78 * Gets either a device workflow or callback workflow.79 */80function getWorkflow(authMechanismProperties: AuthMechanismProperties): Workflow {81  if (authMechanismProperties.OIDC_HUMAN_CALLBACK) {82    return new HumanCallbackWorkflow(new TokenCache(), authMechanismProperties.OIDC_HUMAN_CALLBACK);83  } else if (authMechanismProperties.OIDC_CALLBACK) {84    return new AutomatedCallbackWorkflow(new TokenCache(), authMechanismProperties.OIDC_CALLBACK);85  } else {86    const environment = authMechanismProperties.ENVIRONMENT;87    const workflow = OIDC_WORKFLOWS.get(environment)?.();88    if (!workflow) {89      throw new MongoInvalidArgumentError(90        `Could not load workflow for environment ${authMechanismProperties.ENVIRONMENT}`91      );92    }93    return workflow;94  }95}96