private static boolean error(VaadinRequest request, VaadinResponse response, String logMessage) throws IOException { getLogger().log(Level.WARNING, logMessage); response.sendError( HttpServletResponse.SC_NOT_FOUND, request.getPathInfo() + " can not be found"); // Request handled (though not in a nice way) return true; }
@Override public boolean handleRequest( VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException { String pathInfo = request.getPathInfo(); if (pathInfo == null) { return false; } Matcher matcher = pattern.matcher(pathInfo); if (!matcher.matches()) { return false; } String uiid = matcher.group(1); String type = matcher.group(3); String key = matcher.group(2); if (key == null) { return error(request, response, pathInfo + " is not a valid global resource path"); } UI ui = session.getUIById(Integer.parseInt(uiid)); if (ui == null) { return error(request, response, "No UI found for id " + uiid); } UI.setCurrent(ui); ConnectorResource resource; if (LEGACY_TYPE.equals(type)) { resource = legacyResources.get(key); } else { return error( request, response, "Unknown global resource type " + type + " in requested path " + pathInfo); } if (resource == null) { return error(request, response, "Global resource " + key + " not found"); } DownloadStream stream = resource.getStream(); if (stream == null) { return error(request, response, "Resource " + resource + " didn't produce any stream."); } stream.writeResponse(request, response); return true; }
@Override public boolean handleRequest( VaadinSession session, VaadinRequest request, VaadinResponse response) throws IOException { if (data.isCallbackForMe(request)) { String verifier = request.getParameter(data.getVerifierParameterName()); if (verifier != null) { // Got verifier! data.setVerifier(requestToken, new Verifier(verifier)); finish(session, response); Token t = data.getAccessToken(); OAuthRequest r = new OAuthRequest(Verb.GET, data.getRequestLink()); data.signRequest(t, r); Response resp = r.send(); FacebookAnswer answer = new Gson().fromJson(resp.getBody(), FacebookAnswer.class); String name = answer.name; String picUrl = answer.picture.data.url; String oauthId = "facebook" + answer.id; saveUser(oauthId, name, "", picUrl); VaadinSession.getCurrent().removeRequestHandler(this); ((VaadinServletResponse) response) .getHttpServletResponse() .sendRedirect(data.getRedirectUrl()); return true; } // No verifier in the parameters. That's most likely because the user // denied the OAuth. // TODO: current error message reporting (below) is not very useful String error = null; for (String errorName : data.getErrorParameterNames()) { error = request.getParameter(errorName); if (error != null) { break; } } String errorMessage; if (error == null) { errorMessage = "OAuth failed."; } else { errorMessage = "OAuth denied: " + error; } data.setDenied(errorMessage); finish(session, response); } else if (request.getParameter("code") != null) { String code = request.getParameter("code"); Verifier v = new Verifier(code); Token t = googleService.getAccessToken(null, v); OAuthRequest r = new OAuthRequest(Verb.GET, "https://www.googleapis.com/plus/v1/people/me"); googleService.signRequest(t, r); Response resp = r.send(); GooglePlusAnswer answer = new Gson().fromJson(resp.getBody(), GooglePlusAnswer.class); String name = (answer.displayName != null && !answer.displayName.equals("")) ? answer.displayName : answer.emails[0].value.substring(0, answer.emails[0].value.indexOf("@")); String picUrl = answer.image.url; String oauthId = "google" + answer.id; saveUser(oauthId, name, answer.emails[0].value, picUrl); VaadinSession.getCurrent().removeRequestHandler(this); ((VaadinServletResponse) response) .getHttpServletResponse() .sendRedirect(data.getRedirectUrl()); return true; } return false; }