package controllers;
import java.util.Date;
import org.apache.commons.codec.digest.DigestUtils;
import com.google.gson.JsonObject;
import com.openseedbox.Config;
import com.openseedbox.models.User;
import play.cache.Cache;
import play.libs.WS;
import play.libs.WS.HttpResponse;
public class Auth extends Base {
private static final String GOOGLE_TOKEN_ENDPOINT = "https://accounts.google.com/o/oauth2/tokeninfo";
public static void login() {
renderArgs.put("clientId", Config.getGoogleClientId());
renderTemplate("auth/login.html");
}
public static void logout() {
Cache.delete(getCurrentUserCacheKey());
session.clear();
login();
}
public static void authenticate(String id_token) throws Exception {
HttpResponse googleResponse = WS.url(GOOGLE_TOKEN_ENDPOINT).setParameter("id_token", id_token).getAsync().get();
JsonObject body = googleResponse.getJson().getAsJsonObject();
String emailAddress = body.get("email").getAsString();
User u = User.findByEmailAddress(emailAddress);
if (u == null) {
//create new user
u = new User();
u.setEmailAddress(emailAddress);
// also set displayname, as it's required (fixes /admin/edituser)
u.setDisplayName(emailAddress);
u.setAvatarUrl(String.format("https://www.gravatar.com/avatar/%s",
DigestUtils.md5Hex(u.getEmailAddress())));
u.setLastAccess(new Date());
//if this is the very first user, set them as admin
boolean isFirstUser = User.count() == 0;
u.setAdmin(isFirstUser);
u.save();
// reload user and signin automatically
u = User.findByEmailAddress(emailAddress);
session.put("currentUserId", u.getId());
} else {
//login user
u.setLastAccess(new Date());
u.save();
session.put("currentUserId", u.getId());
}
redirect("/client");
}
}