WIP: Added a controller, to manage permissions CAUGHT IN THE ACT
[examples/facebook-app] / src / main / java / de / juplo / yourshouter / PermissionsController.java
index 1ce9c1d..4439717 100644 (file)
@@ -1,7 +1,15 @@
 package de.juplo.yourshouter;
 
+import java.io.PrintWriter;
 import java.util.List;
+import java.util.Map;
+import javax.annotation.PostConstruct;
 import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.social.connect.ConnectionFactoryLocator;
+import org.springframework.social.connect.ConnectionRepository;
+import org.springframework.social.connect.web.ConnectController;
 
 import org.springframework.social.facebook.api.Facebook;
 import org.springframework.social.facebook.api.Permission;
@@ -9,6 +17,9 @@ import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.context.request.NativeWebRequest;
+import org.springframework.web.servlet.View;
+import org.springframework.web.servlet.view.RedirectView;
 
 
 /**
@@ -17,23 +28,83 @@ import org.springframework.web.bind.annotation.RequestMethod;
  * @author Kai Moritz
  */
 @Controller
-public class PermissionsController
+@RequestMapping("/permissions.html")
+public class PermissionsController extends ConnectController
 {
   private final Facebook facebook;
 
 
   @Inject
-  public PermissionsController(Facebook facebook)
+  public PermissionsController(
+      ConnectionFactoryLocator connectionFactoryLocator,
+      ConnectionRepository connectionRepository,
+      Facebook facebook
+      )
   {
+    super(connectionFactoryLocator, connectionRepository);
     this.facebook = facebook;
   }
 
 
-  @RequestMapping(value = "/permissions.html", method = RequestMethod.GET)
-  public String list(Model model)
+  @PostConstruct
+  public void init()
+  {
+    connectSu
+  }
+
+
+  @Override
+  public String connectionStatus(NativeWebRequest request, Model model)
   {
     List<Permission> permissions = facebook.userOperations().getUserPermissions();
     model.addAttribute("permissions", permissions);
     return "permissions";
   }
+
+  @RequestMapping(method=RequestMethod.POST)
+  public View connect(NativeWebRequest request)
+  {
+    final RedirectView redirect = super.connect("facebook", request);
+    return new View()
+    {
+      @Override
+      public String getContentType()
+      {
+        return "text/html";
+      }
+
+      @Override
+      public void render(
+          Map<String, ?> model,
+          HttpServletRequest request,
+          HttpServletResponse response
+          )
+          throws
+            Exception
+      {
+        PrintWriter writer = response.getWriter();
+        writer.write("<script>");
+        writer.write("top.location.href='");
+        writer.write(redirect.getUrl());
+        writer.write("';");
+        writer.write("</script>");
+        response.flushBuffer();
+      }
+
+      @Override
+      public String toString()
+      {
+        return redirect.getUrl();
+      }
+    };
+  }
+
+  @Override
+  protected RedirectView connectionStatusRedirect(
+      String providerId,
+      NativeWebRequest request
+      )
+  {
+    return new RedirectView("https://apps.facebook.com/juplo-spielwiese/", true);
+  }
 }