package launchserver.auth.provider; import java.io.IOException; import java.util.Objects; import launcher.LauncherAPI; import launcher.helper.VerifyHelper; import launcher.serialize.config.entry.BlockConfigEntry; public class DelegateAuthProvider extends AuthProvider { private volatile AuthProvider delegate; public DelegateAuthProvider(BlockConfigEntry block) { super(block); } @Override public AuthProviderResult auth(String login, String password, String ip) throws Throwable { return getDelegate().auth(login, password, ip); } @Override public void close() throws IOException { AuthProvider delegate = this.delegate; if (delegate != null) { delegate.close(); } } @LauncherAPI public void setDelegate(AuthProvider delegate) { this.delegate = delegate; } private AuthProvider getDelegate() { return VerifyHelper.verify(delegate, Objects::nonNull, "Delegate auth provider wasn't set"); } }