package org.openautonomousconnection.webclient; import dev.unlegitdqrk.unlegitlibrary.event.Listener; import org.openautonomousconnection.infonamelib.LibClientImpl; import org.openautonomousconnection.infonamelib.OacWebUrlInstaller; import org.openautonomousconnection.oacswing.component.OACOptionPane; import org.openautonomousconnection.protocol.side.client.ProtocolClient; import org.openautonomousconnection.protocol.side.client.events.ConnectedToProtocolINSServerEvent; import java.awt.*; import java.util.Objects; import java.util.concurrent.atomic.AtomicBoolean; /** * Protocol client implementation for the WebClient. */ public class ClientImpl extends ProtocolClient { private final LibImpl libImpl = new LibImpl(); private final AtomicBoolean connectedInitialized = new AtomicBoolean(false); private final Component dialogParent; private final Runnable onServerReady; public ClientImpl(Component dialogParent, Runnable onServerReady) { this.dialogParent = dialogParent; this.onServerReady = Objects.requireNonNull(onServerReady, "onServerReady"); } @Override public boolean trustINS(String caFingerprint) { Object[] options = {"Continue", "Cancel"}; int result = OACOptionPane.showOptionDialog( dialogParent, "You never connected to this INS before!\n" + "Fingerprint: " + caFingerprint + "\nDo you want to connect?", "INS Connection", OACOptionPane.YES_NO_OPTION, OACOptionPane.INFORMATION_MESSAGE, null, options, options[0] ); return result == 0; } @Override public boolean trustNewINSFingerprint(String oldCAFingerprint, String newCAFingerprint) { Object[] options = {"Continue", "Cancel"}; int result = OACOptionPane.showOptionDialog( dialogParent, "The fingerprint does not match with the saved fingerprint!\n" + "Saved Fingerprint: " + oldCAFingerprint + "\n" + "New Fingerprint: " + newCAFingerprint + "\n" + "Do you want to connect?", "INS Connection", OACOptionPane.YES_NO_OPTION, OACOptionPane.INFORMATION_MESSAGE, null, options, options[0] ); return result == 0; } @Listener public void onConnected(ConnectedToProtocolINSServerEvent event) { try { buildServerConnection(null, getProtocolBridge().getProtocolValues().ssl); OacWebUrlInstaller.installOnce(getProtocolBridge().getProtocolValues().eventManager, this, libImpl); if (connectedInitialized.compareAndSet(false, true)) { onServerReady.run(); } } catch (Exception e) { getProtocolBridge().getLogger().exception("Failed to build Server connection", e); OACOptionPane.showMessageDialog( dialogParent, "Failed to to build Server connection:\n" + e.getMessage(), "Server Connection", OACOptionPane.ERROR_MESSAGE ); } } private class LibImpl extends LibClientImpl { @Override public void serverConnectionFailed(Exception exception) { getProtocolBridge().getLogger().exception("Failed to connect to server", exception); OACOptionPane.showMessageDialog( dialogParent, "Failed to connect to Server:\n" + exception.getMessage(), "Server Connection", OACOptionPane.ERROR_MESSAGE ); } } }