Skip to content

Instantly share code, notes, and snippets.

@arttuladhar
Created December 29, 2012 19:42
Show Gist options
  • Select an option

  • Save arttuladhar/4408913 to your computer and use it in GitHub Desktop.

Select an option

Save arttuladhar/4408913 to your computer and use it in GitHub Desktop.
SignOn features using Google Web Services is easy and efficient way to authenticate users. It's pretty common these days to have authentication via Google UserServices. Google App Engine provides UserServiceFactory api for this purpose. I tried implementing this API within Google Web Toolkit and here's the code snippet for reference. The code is…
package com.aayush.hangman.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Random;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
public class HangMan implements EntryPoint {
final LoginServicesAsync logininfo = GWT.create(LoginServices.class);
public void onModuleLoad() {
// Create Interface
RootPanel hangman_login = RootPanel.get("signon");
createloginScreen(hangman_login);
}
private void createloginScreen(final RootPanel hangman_login) {
logininfo.isLoggenIn(new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
Window.alert("Error : Sorry Cannot Connect to Google Services");
hangman_login.add(new Label("Cannot Connect to Google Services"));
}
@Override
public void onSuccess(Boolean result) {
if (result) {
getEmail();
} else {
getsigninurl();
}
}
private void getsigninurl() {
logininfo.createLoginURL(GWT.getHostPageBaseURL(),new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
Window.alert(result);
String login_url = "<a href=\" " + result + "\">SignIn</a>";
hangman_login.add(new HTML(login_url));
}
@Override
public void onFailure(Throwable caught) {
hangman_login.add(new Label("Cannot Connect to Google Services"));
}
});
}
private void getEmail() {
logininfo.getEmail(new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
String userwelcome = "<h4>Welcome, " + result + "</h4>";
hangman_login.add(new HTML(userwelcome));
// Get SignOut URL
logininfo.createLogoutURL(GWT.getHostPageBaseURL(),
new AsyncCallback<String>() {
@Override
public void onSuccess(String result) {
String logout = "<a href=\"" + result+ "\">LogOff</a><br><br>";
hangman_login.add(new HTML(logout));
}
@Override
public void onFailure(Throwable caught) {
hangman_login.add(new Label("Cannot Connect to Google Services"));
}
});
}
@Override
public void onFailure(Throwable caught) {
Window.alert("Cannot Perform RPC Call");
hangman_login.add(new Label("Cannot Connect to Google Services"));
}
});
}
});
}
package com.aayush.hangman.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("loginservices")
public interface LoginServices extends RemoteService{
String createLoginURL( String callbackURL );
String createLogoutURL ( String callbackURL );
String getEmail();
boolean isLoggenIn();
}
package com.aayush.hangman.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface LoginServicesAsync {
void createLoginURL(String callbackURL, AsyncCallback<String> callback);
void createLogoutURL(String callbackURL, AsyncCallback<String> callback);
void getEmail(AsyncCallback<String> callback);
void isLoggenIn(AsyncCallback<Boolean> callback);
}
package com.aayush.hangman.server;
import com.aayush.hangman.client.LoginServices;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
@SuppressWarnings("serial")
public class LoginServicesImpl extends RemoteServiceServlet implements LoginServices{
final static public UserService userService = UserServiceFactory.getUserService();
@Override
public String createLoginURL(String callbackURL) {
return userService.createLoginURL(callbackURL);
}
@Override
public String createLogoutURL(String callbackURL) {
return userService.createLogoutURL(callbackURL);
}
@Override
public String getEmail() {
return userService.getCurrentUser().getEmail();
}
@Override
public boolean isLoggenIn() {
return userService.isUserLoggedIn();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment