private void doInserts(final boolean useBulkWriteOperations) { getMorphia().setUseBulkWriteOperations(useBulkWriteOperations); final DBCollection collection = getDs().getCollection(FacebookUser.class); collection.remove(new BasicDBObject()); final int count = 250000; List<FacebookUser> list = new ArrayList<FacebookUser>(count); for (int i = 0; i < count; i++) { list.add(new FacebookUser(i, "User " + i)); } getAds().insert(list, WriteConcern.UNACKNOWLEDGED); Awaitility.await() .atMost(30, TimeUnit.SECONDS) .until( new Callable<Boolean>() { @Override public Boolean call() throws Exception { return collection.count() == count; } }); assertEquals(count, collection.count()); for (FacebookUser user : list) { Assert.assertNotNull(user.getId()); } }
public FacebookUser getFacebookUser(FacebookToken token) throws IOException, JSONException { String authURL = getGraphAccessURL(token.getAccessToken()); URL url = new URL(authURL); String response = this.getResponseFor(url); FacebookUser facebookUser = new FacebookUser(); facebookUser.load(response); return facebookUser; }
@Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { Assert.isInstanceOf( FacebookAuthenticationToken.class, authentication, "Only FacebookAuthenticationProvider is supported"); Collection<GrantedAuthority> authorities = generateAuthorities(); FacebookUser facebookUser = facebookService.findUser(); FacebookAuthenticationToken token = new FacebookAuthenticationToken(facebookUser.getName(), null, authorities); token.setDetails(facebookUser); return token; }
// https://developers.facebook.com/docs/howtos/login/server-side-login/#step1 @Override public boolean preHandle(final HttpServletRequest req, final HttpServletResponse res) throws Exception { final String code = getParamOrCookieValue(req, "code", "fb_code"); if (Strings.isNullOrEmpty(code)) { redirectToLoginDialog(res); return false; } final String sessionState = getParamOrCookieValue(req, "state", "fb_sessionState"); if (Strings.isNullOrEmpty(sessionState)) { return false; } if (req.getParameter("signout") != null) { this.client.logout(); deleteSessionCookies(res); res.sendRedirect(this.fbRedirectAfterLogout); return false; } String accessToken = readAccessToken(code); if (Strings.isNullOrEmpty(accessToken)) { redirectToLoginDialog(res); return false; } final String basicUserInfo = getBasicUserInfo(accessToken); LOG.info(basicUserInfo); final FacebookUser fbUser = deserializeFacebookUser(basicUserInfo); final String userName = fbUser.getId(); final boolean userExists = doesUserExist(userName); if (userExists) { setAuthenticationCookies(res, code, sessionState, userName); res.sendRedirect(this.fbRedirectAfterLogin); return false; } // TODO: Remove "#1:" since it's probably in default userstore this.client.impersonate("#1:esocial"); final CreateUserParams createUserParams = new CreateUserParams(); UserInfo userInfo = new UserInfo(); createUserParams.username = fbUser.getId(); createUserParams.displayName = fbUser.getName(); createUserParams.password = createPasswordHash(fbUser); createUserParams.userstore = "facebook"; createUserParams.email = fbUser.getUserName() + "@facebook.com"; userInfo.setFirstName(fbUser.getFirstName()); userInfo.setLastName(fbUser.getLastName()); userInfo.setNickName(fbUser.getUserName()); userInfo.setPersonalId(fbUser.getId()); createUserParams.userInfo = userInfo; this.client.createUser(createUserParams); final JoinGroupsParams joinGroupsParams = new JoinGroupsParams(); // joinGroupsParams.group = "#2:Facebook"; joinGroupsParams.groupsToJoin = new String[] {"#2:Facebook"}; joinGroupsParams.user = "******" + userName; this.client.joinGroups(joinGroupsParams); setAuthenticationCookies(res, code, sessionState, userName); res.sendRedirect(this.fbRedirectAfterLogin); return false; }
private String createPasswordHash(final FacebookUser user) { final String id = user.getId(); return Hashing.sha256().hashString(id).toString(); }