Sign in users via Facebook and sign up new users automatically
[examples/facebook-app] / src / main / java / de / juplo / yourshouter / UserCookieSignInAdapter.java
diff --git a/src/main/java/de/juplo/yourshouter/UserCookieSignInAdapter.java b/src/main/java/de/juplo/yourshouter/UserCookieSignInAdapter.java
new file mode 100644 (file)
index 0000000..ed1a8d5
--- /dev/null
@@ -0,0 +1,66 @@
+package de.juplo.yourshouter;
+
+import javax.servlet.http.HttpServletResponse;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.social.connect.Connection;
+import org.springframework.social.connect.web.SignInAdapter;
+import org.springframework.web.context.request.NativeWebRequest;
+
+
+/**
+ * Simple implementation of {@link SignInAdapter}.
+ *
+ * We configured Spring-Social to call this implementation, to sign in the
+ * user, after he was authenticated by Facebook.
+ *
+ * @author Kai Moritz
+ */
+public class UserCookieSignInAdapter implements SignInAdapter
+{
+  private final static Logger LOG =
+      LoggerFactory.getLogger(UserCookieSignInAdapter.class);
+
+
+  /**
+   * Stores the user in the security-context to sign him in.
+   * Also remembers the user for subsequent calls by storing the ID in the
+   * cookie.
+   *
+   * @param user
+   *     The user-ID. We configured Spring-Social to call
+   *     {@link UserCookieSignInAdapter} to extract a user-ID from the
+   *     connection.
+   * @param connection
+   *     The connection. In our case a connection to Facebook.
+   * @param request
+   *     The actual request. We need it, to store the cookie.
+   * @return
+   *     We return <code>null</code>, to indicate, that the user should be
+   *     redirected to the default-post-sign-in-URL (configured in
+   *     {@link ProviderSinInController}) after a successfull authentication.
+   *
+   * @see {@link UserCookieSignInAdapter}
+   * @see {@link ProviderSignInController#postSignInUrl}
+   */
+  @Override
+  public String signIn(
+      String user,
+      Connection<?> connection,
+      NativeWebRequest request
+      )
+  {
+    LOG.info(
+        "signing in user {} (connected via {})",
+        user,
+        connection.getKey().getProviderId()
+        );
+    SecurityContext.setCurrentUser(user);
+    UserCookieGenerator
+        .INSTANCE
+        .addCookie(user, request.getNativeResponse(HttpServletResponse.class));
+
+    // We return null to trigger a redirect to "/".
+    return null;
+  }
+}