WIP: Added a controller, to manage permissions CAUGHT IN THE ACT
[examples/facebook-app] / src / main / java / de / juplo / yourshouter / PermissionsController.java
1 package de.juplo.yourshouter;
2
3 import java.io.PrintWriter;
4 import java.util.List;
5 import java.util.Map;
6 import javax.annotation.PostConstruct;
7 import javax.inject.Inject;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10 import org.springframework.social.connect.ConnectionFactoryLocator;
11 import org.springframework.social.connect.ConnectionRepository;
12 import org.springframework.social.connect.web.ConnectController;
13
14 import org.springframework.social.facebook.api.Facebook;
15 import org.springframework.social.facebook.api.Permission;
16 import org.springframework.stereotype.Controller;
17 import org.springframework.ui.Model;
18 import org.springframework.web.bind.annotation.RequestMapping;
19 import org.springframework.web.bind.annotation.RequestMethod;
20 import org.springframework.web.context.request.NativeWebRequest;
21 import org.springframework.web.servlet.View;
22 import org.springframework.web.servlet.view.RedirectView;
23
24
25 /**
26  * Controller, that handles requests to the root of the application.
27  *
28  * @author Kai Moritz
29  */
30 @Controller
31 @RequestMapping("/permissions.html")
32 public class PermissionsController extends ConnectController
33 {
34   private final Facebook facebook;
35
36
37   @Inject
38   public PermissionsController(
39       ConnectionFactoryLocator connectionFactoryLocator,
40       ConnectionRepository connectionRepository,
41       Facebook facebook
42       )
43   {
44     super(connectionFactoryLocator, connectionRepository);
45     this.facebook = facebook;
46   }
47
48
49   @PostConstruct
50   public void init()
51   {
52     connectSu
53   }
54
55
56   @Override
57   public String connectionStatus(NativeWebRequest request, Model model)
58   {
59     List<Permission> permissions = facebook.userOperations().getUserPermissions();
60     model.addAttribute("permissions", permissions);
61     return "permissions";
62   }
63
64   @RequestMapping(method=RequestMethod.POST)
65   public View connect(NativeWebRequest request)
66   {
67     final RedirectView redirect = super.connect("facebook", request);
68     return new View()
69     {
70       @Override
71       public String getContentType()
72       {
73         return "text/html";
74       }
75
76       @Override
77       public void render(
78           Map<String, ?> model,
79           HttpServletRequest request,
80           HttpServletResponse response
81           )
82           throws
83             Exception
84       {
85         PrintWriter writer = response.getWriter();
86         writer.write("<script>");
87         writer.write("top.location.href='");
88         writer.write(redirect.getUrl());
89         writer.write("';");
90         writer.write("</script>");
91         response.flushBuffer();
92       }
93
94       @Override
95       public String toString()
96       {
97         return redirect.getUrl();
98       }
99     };
100   }
101
102   @Override
103   protected RedirectView connectionStatusRedirect(
104       String providerId,
105       NativeWebRequest request
106       )
107   {
108     return new RedirectView("https://apps.facebook.com/juplo-spielwiese/", true);
109   }
110 }