Verify certificate provider medium

Reviewed By: antonk52

Differential Revision: D33917041

fbshipit-source-id: 91a9554397063d53a903a5b1406b46ddf07360b2
This commit is contained in:
Andrey Goncharov
2022-02-02 03:05:34 -08:00
committed by Facebook GitHub Bot
parent c7492a83c7
commit c238cef5b0
6 changed files with 20 additions and 0 deletions

View File

@@ -311,6 +311,8 @@ class ServerController extends EventEmitter implements ServerEventsListener {
} }
} }
certificateProvider.verifyMedium(medium);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
reportPlatformFailures( reportPlatformFailures(
certificateProvider.processCertificateSigningRequest( certificateProvider.processCertificateSigningRequest(

View File

@@ -15,6 +15,9 @@ import {csrFileName, extractAppNameFromCSR} from '../../utils/certificateUtils';
const logTag = 'AndroidCertificateProvider'; const logTag = 'AndroidCertificateProvider';
export default class AndroidCertificateProvider extends CertificateProvider { export default class AndroidCertificateProvider extends CertificateProvider {
name = 'AndroidCertificateProvider';
medium = 'FS_ACCESS' as const;
constructor(private adb: Client) { constructor(private adb: Client) {
super(); super();
} }

View File

@@ -11,6 +11,8 @@ import CertificateProvider from '../../utils/CertificateProvider';
import fs from 'fs-extra'; import fs from 'fs-extra';
export default class DesktopCertificateProvider extends CertificateProvider { export default class DesktopCertificateProvider extends CertificateProvider {
name = 'DesktopCertificateProvider';
medium = 'FS_ACCESS' as const;
async getTargetDeviceId(): Promise<string> { async getTargetDeviceId(): Promise<string> {
// TODO: Could we use some real device serial? Currently, '' corresponds to a local device. // TODO: Could we use some real device serial? Currently, '' corresponds to a local device.
// Whats if some app connects from a remote device? // Whats if some app connects from a remote device?

View File

@@ -19,6 +19,8 @@ const tmpDir = promisify(tmp.dir) as (options?: DirOptions) => Promise<string>;
// eslint-disable-next-line @typescript-eslint/naming-convention // eslint-disable-next-line @typescript-eslint/naming-convention
export default class iOSCertificateProvider extends CertificateProvider { export default class iOSCertificateProvider extends CertificateProvider {
name = 'iOSCertificateProvider';
medium = 'FS_ACCESS' as const;
constructor(private idbConfig: IdbConfig) { constructor(private idbConfig: IdbConfig) {
super(); super();
} }

View File

@@ -11,6 +11,8 @@ import {KeytarManager} from '../utils/keytar';
import CertificateProvider from '../utils/CertificateProvider'; import CertificateProvider from '../utils/CertificateProvider';
export default class WWWCertificateProvider extends CertificateProvider { export default class WWWCertificateProvider extends CertificateProvider {
name = 'WWWCertificateProvider';
medium = 'WWW' as const;
constructor(private keytarManager: KeytarManager) { constructor(private keytarManager: KeytarManager) {
super(); super();
} }

View File

@@ -19,6 +19,15 @@ import {
export type CertificateExchangeMedium = 'FS_ACCESS' | 'WWW' | 'NONE'; export type CertificateExchangeMedium = 'FS_ACCESS' | 'WWW' | 'NONE';
export default abstract class CertificateProvider { export default abstract class CertificateProvider {
abstract medium: CertificateExchangeMedium;
abstract name: string;
verifyMedium(medium: CertificateExchangeMedium) {
if (this.medium !== medium) {
throw new Error(`${this.name} does not support medium ${medium}`);
}
}
async processCertificateSigningRequest( async processCertificateSigningRequest(
unsanitizedCsr: string, unsanitizedCsr: string,
os: string, os: string,