]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/RegistrationManager.java
Retrieve sticker pack before sending if necessary
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / RegistrationManager.java
1 package org.asamk.signal.manager;
2
3 import org.asamk.signal.manager.api.CaptchaRequiredException;
4 import org.asamk.signal.manager.api.IncorrectPinException;
5 import org.asamk.signal.manager.api.PinLockedException;
6 import org.asamk.signal.manager.config.ServiceConfig;
7 import org.asamk.signal.manager.config.ServiceEnvironment;
8 import org.asamk.signal.manager.storage.SignalAccount;
9 import org.asamk.signal.manager.storage.identities.TrustNewIdentity;
10 import org.asamk.signal.manager.util.KeyUtils;
11 import org.whispersystems.libsignal.util.KeyHelper;
12
13 import java.io.Closeable;
14 import java.io.File;
15 import java.io.IOException;
16 import java.util.function.Consumer;
17
18 public interface RegistrationManager extends Closeable {
19
20 static RegistrationManager init(
21 String number, File settingsPath, ServiceEnvironment serviceEnvironment, String userAgent
22 ) throws IOException {
23 return init(number, settingsPath, serviceEnvironment, userAgent, null);
24 }
25
26 static RegistrationManager init(
27 String number,
28 File settingsPath,
29 ServiceEnvironment serviceEnvironment,
30 String userAgent,
31 Consumer<Manager> newManagerListener
32 ) throws IOException {
33 var pathConfig = PathConfig.createDefault(settingsPath);
34
35 final var serviceConfiguration = ServiceConfig.getServiceEnvironmentConfig(serviceEnvironment, userAgent);
36 if (!SignalAccount.userExists(pathConfig.dataPath(), number)) {
37 var identityKey = KeyUtils.generateIdentityKeyPair();
38 var registrationId = KeyHelper.generateRegistrationId(false);
39
40 var profileKey = KeyUtils.createProfileKey();
41 var account = SignalAccount.create(pathConfig.dataPath(),
42 number,
43 identityKey,
44 registrationId,
45 profileKey,
46 TrustNewIdentity.ON_FIRST_USE);
47
48 return new RegistrationManagerImpl(account,
49 pathConfig,
50 serviceConfiguration,
51 userAgent,
52 newManagerListener);
53 }
54
55 var account = SignalAccount.load(pathConfig.dataPath(), number, true, TrustNewIdentity.ON_FIRST_USE);
56
57 return new RegistrationManagerImpl(account, pathConfig, serviceConfiguration, userAgent, newManagerListener);
58 }
59
60 void register(boolean voiceVerification, String captcha) throws IOException, CaptchaRequiredException;
61
62 void verifyAccount(
63 String verificationCode, String pin
64 ) throws IOException, PinLockedException, IncorrectPinException;
65 }