package launchserver.auth.handler; import launcher.LauncherAPI; import launcher.helper.VerifyHelper; import launcher.serialize.config.entry.BlockConfigEntry; import launchserver.auth.provider.AuthProviderResult; import java.io.IOException; import java.util.Objects; import java.util.UUID; public class DelegateAuthHandler extends AuthHandler { private volatile AuthHandler delegate; DelegateAuthHandler(BlockConfigEntry block) { super(block); } @Override public UUID auth(AuthProviderResult authResult) throws IOException { return getDelegate().auth(authResult); } @Override public UUID checkServer(String username, String serverID) throws IOException { return getDelegate().checkServer(username, serverID); } @Override public void close() throws IOException { AuthHandler delegate = this.delegate; if (delegate != null) { delegate.close(); } } @Override public boolean joinServer(String username, String accessToken, String serverID) throws IOException { return getDelegate().joinServer(username, accessToken, serverID); } @Override public UUID usernameToUUID(String username) throws IOException { return getDelegate().usernameToUUID(username); } @Override public String uuidToUsername(UUID uuid) throws IOException { return getDelegate().uuidToUsername(uuid); } private AuthHandler getDelegate() { return VerifyHelper.verify(delegate, Objects::nonNull, "Delegate auth handler wasn't set"); } @LauncherAPI public void setDelegate(AuthHandler delegate) { this.delegate = delegate; } }