/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.oauth; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.inject.Inject; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.callback.AsyncPromiseHelper; import org.eclipse.che.ide.CoreLocalizationConstant; import org.eclipse.che.ide.api.oauth.OAuth2Authenticator; import org.eclipse.che.ide.api.dialogs.CancelCallback; import org.eclipse.che.ide.api.dialogs.ConfirmCallback; import org.eclipse.che.ide.api.dialogs.DialogFactory; import org.eclipse.che.security.oauth.JsOAuthWindow; import org.eclipse.che.security.oauth.OAuthCallback; import org.eclipse.che.security.oauth.OAuthStatus; import javax.validation.constraints.NotNull; /** * Default implementation of authenticator, used when no provider-specific one is present. * * @author Max Shaposhnik */ public class DefaultOAuthAuthenticatorImpl implements OAuth2Authenticator, OAuthCallback { AsyncCallback<OAuthStatus> callback; private final DialogFactory dialogFactory; private final CoreLocalizationConstant localizationConstant; private String authenticationUrl; @Inject public DefaultOAuthAuthenticatorImpl(DialogFactory dialogFactory, CoreLocalizationConstant localizationConstant) { this.dialogFactory = dialogFactory; this.localizationConstant = localizationConstant; } @Override public void authenticate(String authenticationUrl, @NotNull final AsyncCallback<OAuthStatus> callback) { this.authenticationUrl = authenticationUrl; this.callback = callback; showDialog(); } public Promise<OAuthStatus> authenticate(String authenticationUrl) { this.authenticationUrl = authenticationUrl; return AsyncPromiseHelper.createFromAsyncRequest(new AsyncPromiseHelper.RequestCall<OAuthStatus>() { @Override public void makeCall(AsyncCallback<OAuthStatus> callback) { DefaultOAuthAuthenticatorImpl.this.callback = callback; showDialog(); } }); } private void showDialog() { dialogFactory.createConfirmDialog(localizationConstant.authorizationDialogTitle(), localizationConstant.authorizationDialogText(), new ConfirmCallback() { @Override public void accepted() { showAuthWindow(); } }, new CancelCallback() { @Override public void cancelled() { callback.onSuccess(OAuthStatus.NOT_PERFORMED); } }).show(); } @Override public String getProviderName() { return "default"; } @Override public void onAuthenticated(OAuthStatus authStatus) { callback.onSuccess(authStatus); } private void showAuthWindow() { JsOAuthWindow authWindow; authWindow = new JsOAuthWindow(authenticationUrl, "error.url", 500, 980, this); authWindow.loginWithOAuth(); } }