Skip to content

Commit 3180eba

Browse files
committed
Exit if account check fails at startup
Fixes #1804
1 parent cb06cbd commit 3180eba

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

lib/src/main/java/org/asamk/signal/manager/SignalAccountFiles.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.asamk.signal.manager.api.AccountCheckException;
44
import org.asamk.signal.manager.api.NotRegisteredException;
5+
import org.asamk.signal.manager.api.Pair;
56
import org.asamk.signal.manager.api.ServiceEnvironment;
67
import org.asamk.signal.manager.config.ServiceConfig;
78
import org.asamk.signal.manager.config.ServiceEnvironmentConfig;
@@ -63,19 +64,28 @@ public Set<String> getAllLocalAccountNumbers() throws IOException {
6364
return accountsStore.getAllNumbers();
6465
}
6566

66-
public MultiAccountManager initMultiAccountManager() throws IOException {
67-
final var managers = accountsStore.getAllAccounts().parallelStream().map(a -> {
67+
public MultiAccountManager initMultiAccountManager() throws IOException, AccountCheckException {
68+
final var managerPairs = accountsStore.getAllAccounts().parallelStream().map(a -> {
6869
try {
69-
return initManager(a.number(), a.path());
70-
} catch (NotRegisteredException | IOException | AccountCheckException e) {
70+
return new Pair<Manager, Throwable>(initManager(a.number(), a.path()), null);
71+
} catch (NotRegisteredException e) {
7172
logger.warn("Ignoring {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
7273
return null;
73-
} catch (Throwable e) {
74+
} catch (AccountCheckException | IOException e) {
7475
logger.error("Failed to load {}: {} ({})", a.number(), e.getMessage(), e.getClass().getSimpleName());
75-
throw e;
76+
return new Pair<Manager, Throwable>(null, e);
7677
}
7778
}).filter(Objects::nonNull).toList();
7879

80+
for (final var pair : managerPairs) {
81+
if (pair.second() instanceof IOException e) {
82+
throw e;
83+
} else if (pair.second() instanceof AccountCheckException e) {
84+
throw e;
85+
}
86+
}
87+
88+
final var managers = managerPairs.stream().map(Pair::first).toList();
7989
return new MultiAccountManagerImpl(managers, this);
8090
}
8191

src/main/java/org/asamk/signal/App.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,8 @@ private void handleMultiLocalCommand(
291291
commandHandler.handleMultiLocalCommand(command, multiAccountManager);
292292
} catch (IOException e) {
293293
throw new IOErrorException("Failed to load local accounts file", e);
294+
} catch (AccountCheckException e) {
295+
throw new UnexpectedErrorException("Failed to load local accounts file", e);
294296
}
295297
}
296298

0 commit comments

Comments
 (0)