X-Git-Url: http://juplo.de/gitweb/?p=examples%2Ffacebook-app;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fyourshouter%2FSocialConfig.java;fp=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fyourshouter%2FSocialConfig.java;h=53087095376ef0cfa2384cdc5efeeb2b9efed71d;hp=0000000000000000000000000000000000000000;hb=931f5c9b9a43acb81775e995a613bd0c5b8aab52;hpb=e9e1953a23f144b29e29e1308ed056d12bd88fcb
diff --git a/src/main/java/de/juplo/yourshouter/SocialConfig.java b/src/main/java/de/juplo/yourshouter/SocialConfig.java
new file mode 100644
index 0000000..5308709
--- /dev/null
+++ b/src/main/java/de/juplo/yourshouter/SocialConfig.java
@@ -0,0 +1,135 @@
+package de.juplo.yourshouter;
+
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import org.springframework.context.annotation.ScopedProxyMode;
+import org.springframework.social.UserIdSource;
+import org.springframework.core.env.Environment;
+import org.springframework.social.config.annotation.ConnectionFactoryConfigurer;
+import org.springframework.social.config.annotation.EnableSocial;
+import org.springframework.social.config.annotation.SocialConfigurerAdapter;
+import org.springframework.social.connect.Connection;
+import org.springframework.social.connect.ConnectionFactoryLocator;
+import org.springframework.social.connect.ConnectionRepository;
+import org.springframework.social.connect.UsersConnectionRepository;
+import org.springframework.social.connect.mem.InMemoryUsersConnectionRepository;
+import org.springframework.social.connect.web.ConnectController;
+import org.springframework.social.facebook.api.Facebook;
+import org.springframework.social.facebook.connect.FacebookConnectionFactory;
+
+
+/**
+ * Spring Social Configuration.
+ *
+ * @author Kai Moritz
+ */
+@Configuration
+@EnableSocial
+public class SocialConfig extends SocialConfigurerAdapter
+{
+ /**
+ * Add a {@link FacebookConnectionFactory} to the configuration.
+ * The factory is configured through the keys facebook.app.id
+ * and facebook.app.secret
.
+ *
+ * @param config
+ * @param env
+ */
+ @Override
+ public void addConnectionFactories(
+ ConnectionFactoryConfigurer config,
+ Environment env
+ )
+ {
+ config.addConnectionFactory(
+ new FacebookConnectionFactory(
+ env.getProperty("facebook.app.id"),
+ env.getProperty("facebook.app.secret")
+ )
+ );
+ }
+
+ /**
+ * Configure an instance of {@link InMemoryUsersConnection} as persistent
+ * store of user/connection-mappings.
+ *
+ * At the moment, no special configuration is needed.
+ *
+ * @param connectionFactoryLocator
+ * The {@link ConnectionFactoryLocator} will be injected by Spring.
+ * @return
+ * The configured {@link UsersConnectionRepository}.
+ */
+ @Override
+ public UsersConnectionRepository getUsersConnectionRepository(
+ ConnectionFactoryLocator connectionFactoryLocator
+ )
+ {
+ InMemoryUsersConnectionRepository repository =
+ new InMemoryUsersConnectionRepository(connectionFactoryLocator);
+ return repository;
+ }
+
+ /**
+ * Configure a {@link UserIdSource}, that is equivalent to the one, that is
+ * created by Spring-Boot.
+ *
+ * @return
+ * An instance of {@link AnonymousUserIdSource}.
+ *
+ * @see {@link AnonymousUserIdSource}
+ */
+ @Override
+ public UserIdSource getUserIdSource()
+ {
+ return new AnonymousUserIdSource();
+ }
+
+
+ /**
+ * Configuration of the controller, that handles the authorization against
+ * the Facebook-API, to connect a user to Facebook.
+ *
+ * At the moment, no special configuration is needed.
+ *
+ * @param factoryLocator
+ * The {@link ConnectionFactoryLocator} will be injected by Spring.
+ * @param repository
+ * The {@link ConnectionRepository} will be injected by Spring.
+ * @return
+ * The configured controller.
+ */
+ @Bean
+ public ConnectController connectController(
+ ConnectionFactoryLocator factoryLocator,
+ ConnectionRepository repository
+ )
+ {
+ ConnectController controller =
+ new ConnectController(factoryLocator, repository);
+ return controller;
+ }
+
+ /**
+ * Configure a scoped bean named facebook
, that enables
+ * access to the Graph-API in the name of the current user.
+ *
+ * @param repository
+ * The {@link ConnectionRepository} will be injected by Spring.
+ * @return
+ * A {@Connection}, that represents the authorization of the
+ * current user against the Graph-API, or null
, if the
+ * current user is not connected to the API.
+ */
+ @Bean
+ @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES)
+ public Facebook facebook(ConnectionRepository repository)
+ {
+ Connection connection =
+ repository.findPrimaryConnection(Facebook.class);
+ return connection != null ? connection.getApi() : null;
+ }
+}