1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-23 17:02:25 +03:00

Add new enum for verification methods. (#4129)

* Define constants for the verification methods.

* Remove some confusing references to the *old* `VerificationMethod`
This commit is contained in:
Richard van der Hoff
2024-03-22 17:17:31 +00:00
committed by GitHub
parent d1259b241c
commit d5a35f8a99
6 changed files with 55 additions and 19 deletions

View File

@@ -83,7 +83,6 @@ import {
ICryptoCallbacks, ICryptoCallbacks,
IRoomKeyRequestBody, IRoomKeyRequestBody,
isCryptoAvailable, isCryptoAvailable,
VerificationMethod,
} from "./crypto"; } from "./crypto";
import { DeviceInfo } from "./crypto/deviceinfo"; import { DeviceInfo } from "./crypto/deviceinfo";
import { decodeRecoveryKey } from "./crypto/recoverykey"; import { decodeRecoveryKey } from "./crypto/recoverykey";
@@ -378,8 +377,10 @@ export interface ICreateClientOpts {
* Verification methods we should offer to the other side when performing an interactive verification. * Verification methods we should offer to the other side when performing an interactive verification.
* If unset, we will offer all known methods. Currently these are: showing a QR code, scanning a QR code, and SAS * If unset, we will offer all known methods. Currently these are: showing a QR code, scanning a QR code, and SAS
* (aka "emojis"). * (aka "emojis").
*
* See {@link types.VerificationMethod} for a set of useful constants for this parameter.
*/ */
verificationMethods?: Array<VerificationMethod>; verificationMethods?: Array<string>;
/** /**
* Whether relaying calls through a TURN server should be forced. Default false. * Whether relaying calls through a TURN server should be forced. Default false.
@@ -1271,7 +1272,7 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
protected ongoingScrollbacks: { [roomId: string]: { promise?: Promise<Room>; errorTs?: number } } = {}; protected ongoingScrollbacks: { [roomId: string]: { promise?: Promise<Room>; errorTs?: number } } = {};
protected notifTimelineSet: EventTimelineSet | null = null; protected notifTimelineSet: EventTimelineSet | null = null;
protected cryptoStore?: CryptoStore; protected cryptoStore?: CryptoStore;
protected verificationMethods?: VerificationMethod[]; protected verificationMethods?: string[];
protected fallbackICEServerAllowed = false; protected fallbackICEServerAllowed = false;
protected syncApi?: SlidingSyncSdk | SyncApi; protected syncApi?: SlidingSyncSdk | SyncApi;
public roomNameGenerator?: ICreateClientOpts["roomNameGenerator"]; public roomNameGenerator?: ICreateClientOpts["roomNameGenerator"];
@@ -2777,11 +2778,7 @@ export class MatrixClient extends TypedEventEmitter<EmittedEvents, ClientEventHa
} }
// deprecated: use requestVerification instead // deprecated: use requestVerification instead
public legacyDeviceVerification( public legacyDeviceVerification(userId: string, deviceId: string, method: string): Promise<VerificationRequest> {
userId: string,
deviceId: string,
method: VerificationMethod,
): Promise<VerificationRequest> {
if (!this.crypto) { if (!this.crypto) {
throw new Error("End-to-end encryption disabled"); throw new Error("End-to-end encryption disabled");
} }

View File

@@ -28,9 +28,10 @@ import { MatrixClient } from "../../client";
import { IVerificationChannel } from "./request/Channel"; import { IVerificationChannel } from "./request/Channel";
import { MatrixEvent } from "../../models/event"; import { MatrixEvent } from "../../models/event";
import { ShowQrCodeCallbacks, VerifierEvent } from "../../crypto-api/verification"; import { ShowQrCodeCallbacks, VerifierEvent } from "../../crypto-api/verification";
import { VerificationMethod } from "../../types";
export const SHOW_QR_CODE_METHOD = "m.qr_code.show.v1"; export const SHOW_QR_CODE_METHOD = VerificationMethod.ShowQrCode;
export const SCAN_QR_CODE_METHOD = "m.qr_code.scan.v1"; export const SCAN_QR_CODE_METHOD = VerificationMethod.ScanQrCode;
/** @deprecated use VerifierEvent */ /** @deprecated use VerifierEvent */
export type QrCodeEvent = VerifierEvent; export type QrCodeEvent = VerifierEvent;

View File

@@ -34,6 +34,7 @@ import { IContent, MatrixEvent } from "../../models/event";
import { generateDecimalSas } from "./SASDecimal"; import { generateDecimalSas } from "./SASDecimal";
import { EventType } from "../../@types/event"; import { EventType } from "../../@types/event";
import { EmojiMapping, GeneratedSas, ShowSasCallbacks, VerifierEvent } from "../../crypto-api/verification"; import { EmojiMapping, GeneratedSas, ShowSasCallbacks, VerifierEvent } from "../../crypto-api/verification";
import { VerificationMethod } from "../../types";
// backwards-compatibility exports // backwards-compatibility exports
export type { export type {
@@ -233,7 +234,7 @@ export class SAS extends Base {
// eslint-disable-next-line @typescript-eslint/naming-convention // eslint-disable-next-line @typescript-eslint/naming-convention
public static get NAME(): string { public static get NAME(): string {
return "m.sas.v1"; return VerificationMethod.Sas;
} }
public get events(): string[] { public get events(): string[] {

View File

@@ -73,8 +73,14 @@ import { ISignatures } from "../@types/signed";
import { encodeBase64 } from "../base64"; import { encodeBase64 } from "../base64";
import { OutgoingRequestsManager } from "./OutgoingRequestsManager"; import { OutgoingRequestsManager } from "./OutgoingRequestsManager";
import { PerSessionKeyBackupDownloader } from "./PerSessionKeyBackupDownloader"; import { PerSessionKeyBackupDownloader } from "./PerSessionKeyBackupDownloader";
import { VerificationMethod } from "../types";
const ALL_VERIFICATION_METHODS = ["m.sas.v1", "m.qr_code.scan.v1", "m.qr_code.show.v1", "m.reciprocate.v1"]; const ALL_VERIFICATION_METHODS = [
VerificationMethod.Sas,
VerificationMethod.ScanQrCode,
VerificationMethod.ShowQrCode,
VerificationMethod.Reciprocate,
];
interface ISignableObject { interface ISignableObject {
signatures?: ISignatures; signatures?: ISignatures;

View File

@@ -35,6 +35,7 @@ import { TypedReEmitter } from "../ReEmitter";
import { MatrixEvent } from "../models/event"; import { MatrixEvent } from "../models/event";
import { EventType, MsgType } from "../@types/event"; import { EventType, MsgType } from "../@types/event";
import { defer, IDeferred } from "../utils"; import { defer, IDeferred } from "../utils";
import { VerificationMethod } from "../types";
/** /**
* An incoming, or outgoing, request to verify a user or a device via cross-signing. * An incoming, or outgoing, request to verify a user or a device via cross-signing.
@@ -230,9 +231,9 @@ export class RustVerificationRequest
const verification: RustSdkCryptoJs.Qr | RustSdkCryptoJs.Sas | undefined = this.inner.getVerification(); const verification: RustSdkCryptoJs.Qr | RustSdkCryptoJs.Sas | undefined = this.inner.getVerification();
if (verification instanceof RustSdkCryptoJs.Sas) { if (verification instanceof RustSdkCryptoJs.Sas) {
return "m.sas.v1"; return VerificationMethod.Sas;
} else if (verification instanceof RustSdkCryptoJs.Qr) { } else if (verification instanceof RustSdkCryptoJs.Qr) {
return "m.reciprocate.v1"; return VerificationMethod.Reciprocate;
} else { } else {
return null; return null;
} }
@@ -336,7 +337,7 @@ export class RustVerificationRequest
* @param method - the name of the verification method to use. * @param method - the name of the verification method to use.
*/ */
public async startVerification(method: string): Promise<Verifier> { public async startVerification(method: string): Promise<Verifier> {
if (method !== "m.sas.v1") { if (method !== VerificationMethod.Sas) {
throw new Error(`Unsupported verification method ${method}`); throw new Error(`Unsupported verification method ${method}`);
} }
@@ -756,10 +757,10 @@ export class RustSASVerifier extends BaseRustVerifer<RustSdkCryptoJs.Sas> implem
/** For each specced verification method, the rust-side `VerificationMethod` corresponding to it */ /** For each specced verification method, the rust-side `VerificationMethod` corresponding to it */
const verificationMethodsByIdentifier: Record<string, RustSdkCryptoJs.VerificationMethod> = { const verificationMethodsByIdentifier: Record<string, RustSdkCryptoJs.VerificationMethod> = {
"m.sas.v1": RustSdkCryptoJs.VerificationMethod.SasV1, [VerificationMethod.Sas]: RustSdkCryptoJs.VerificationMethod.SasV1,
"m.qr_code.scan.v1": RustSdkCryptoJs.VerificationMethod.QrCodeScanV1, [VerificationMethod.ScanQrCode]: RustSdkCryptoJs.VerificationMethod.QrCodeScanV1,
"m.qr_code.show.v1": RustSdkCryptoJs.VerificationMethod.QrCodeShowV1, [VerificationMethod.ShowQrCode]: RustSdkCryptoJs.VerificationMethod.QrCodeShowV1,
"m.reciprocate.v1": RustSdkCryptoJs.VerificationMethod.ReciprocateV1, [VerificationMethod.Reciprocate]: RustSdkCryptoJs.VerificationMethod.ReciprocateV1,
}; };
/** /**

View File

@@ -25,3 +25,33 @@ export type * from "./@types/media";
export * from "./@types/membership"; export * from "./@types/membership";
export type * from "./@types/event"; export type * from "./@types/event";
export type * from "./@types/state_events"; export type * from "./@types/state_events";
/** The different methods for device and user verification */
export enum VerificationMethod {
/** Short authentication string (emoji or decimals).
*
* @see https://spec.matrix.org/v1.9/client-server-api/#short-authentication-string-sas-verification
*/
Sas = "m.sas.v1",
/**
* Verification by showing a QR code which is scanned by the other device.
*
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
*/
ShowQrCode = "m.qr_code.show.v1",
/**
* Verification by scanning a QR code that is shown by the other device.
*
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
*/
ScanQrCode = "m.qr_code.scan.v1",
/**
* Verification by confirming that we have scanned a QR code.
*
* @see https://spec.matrix.org/v1.9/client-server-api/#qr-codes
*/
Reciprocate = "m.reciprocate.v1",
}