Skip to content
Snippets Groups Projects
Select Git revision
  • f9d5f57f496538ade8117b520adbe27bec404f59
  • master default protected
  • dependabot/npm_and_yarn/nock-14.0.10
  • gh-pages
  • dependabot/npm_and_yarn/react-19.1.1
  • dependabot/npm_and_yarn/react-dom-19.1.1
  • dependabot/github_actions/actions/checkout-5
  • server-2025-08-01-57ada99c
  • server-2025-02-01-6100669a
  • server-2024-11-01-87cba042
  • server-2024-10-01-6875b7c8
  • dependabot/npm_and_yarn/path-to-regexp-8.2.0
  • server-2024-09-01-3d52575c
  • daily-tests-gha2
  • daily-tests-gha
  • server-2023-12-01-92d8fb8e
  • server-2023-11-01-a80c93fd
  • server-2023-10-01-31096085
  • coc-v2
  • server-2023-09-01-8edc3810
  • server-2023-08-01-75858a03
  • server-2025-08-03
  • server-2025-07-01
  • 5.0.2
  • 5.0.1
  • 5.0.0
  • server-2025-06-01
  • server-2025-05-01
  • server-2025-04-03
  • server-2025-03-02
  • server-2025-03-01
  • server-2025-02-02
  • server-2025-01-01
  • server-2024-12-01
  • server-2024-11-02
  • 4.1.0
  • server-2024-09-25
  • server-2024-09-02
  • server-2024-08-01
  • server-2024-07-01
  • 4.0.0
41 results

legacy-request-handler.spec.js

Blame
  • index.ts 3.67 KiB
    import URL from 'url';
    import addrs from 'email-addresses';
    import { RenovateConfig } from '../config/common';
    import { PLATFORM_NOT_FOUND } from '../constants/error-messages';
    import { logger } from '../logger';
    import { setPrivateKey } from '../util/git';
    import * as hostRules from '../util/host-rules';
    import platforms from './api.generated';
    import { Platform } from './common';
    
    export * from './common';
    
    export const getPlatformList = (): string[] => Array.from(platforms.keys());
    export const getPlatforms = (): Map<string, Platform> => platforms;
    
    let _platform: Platform;
    
    const handler: ProxyHandler<Platform> = {
      get(_target: Platform, prop: keyof Platform) {
        if (!_platform) {
          throw new Error(PLATFORM_NOT_FOUND);
        }
        return _platform[prop];
      },
    };
    
    export const platform = new Proxy<Platform>({} as any, handler);
    
    export function setPlatformApi(name: string): void {
      if (!platforms.has(name)) {
        throw new Error(
          `Init: Platform "${name}" not found. Must be one of: ${getPlatformList().join(
            ', '
          )}`
        );
      }
      _platform = platforms.get(name);
    }
    
    interface GitAuthor {
      name?: string;
      address?: string;
    }
    
    export function parseGitAuthor(input: string): GitAuthor | null {
      let result: GitAuthor = null;
      if (!input) {
        return null;
      }
      try {
        result = addrs.parseOneAddress(input);
        if (result) {
          return result;
        }
        if (input.includes('[bot]@')) {
          // invalid github app/bot addresses
          const parsed = addrs.parseOneAddress(
            input.replace('[bot]@', '@')
          ) as addrs.ParsedMailbox;
          if (parsed?.address) {
            result = {
              name: parsed.name || input.replace(/@.*/, ''),
              address: parsed.address.replace('@', '[bot]@'),
            };
            return result;
          }
        }
        if (input.includes('<') && input.includes('>')) {
          // try wrapping the name part in quotations
          result = addrs.parseOneAddress('"' + input.replace(/(\s?<)/, '"$1'));
          if (result) {
            return result;
          }
        }
      } catch (err) /* istanbul ignore next */ {
        logger.error({ err }, 'Unknown error parsing gitAuthor');
      }
      // give up
      return null;
    }
    
    export async function initPlatform(
      config: RenovateConfig
    ): Promise<RenovateConfig> {
      setPrivateKey(config.gitPrivateKey);
      setPlatformApi(config.platform);
      // TODO: types
      const platformInfo = await platform.initPlatform(config);
      const returnConfig: any = { ...config, ...platformInfo };
      let gitAuthor: string;
      if (config && config.gitAuthor) {
        logger.debug(`Using configured gitAuthor (${config.gitAuthor})`);
        gitAuthor = config.gitAuthor;
      } else if (!(platformInfo && platformInfo.gitAuthor)) {
        logger.debug('Using default gitAuthor: Renovate Bot <bot@renovateapp.com>');
        gitAuthor = 'Renovate Bot <bot@renovateapp.com>';
      } /* istanbul ignore next */ else {
        logger.debug('Using platform gitAuthor: ' + platformInfo.gitAuthor);
        gitAuthor = platformInfo.gitAuthor;
      }
      const gitAuthorParsed = parseGitAuthor(gitAuthor);
      // istanbul ignore if
      if (!gitAuthorParsed) {
        throw new Error('Init: gitAuthor is not parsed as valid RFC5322 format');
      }
      global.gitAuthor = {
        name: gitAuthorParsed.name,
        email: gitAuthorParsed.address,
      };
      // TODO: types
      const platformRule: any = {
        hostType: returnConfig.platform,
        hostName: URL.parse(returnConfig.endpoint).hostname,
      };
      ['token', 'username', 'password'].forEach((field) => {
        if (config[field]) {
          platformRule[field] = config[field];
          delete returnConfig[field];
        }
      });
      returnConfig.hostRules = returnConfig.hostRules || [];
      returnConfig.hostRules.push(platformRule);
      hostRules.add(platformRule);
      return returnConfig;
    }