]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/helper/PinHelper.java
Update libsignal-service-java
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / PinHelper.java
1 package org.asamk.signal.manager.helper;
2
3 import org.asamk.signal.manager.api.IncorrectPinException;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6 import org.whispersystems.signalservice.api.kbs.MasterKey;
7 import org.whispersystems.signalservice.api.svr.SecureValueRecovery;
8 import org.whispersystems.signalservice.api.svr.SecureValueRecoveryV2;
9 import org.whispersystems.signalservice.internal.push.AuthCredentials;
10 import org.whispersystems.signalservice.internal.push.LockedException;
11
12 import java.io.IOException;
13
14 public class PinHelper {
15
16 private final static Logger logger = LoggerFactory.getLogger(PinHelper.class);
17
18 private final SecureValueRecoveryV2 secureValueRecoveryV2;
19
20 public PinHelper(final SecureValueRecoveryV2 secureValueRecoveryV2) {
21 this.secureValueRecoveryV2 = secureValueRecoveryV2;
22 }
23
24 public void setRegistrationLockPin(
25 String pin, MasterKey masterKey
26 ) throws IOException {
27 final var backupResponse = secureValueRecoveryV2.setPin(pin, masterKey).execute();
28 if (backupResponse instanceof SecureValueRecovery.BackupResponse.Success) {
29 } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.ServerRejected) {
30 logger.warn("Backup svr2 failed: ServerRejected");
31 } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.EnclaveNotFound) {
32 logger.warn("Backup svr2 failed: EnclaveNotFound");
33 } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.ExposeFailure) {
34 logger.warn("Backup svr2 failed: ExposeFailure");
35 } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.ApplicationError error) {
36 throw new IOException(error.getException());
37 } else if (backupResponse instanceof SecureValueRecovery.BackupResponse.NetworkError error) {
38 throw error.getException();
39 } else {
40 throw new AssertionError("Unexpected response");
41 }
42 }
43
44 public void migrateRegistrationLockPin(String pin, MasterKey masterKey) throws IOException {
45 setRegistrationLockPin(pin, masterKey);
46 }
47
48 public void removeRegistrationLockPin() throws IOException {
49 final var deleteResponse = secureValueRecoveryV2.deleteData();
50 if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.Success) {
51 } else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.ServerRejected) {
52 logger.warn("Delete svr2 failed: ServerRejected");
53 } else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.EnclaveNotFound) {
54 logger.warn("Delete svr2 failed: EnclaveNotFound");
55 } else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.ApplicationError error) {
56 throw new IOException(error.getException());
57 } else if (deleteResponse instanceof SecureValueRecovery.DeleteResponse.NetworkError error) {
58 throw error.getException();
59 } else {
60 throw new AssertionError("Unexpected response");
61 }
62 }
63
64 public SecureValueRecovery.RestoreResponse.Success getRegistrationLockData(
65 String pin, LockedException e
66 ) throws IOException, IncorrectPinException {
67 var svr2Credentials = e.getSvr2Credentials();
68 if (svr2Credentials != null) {
69 return getRegistrationLockData(secureValueRecoveryV2, svr2Credentials, pin);
70 }
71
72 return null;
73 }
74
75 public SecureValueRecovery.RestoreResponse.Success getRegistrationLockData(
76 SecureValueRecovery secureValueRecovery, AuthCredentials authCredentials, String pin
77 ) throws IOException, IncorrectPinException {
78 final var restoreResponse = secureValueRecovery.restoreDataPreRegistration(authCredentials, pin);
79
80 if (restoreResponse instanceof SecureValueRecovery.RestoreResponse.Success s) {
81 return s;
82 } else if (restoreResponse instanceof SecureValueRecovery.RestoreResponse.PinMismatch pinMismatch) {
83 throw new IncorrectPinException(pinMismatch.getTriesRemaining());
84 } else if (restoreResponse instanceof SecureValueRecovery.RestoreResponse.ApplicationError error) {
85 throw new IOException(error.getException());
86 } else if (restoreResponse instanceof SecureValueRecovery.RestoreResponse.NetworkError error) {
87 throw error.getException();
88 } else if (restoreResponse instanceof SecureValueRecovery.RestoreResponse.Missing) {
89 logger.debug("No SVR data stored for the given credentials.");
90 return null;
91 } else {
92 throw new AssertionError("Unexpected response: " + restoreResponse.getClass().getSimpleName());
93 }
94 }
95 }