Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Start api before wallet started #2275

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions api/src/main/java/bisq/api/http/app/HttpApiHeadlessApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import bisq.core.app.BisqHeadlessApp;

import bisq.common.Timer;
import bisq.common.UserThread;
import bisq.common.setup.UncaughtExceptionHandler;

import lombok.extern.slf4j.Slf4j;
Expand All @@ -12,4 +14,52 @@
*/
@Slf4j
class HttpApiHeadlessApp extends BisqHeadlessApp implements UncaughtExceptionHandler {

@Override
protected void setupHandlers() {
super.setupHandlers();

bisqSetup.setRequestWalletPasswordHandler(aesKeyHandler -> {
log.info("onRequestWalletPasswordHandler");

// Add a periodic log so that users get reminded to enter the pw
Timer reminder = UserThread.runPeriodically(() -> {
log.info("Awaiting user's wallet password to be entered via API call");
}, 10);


// TODO @bernard listen for users input of pw, create aseKey and call handler
// aesKeyHandler.accept(aseKey);
// Once pw is entered we stop periodic log
// reminder.stop();


// here is code from UI
/* String password = passwordTextField.getText();
checkArgument(password.length() < 500, Res.get("password.tooLong"));
KeyCrypterScrypt keyCrypterScrypt = walletsManager.getKeyCrypterScrypt();
if (keyCrypterScrypt != null) {
busyAnimation.play();
deriveStatusLabel.setText(Res.get("password.deriveKey"));
ScryptUtil.deriveKeyWithScrypt(keyCrypterScrypt, password, aesKey -> {
if (walletsManager.checkAESKey(aesKey)) {
if (aesKeyHandler != null)
aesKeyHandler.onAesKey(aesKey);

hide();
} else {
busyAnimation.stop();
deriveStatusLabel.setText("");

UserThread.runAfter(() -> new Popup<>()
.warning(Res.get("password.wrongPw"))
.onClose(this::blurAgain).show(), Transitions.DEFAULT_DURATION, TimeUnit.MILLISECONDS);
}
});
} else {
log.error("wallet.getKeyCrypter() is null, that must not happen.");
}
*/
});
}
}
16 changes: 14 additions & 2 deletions api/src/main/java/bisq/api/http/app/HttpApiMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,22 @@ protected AppModule getModule() {
}

@Override
public void onSetupComplete() {
log.info("onSetupComplete");
public void onInitWallet() {
log.info("onInitWallet: We start the http server now");

HttpApiServer httpApiServer = injector.getInstance(HttpApiServer.class);
httpApiServer.startServer();
}

@Override
public void onRequestWalletPassword() {
log.info("onRequestWalletPassword");

// TODO @bernard now we need to get users wallet pw
}

@Override
public void onSetupComplete() {
log.info("onSetupComplete");
}
}
4 changes: 2 additions & 2 deletions core/src/main/java/bisq/core/app/BisqExecutable.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@
import static java.lang.String.format;

@Slf4j
public abstract class BisqExecutable implements GracefulShutDownHandler, BisqSetup.BisqSetupCompleteListener {
public abstract class BisqExecutable implements GracefulShutDownHandler, BisqSetup.BisqSetupListener {

private final String fullName;
private final String scriptName;
Expand Down Expand Up @@ -271,7 +271,7 @@ protected void onApplicationStarted() {

protected void startAppSetup() {
BisqSetup bisqSetup = injector.getInstance(BisqSetup.class);
bisqSetup.addBisqSetupCompleteListener(this);
bisqSetup.addBisqSetupListener(this);
bisqSetup.start();
}

Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/bisq/core/app/BisqHeadlessApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public class BisqHeadlessApp implements HeadlessApp {
@Setter
private GracefulShutDownHandler gracefulShutDownHandler;
private boolean shutDownRequested;
private BisqSetup bisqSetup;
protected BisqSetup bisqSetup;
private CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;
private TradeManager tradeManager;

Expand All @@ -54,7 +54,7 @@ public BisqHeadlessApp() {
public void startApplication() {
try {
bisqSetup = injector.getInstance(BisqSetup.class);
bisqSetup.addBisqSetupCompleteListener(this);
bisqSetup.addBisqSetupListener(this);

corruptedDatabaseFilesHandler = injector.getInstance(CorruptedDatabaseFilesHandler.class);
tradeManager = injector.getInstance(TradeManager.class);
Expand Down
29 changes: 24 additions & 5 deletions core/src/main/java/bisq/core/app/BisqSetup.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,19 @@

@Slf4j
public class BisqSetup {
public interface BisqSetupCompleteListener {
public interface BisqSetupListener {
default void onInitP2pNetwork() {
log.info("onInitP2pNetwork");
}

default void onInitWallet() {
log.info("onInitWallet");
}

default void onRequestWalletPassword() {
log.info("onRequestWalletPassword");
}

void onSetupComplete();
}

Expand Down Expand Up @@ -193,7 +205,7 @@ public interface BisqSetupCompleteListener {
private boolean allBasicServicesInitialized;
@SuppressWarnings("FieldCanBeLocal")
private MonadicBinding<Boolean> p2pNetworkAndWalletInitialized;
private List<BisqSetupCompleteListener> bisqSetupCompleteListeners = new ArrayList<>();
private List<BisqSetupListener> bisqSetupListeners = new ArrayList<>();

@Inject
public BisqSetup(P2PNetworkSetup p2PNetworkSetup,
Expand Down Expand Up @@ -276,8 +288,8 @@ public BisqSetup(P2PNetworkSetup p2PNetworkSetup,
// Setup
///////////////////////////////////////////////////////////////////////////////////////////

public void addBisqSetupCompleteListener(BisqSetupCompleteListener listener) {
bisqSetupCompleteListeners.add(listener);
public void addBisqSetupListener(BisqSetupListener listener) {
bisqSetupListeners.add(listener);
}

public void start() {
Expand All @@ -302,7 +314,7 @@ private void step4() {
private void step5() {
initDomainServices();

bisqSetupCompleteListeners.forEach(BisqSetupCompleteListener::onSetupComplete);
bisqSetupListeners.forEach(BisqSetupListener::onSetupComplete);

// We set that after calling the setupCompleteHandler to not trigger a popup from the dev dummy accounts
// in MainViewModel
Expand Down Expand Up @@ -496,6 +508,7 @@ else if (displayTorNetworkSettingsHandler != null)

}, STARTUP_TIMEOUT_MINUTES, TimeUnit.MINUTES);

bisqSetupListeners.forEach(BisqSetupListener::onInitP2pNetwork);
p2pNetworkReady = p2PNetworkSetup.init(this::initWallet, displayTorNetworkSettingsHandler);

// We only init wallet service here if not using Tor for bitcoinj.
Expand All @@ -522,7 +535,10 @@ else if (displayTorNetworkSettingsHandler != null)
}

private void initWallet() {
bisqSetupListeners.forEach(BisqSetupListener::onInitWallet);
Runnable walletPasswordHandler = () -> {
log.info("Wallet password required");
bisqSetupListeners.forEach(BisqSetupListener::onRequestWalletPassword);
if (p2pNetworkReady.get())
p2PNetworkSetup.setSplashP2PNetworkAnimationVisible(true);

Expand All @@ -533,6 +549,9 @@ private void initWallet() {
if (showFirstPopupIfResyncSPVRequestedHandler != null)
showFirstPopupIfResyncSPVRequestedHandler.run();
} else {
// TODO no guarantee here that the wallet is really fully initialized
// We would need a new walletInitializedButNotEncrypted state to track
// Usually init is fast and we have our wallet initialized at that state though.
walletInitialized.set(true);
}
});
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/java/bisq/core/app/HeadlessApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

import com.google.inject.Injector;

public interface HeadlessApp extends UncaughtExceptionHandler, BisqSetup.BisqSetupCompleteListener {
public interface HeadlessApp extends UncaughtExceptionHandler, BisqSetup.BisqSetupListener {
void setGracefulShutDownHandler(GracefulShutDownHandler gracefulShutDownHandler);

void setInjector(Injector injector);
Expand Down
2 changes: 1 addition & 1 deletion desktop/src/main/java/bisq/desktop/app/BisqAppMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ public static void main(String[] args) throws Exception {

@Override
public void onSetupComplete() {
log.debug("onSetupComplete");
log.info("onSetupComplete");
}


Expand Down
6 changes: 3 additions & 3 deletions desktop/src/main/java/bisq/desktop/main/MainViewModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MainViewModel implements ViewModel, BisqSetup.BisqSetupCompleteListener {
public class MainViewModel implements ViewModel, BisqSetup.BisqSetupListener {
private final BisqSetup bisqSetup;
private final WalletsSetup walletsSetup;
private final User user;
Expand Down Expand Up @@ -171,12 +171,12 @@ public MainViewModel(BisqSetup bisqSetup,
GUIUtil.setFeeService(feeService);

setupHandlers();
bisqSetup.addBisqSetupCompleteListener(this);
bisqSetup.addBisqSetupListener(this);
}


///////////////////////////////////////////////////////////////////////////////////////////
// BisqSetupCompleteListener
// BisqSetupListener
///////////////////////////////////////////////////////////////////////////////////////////

@Override
Expand Down