package controllers; import java.util.ArrayList; import java.util.List; import com.restfb.DefaultFacebookClient; import com.restfb.FacebookClient; import com.restfb.exception.FacebookOAuthException; import misc.Pair; import misc.ValidationError; import models.Park; import models.Report; import models.User; import play.data.validation.Required; import play.libs.Crypto; import play.mvc.Controller; public class Application extends Controller { public static void index() { render(); } public static void register() { render("Application/register.html"); } public static void doRegister(String username, String password, String email, String cellphone) { ValidationError error = User.createNormalUser(validation, username, password, email, cellphone); if (error != null) { validation.addError(error.getField(), error.getMessage()); render("Application/register.html"); } forceSecureLogin(username); PrivateWeb.actions(); } public static void doLogin(@Required String username, @Required String password) { if (User.connect(username, password)) { forceSecureLogin(username); PrivateWeb.actions(); } else { validation.addError("password", "Credenciais erradas"); validation.keep(); boolean reload = true; render("Application/index.html", reload); } } public static void facebookLogin(@Required int uid, @Required String fbToken) { com.restfb.types.User fbUser = null; try { FacebookClient facebookClient = new DefaultFacebookClient(fbToken); fbUser = facebookClient.fetchObject("me", com.restfb.types.User.class); } catch (FacebookOAuthException e) { System.out.println("FB error: " + e.getErrorType() + " " + e.getErrorMessage()); // TODO handle error, do not log in the user! } String socialId = fbUser.getId(); String name = fbUser.getName(); String email = fbUser.getEmail(); User.findOrCreateSocialUser(socialId, name, email); forceSecureLogin(name); try { Secure.redirectToOriginalURL(); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void forceSecureLogin(String handle) { session.put("username", handle); response.setCookie("rememberme", Crypto.sign(handle) + "-" + handle, "30d"); } protected static String createReportsJSON(List<Report> reports) { String output = "[ "; for (Report report : reports) { output += "{ \"id\": " + report.id + ", \"latitude\": " + report.latitude + ", \"longitude\":" + report.longitude + ", \"date\": " + report.date + ", \"fade\": " + report.fade + " }, "; } output = output.substring(0, output.length() - 2); output += " ]"; return output; } protected static String createParksJSON(List<Park> parks) { String output = "[ "; for(Park park : parks) { // there should only be one park, so the padding at the end of the string is unnecessary. but for now assume multiple parks output += "{ \"latitude\": " + park.latitude + ", \"longitude\": " + park.longitude + " }, "; } output = output.substring(0, output.length() - 2); output += " ]"; return output; } //name, rank, score, requester? public static String createRanksJSON(ArrayList<Pair<String,Pair<Long,Pair<Long,Boolean>>>> ranks) { System.out.println(ranks.size()); String output = "[ "; for(Pair<String,Pair<Long,Pair<Long,Boolean>>> p : ranks) { output += "{ \"username\": \"" + p.getFirst() + "\"" + ", \"rank\": " + p.getSecond().getFirst() + ", \"score\": " + p.getSecond().getSecond().getFirst() + ", \"requester\": " + p.getSecond().getSecond().getSecond() + " }, "; } output = output.substring(0, output.length() - 2); output += " ]"; return output; } }