/* * Copyright 2008 Jeff Dwyer * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.apress.progwt.client.college; import com.apress.progwt.client.college.gui.LoginListener; import com.apress.progwt.client.college.gui.LoginWindow; import com.apress.progwt.client.domain.User; import com.apress.progwt.client.rpc.StdAsyncCallback; import com.google.gwt.user.client.rpc.AsyncCallback; public class LoginService implements LoginListener { private ServiceCache serviceCache; private AsyncCallback<User> callback; public LoginService(ServiceCache serviceCache) { this.serviceCache = serviceCache; } private void doLogin(String secureTargetURL, AsyncCallback<User> callback) { this.callback = callback; LoginWindow lw = new LoginWindow(this, secureTargetURL); lw.center(); } public void loginSuccess() { serviceCache.getCurrentUser(callback); } /** * Callers need to specify a URL that we can use to perform possible * login via forwarding. We can't do OpenID logins with a simple * asynchronous form POST (maybe with Comet?) because the user might * need to go offsite to type in their URL. When they come back from * that, we need to have a URL that will bring us back to the desired * state of the application. * * Of course for Username/Password logins, this URL will not be used, * we'll just do the asyncronous FormPost. * * * @param secureTargetURL * @param callback - * A method that needs a user. We'll supply a user, or * force a login if there is no current user. */ public void getUserOrDoLogin(final String secureTargetURL, final AsyncCallback<User> callback) { this.callback = callback; serviceCache .getCurrentUser(new StdAsyncCallback<User>("Get User") { public void onSuccess(User result) { super.onSuccess(result); if (result == null) { doLogin(secureTargetURL, callback); } else { callback.onSuccess(result); } } public void onFailure(Throwable caught) { super.onFailure(caught); doLogin(secureTargetURL, callback); } }); } }