Provide pni registration id in createAccount
This commit is contained in:
parent
ebafc933b9
commit
e20ec013f5
|
@ -196,7 +196,7 @@
|
||||||
"@babel/preset-typescript": "7.17.12",
|
"@babel/preset-typescript": "7.17.12",
|
||||||
"@electron/fuses": "1.5.0",
|
"@electron/fuses": "1.5.0",
|
||||||
"@mixer/parallel-prettier": "2.0.1",
|
"@mixer/parallel-prettier": "2.0.1",
|
||||||
"@signalapp/mock-server": "2.9.1",
|
"@signalapp/mock-server": "2.10.0",
|
||||||
"@storybook/addon-a11y": "6.5.6",
|
"@storybook/addon-a11y": "6.5.6",
|
||||||
"@storybook/addon-actions": "6.5.6",
|
"@storybook/addon-actions": "6.5.6",
|
||||||
"@storybook/addon-controls": "6.5.6",
|
"@storybook/addon-controls": "6.5.6",
|
||||||
|
|
|
@ -520,6 +520,7 @@ export default class AccountManager extends EventTarget {
|
||||||
let password = Bytes.toBase64(getRandomBytes(16));
|
let password = Bytes.toBase64(getRandomBytes(16));
|
||||||
password = password.substring(0, password.length - 2);
|
password = password.substring(0, password.length - 2);
|
||||||
const registrationId = generateRegistrationId();
|
const registrationId = generateRegistrationId();
|
||||||
|
const pniRegistrationId = generateRegistrationId();
|
||||||
|
|
||||||
const previousNumber = storage.user.getNumber();
|
const previousNumber = storage.user.getNumber();
|
||||||
const previousACI = storage.user.getUuid(UUIDKind.ACI)?.toString();
|
const previousACI = storage.user.getUuid(UUIDKind.ACI)?.toString();
|
||||||
|
@ -537,14 +538,15 @@ export default class AccountManager extends EventTarget {
|
||||||
}`
|
}`
|
||||||
);
|
);
|
||||||
|
|
||||||
const response = await this.server.confirmCode(
|
const response = await this.server.confirmCode({
|
||||||
number,
|
number,
|
||||||
verificationCode,
|
code: verificationCode,
|
||||||
password,
|
newPassword: password,
|
||||||
registrationId,
|
registrationId,
|
||||||
encryptedDeviceName,
|
pniRegistrationId,
|
||||||
{ accessKey }
|
deviceName: encryptedDeviceName,
|
||||||
);
|
accessKey,
|
||||||
|
});
|
||||||
|
|
||||||
const ourUuid = UUID.cast(response.uuid);
|
const ourUuid = UUID.cast(response.uuid);
|
||||||
const ourPni = UUID.cast(response.pni);
|
const ourPni = UUID.cast(response.pni);
|
||||||
|
@ -663,9 +665,7 @@ export default class AccountManager extends EventTarget {
|
||||||
const registrationIdMap = {
|
const registrationIdMap = {
|
||||||
...(storage.get('registrationIdMap') || {}),
|
...(storage.get('registrationIdMap') || {}),
|
||||||
[ourUuid]: registrationId,
|
[ourUuid]: registrationId,
|
||||||
|
[ourPni]: pniRegistrationId,
|
||||||
// TODO: DESKTOP-3318
|
|
||||||
[ourPni]: registrationId,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
await storage.put('identityKeyMap', identityKeyMap);
|
await storage.put('identityKeyMap', identityKeyMap);
|
||||||
|
@ -714,20 +714,7 @@ export default class AccountManager extends EventTarget {
|
||||||
[pni.toString()]: identityKeyPair,
|
[pni.toString()]: identityKeyPair,
|
||||||
};
|
};
|
||||||
|
|
||||||
const aci = storage.user.getCheckedUuid(UUIDKind.ACI);
|
await storage.put('identityKeyMap', identityKeyMap);
|
||||||
const oldRegistrationIdMap = storage.get('registrationIdMap') || {};
|
|
||||||
const registrationIdMap = {
|
|
||||||
...oldRegistrationIdMap,
|
|
||||||
|
|
||||||
// TODO: DESKTOP-3318
|
|
||||||
[pni.toString()]: oldRegistrationIdMap[aci.toString()],
|
|
||||||
};
|
|
||||||
|
|
||||||
await Promise.all([
|
|
||||||
storage.put('identityKeyMap', identityKeyMap),
|
|
||||||
storage.put('registrationIdMap', registrationIdMap),
|
|
||||||
]);
|
|
||||||
|
|
||||||
await storage.protocol.hydrateCaches();
|
await storage.protocol.hydrateCaches();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -743,6 +730,33 @@ export default class AccountManager extends EventTarget {
|
||||||
);
|
);
|
||||||
await this.server.registerKeys(keys, UUIDKind.PNI);
|
await this.server.registerKeys(keys, UUIDKind.PNI);
|
||||||
await this.confirmKeys(keys, UUIDKind.PNI);
|
await this.confirmKeys(keys, UUIDKind.PNI);
|
||||||
|
|
||||||
|
const pni = storage.user.getCheckedUuid(UUIDKind.PNI);
|
||||||
|
|
||||||
|
// Repair registration id
|
||||||
|
const deviceId = storage.user.getDeviceId();
|
||||||
|
const { devices } = await this.server.getKeysForIdentifier(
|
||||||
|
pni.toString(),
|
||||||
|
deviceId
|
||||||
|
);
|
||||||
|
const us = devices.find(
|
||||||
|
remoteDevice => remoteDevice.deviceId === deviceId
|
||||||
|
);
|
||||||
|
if (us) {
|
||||||
|
const oldRegistrationIdMap = storage.get('registrationIdMap') || {};
|
||||||
|
const oldRegistrationId = oldRegistrationIdMap[pni.toString()];
|
||||||
|
if (oldRegistrationId !== us.registrationId) {
|
||||||
|
log.warn(
|
||||||
|
'updatePNIIdentity: repairing PNI registration id from ' +
|
||||||
|
`${oldRegistrationId} to ${us.registrationId}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const registrationIdMap = {
|
||||||
|
...oldRegistrationIdMap,
|
||||||
|
[pni.toString()]: us.registrationId,
|
||||||
|
};
|
||||||
|
await storage.put('registrationIdMap', registrationIdMap);
|
||||||
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
log.error(
|
log.error(
|
||||||
'updatePNIIdentity: Failed to upload PNI prekeys. Moving on',
|
'updatePNIIdentity: Failed to upload PNI prekeys. Moving on',
|
||||||
|
|
|
@ -798,17 +798,22 @@ const verifyAciResponse = z
|
||||||
export type VerifyAciRequestType = Array<{ aci: string; fingerprint: string }>;
|
export type VerifyAciRequestType = Array<{ aci: string; fingerprint: string }>;
|
||||||
export type VerifyAciResponseType = z.infer<typeof verifyAciResponse>;
|
export type VerifyAciResponseType = z.infer<typeof verifyAciResponse>;
|
||||||
|
|
||||||
|
export type ConfirmCodeOptionsType = Readonly<{
|
||||||
|
number: string;
|
||||||
|
code: string;
|
||||||
|
newPassword: string;
|
||||||
|
registrationId: number;
|
||||||
|
pniRegistrationId: number;
|
||||||
|
deviceName?: string | null;
|
||||||
|
accessKey?: Uint8Array;
|
||||||
|
}>;
|
||||||
|
|
||||||
export type WebAPIType = {
|
export type WebAPIType = {
|
||||||
startRegistration(): unknown;
|
startRegistration(): unknown;
|
||||||
finishRegistration(baton: unknown): void;
|
finishRegistration(baton: unknown): void;
|
||||||
cdsLookup: (options: CdsLookupOptionsType) => Promise<CDSResponseType>;
|
cdsLookup: (options: CdsLookupOptionsType) => Promise<CDSResponseType>;
|
||||||
confirmCode: (
|
confirmCode: (
|
||||||
number: string,
|
options: ConfirmCodeOptionsType
|
||||||
code: string,
|
|
||||||
newPassword: string,
|
|
||||||
registrationId: number,
|
|
||||||
deviceName?: string | null,
|
|
||||||
options?: { accessKey?: Uint8Array }
|
|
||||||
) => Promise<ConfirmCodeResultType>;
|
) => Promise<ConfirmCodeResultType>;
|
||||||
createGroup: (
|
createGroup: (
|
||||||
group: Proto.IGroup,
|
group: Proto.IGroup,
|
||||||
|
@ -1845,14 +1850,15 @@ export function initialize({
|
||||||
current.resolve();
|
current.resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function confirmCode(
|
async function confirmCode({
|
||||||
number: string,
|
number,
|
||||||
code: string,
|
code,
|
||||||
newPassword: string,
|
newPassword,
|
||||||
registrationId: number,
|
registrationId,
|
||||||
deviceName?: string | null,
|
pniRegistrationId,
|
||||||
options: { accessKey?: Uint8Array } = {}
|
deviceName,
|
||||||
) {
|
accessKey,
|
||||||
|
}: ConfirmCodeOptionsType) {
|
||||||
const capabilities: CapabilitiesUploadType = {
|
const capabilities: CapabilitiesUploadType = {
|
||||||
announcementGroup: true,
|
announcementGroup: true,
|
||||||
giftBadges: true,
|
giftBadges: true,
|
||||||
|
@ -1863,12 +1869,12 @@ export function initialize({
|
||||||
stories: true,
|
stories: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
const { accessKey } = options;
|
|
||||||
const jsonData = {
|
const jsonData = {
|
||||||
capabilities,
|
capabilities,
|
||||||
fetchesMessages: true,
|
fetchesMessages: true,
|
||||||
name: deviceName || undefined,
|
name: deviceName || undefined,
|
||||||
registrationId,
|
registrationId,
|
||||||
|
pniRegistrationId,
|
||||||
supportsSms: false,
|
supportsSms: false,
|
||||||
unidentifiedAccessKey: accessKey
|
unidentifiedAccessKey: accessKey
|
||||||
? Bytes.toBase64(accessKey)
|
? Bytes.toBase64(accessKey)
|
||||||
|
|
|
@ -1975,10 +1975,10 @@
|
||||||
node-gyp-build "^4.2.3"
|
node-gyp-build "^4.2.3"
|
||||||
uuid "^8.3.0"
|
uuid "^8.3.0"
|
||||||
|
|
||||||
"@signalapp/mock-server@2.9.1":
|
"@signalapp/mock-server@2.10.0":
|
||||||
version "2.9.1"
|
version "2.10.0"
|
||||||
resolved "https://registry.yarnpkg.com/@signalapp/mock-server/-/mock-server-2.9.1.tgz#f6cde436d2f6665fbacda425c8b661dedd733831"
|
resolved "https://registry.yarnpkg.com/@signalapp/mock-server/-/mock-server-2.10.0.tgz#a27246e7b912caebc0bef628303e11689bf9b74c"
|
||||||
integrity sha512-KkMnIcBVmZwGLPzsri2PukKioTg50fsthvAmyjG3iDiuQ9KUaTPKpTf0DT/jFXzkQmwUCjs4MKIQqJYjXZWvvw==
|
integrity sha512-kHos3n8lNBhivUecEFG4g1rvYpJ6oPgzKMOsaI+vN8R1R4Pc63WXxrLsxqAI2QmAngD+nmOgbjwAvKyH4MN0+w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@signalapp/libsignal-client" "^0.20.0"
|
"@signalapp/libsignal-client" "^0.20.0"
|
||||||
debug "^4.3.2"
|
debug "^4.3.2"
|
||||||
|
|
Loading…
Reference in New Issue