summaryrefslogtreecommitdiff
path: root/src/com/p4square/grow/frontend
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2016-03-20 17:07:26 -0700
committerJesse Morgan <jesse@jesterpm.net>2016-03-20 17:22:38 -0700
commit55cba1e0f3373fa69d3b9a66f455ad36ab4b82cf (patch)
treebed424a7c2989b8bbd5fb874ae23b9ef674ecd8b /src/com/p4square/grow/frontend
parentcac52cf3a07fb4c032f352ec48b56640b246f04f (diff)
Adding support for Church Community Builder login.
Beginning with this change all of the Church Management System integration logic is moving into implementations of the new IntegrationDriver interface. The desired IntegrationDriver can be selected by setting the integrationDriver config to the appropriate class name. This commit is only moving login support. Progress reporting will move in a later commit.
Diffstat (limited to 'src/com/p4square/grow/frontend')
-rw-r--r--src/com/p4square/grow/frontend/AssessmentResultsPage.java4
-rw-r--r--src/com/p4square/grow/frontend/ChapterCompletePage.java4
-rw-r--r--src/com/p4square/grow/frontend/GrowFrontend.java39
-rw-r--r--src/com/p4square/grow/frontend/IntegrationDriver.java17
-rw-r--r--src/com/p4square/grow/frontend/NewAccountResource.java16
5 files changed, 57 insertions, 23 deletions
diff --git a/src/com/p4square/grow/frontend/AssessmentResultsPage.java b/src/com/p4square/grow/frontend/AssessmentResultsPage.java
index 2035ce8..9b66794 100644
--- a/src/com/p4square/grow/frontend/AssessmentResultsPage.java
+++ b/src/com/p4square/grow/frontend/AssessmentResultsPage.java
@@ -7,6 +7,7 @@ package com.p4square.grow.frontend;
import java.util.Date;
import java.util.Map;
+import com.p4square.f1oauth.FellowshipOneIntegrationDriver;
import freemarker.template.Template;
import org.restlet.data.MediaType;
@@ -117,7 +118,8 @@ public class AssessmentResultsPage extends FreeMarkerPageResource {
attribute.setStartDate(new Date());
attribute.setComment(JsonEncodedProvider.MAPPER.writeValueAsString(results));
- F1API f1 = mGrowFrontend.getF1Access().getAuthenticatedApi(user);
+ F1API f1 = ((FellowshipOneIntegrationDriver) mGrowFrontend.getThirdPartyIntegrationFactory())
+ .getF1Access().getAuthenticatedApi(user);
if (!f1.addAttribute(user.getIdentifier(), attribute)) {
LOG.error("addAttribute failed for " + user.getIdentifier()
+ " with attribute " + attributeName);
diff --git a/src/com/p4square/grow/frontend/ChapterCompletePage.java b/src/com/p4square/grow/frontend/ChapterCompletePage.java
index f07a870..2dd1ecf 100644
--- a/src/com/p4square/grow/frontend/ChapterCompletePage.java
+++ b/src/com/p4square/grow/frontend/ChapterCompletePage.java
@@ -7,6 +7,7 @@ package com.p4square.grow.frontend;
import java.util.Date;
import java.util.Map;
+import com.p4square.f1oauth.FellowshipOneIntegrationDriver;
import freemarker.template.Template;
import org.restlet.data.MediaType;
@@ -172,7 +173,8 @@ public class ChapterCompletePage extends FreeMarkerPageResource {
Attribute attribute = new Attribute(attributeName);
attribute.setStartDate(new Date());
- F1API f1 = mGrowFrontend.getF1Access().getAuthenticatedApi(user);
+ F1API f1 = ((FellowshipOneIntegrationDriver) mGrowFrontend.getThirdPartyIntegrationFactory())
+ .getF1Access().getAuthenticatedApi(user);
if (!f1.addAttribute(user.getIdentifier(), attribute)) {
LOG.error("addAttribute failed for " + user.getIdentifier()
+ " with attribute " + attributeName);
diff --git a/src/com/p4square/grow/frontend/GrowFrontend.java b/src/com/p4square/grow/frontend/GrowFrontend.java
index 1d221cc..b5f62fb 100644
--- a/src/com/p4square/grow/frontend/GrowFrontend.java
+++ b/src/com/p4square/grow/frontend/GrowFrontend.java
@@ -6,15 +6,12 @@ package com.p4square.grow.frontend;
import java.io.File;
import java.io.IOException;
-
-import java.util.Arrays;
-import java.util.UUID;
+import java.lang.reflect.Constructor;
import freemarker.template.Template;
import org.restlet.Application;
import org.restlet.Component;
-import org.restlet.Client;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.data.Protocol;
@@ -32,13 +29,11 @@ import com.p4square.fmfacade.FreeMarkerPageResource;
import com.p4square.grow.config.Config;
-import com.p4square.f1oauth.F1Access;
-import com.p4square.f1oauth.SecondPartyVerifier;
-
import com.p4square.restlet.metrics.MetricRouter;
import com.p4square.session.SessionCheckingAuthenticator;
import com.p4square.session.SessionCreatingAuthenticator;
+import org.restlet.security.Verifier;
/**
* This is the Restlet Application implementing the Grow project front-end.
@@ -54,7 +49,7 @@ public class GrowFrontend extends FMFacade {
private final Config mConfig;
private final MetricRegistry mMetricRegistry;
- private F1Access mHelper;
+ private IntegrationDriver mIntegrationFactory;
public GrowFrontend() {
this(new Config(), new MetricRegistry());
@@ -81,20 +76,26 @@ public class GrowFrontend extends FMFacade {
FreeMarkerPageResource.baseRootObject(getContext(), this));
}
+ getContext().getAttributes().put("com.p4square.grow.config", mConfig);
+ getContext().getAttributes().put("com.p4square.grow.metrics", mMetricRegistry);
+
super.start();
}
- synchronized F1Access getF1Access() {
- if (mHelper == null) {
- mHelper = new F1Access(getContext(), mConfig.getString("f1ConsumerKey", ""),
- mConfig.getString("f1ConsumerSecret", ""),
- mConfig.getString("f1BaseUrl", "staging.fellowshiponeapi.com"),
- mConfig.getString("f1ChurchCode", "pfseawa"),
- F1Access.UserType.WEBLINK);
- mHelper.setMetricRegistry(mMetricRegistry);
+ public synchronized IntegrationDriver getThirdPartyIntegrationFactory() {
+ if (mIntegrationFactory == null) {
+ final String driverClassName = getConfig().getString("integrationDriver",
+ "com.p4square.f1oauth.FellowshipOneIntegrationDriver");
+ try {
+ Class<?> clazz = Class.forName(driverClassName);
+ Constructor<?> constructor = clazz.getConstructor(Context.class);
+ mIntegrationFactory = (IntegrationDriver) constructor.newInstance(getContext());
+ } catch (Exception e) {
+ LOG.error("Failed to instantiate IntegrationDriver " + driverClassName);
+ }
}
- return mHelper;
+ return mIntegrationFactory;
}
@Override
@@ -141,8 +142,8 @@ public class GrowFrontend extends FMFacade {
SessionCheckingAuthenticator sessionChk = new SessionCheckingAuthenticator(context, true);
// This is used to authenticate the user
- SecondPartyVerifier f1Verifier = new SecondPartyVerifier(context, getF1Access());
- LoginFormAuthenticator loginAuth = new LoginFormAuthenticator(context, false, f1Verifier);
+ Verifier verifier = getThirdPartyIntegrationFactory().newUserAuthenticationVerifier();
+ LoginFormAuthenticator loginAuth = new LoginFormAuthenticator(context, false, verifier);
loginAuth.setLoginFormUrl(loginPage);
loginAuth.setLoginPostUrl(loginPost);
loginAuth.setDefaultPage(defaultPage);
diff --git a/src/com/p4square/grow/frontend/IntegrationDriver.java b/src/com/p4square/grow/frontend/IntegrationDriver.java
new file mode 100644
index 0000000..3370116
--- /dev/null
+++ b/src/com/p4square/grow/frontend/IntegrationDriver.java
@@ -0,0 +1,17 @@
+package com.p4square.grow.frontend;
+
+import org.restlet.security.Verifier;
+
+/**
+ * An IntegrationDriver is used to create implementations of various objects
+ * used to integration Grow with a particular Church Management System.
+ */
+public interface IntegrationDriver {
+
+ /**
+ * Create a new Restlet Verifier to authenticate users when they login to the site.
+ *
+ * @return A Verifier.
+ */
+ Verifier newUserAuthenticationVerifier();
+}
diff --git a/src/com/p4square/grow/frontend/NewAccountResource.java b/src/com/p4square/grow/frontend/NewAccountResource.java
index 54c1790..5c13017 100644
--- a/src/com/p4square/grow/frontend/NewAccountResource.java
+++ b/src/com/p4square/grow/frontend/NewAccountResource.java
@@ -6,12 +6,12 @@ package com.p4square.grow.frontend;
import java.util.Map;
+import com.p4square.f1oauth.FellowshipOneIntegrationDriver;
import freemarker.template.Template;
import org.restlet.data.Form;
import org.restlet.data.MediaType;
import org.restlet.data.Status;
-import org.restlet.resource.ServerResource;
import org.restlet.representation.Representation;
import org.restlet.representation.StringRepresentation;
import org.restlet.ext.freemarker.TemplateRepresentation;
@@ -44,7 +44,14 @@ public class NewAccountResource extends FreeMarkerPageResource {
super.doInit();
mGrowFrontend = (GrowFrontend) getApplication();
- mHelper = mGrowFrontend.getF1Access();
+
+ final IntegrationDriver driver = mGrowFrontend.getThirdPartyIntegrationFactory();
+ if (driver instanceof FellowshipOneIntegrationDriver) {
+ mHelper = ((FellowshipOneIntegrationDriver) driver).getF1Access();
+ } else {
+ LOG.error("NewAccountResource only works with F1!");
+ mHelper = null;
+ }
mErrorMessage = "";
@@ -83,6 +90,11 @@ public class NewAccountResource extends FreeMarkerPageResource {
@Override
protected Representation post(Representation rep) {
+ if (mHelper == null) {
+ mErrorMessage += "F1 support is not enabled! ";
+ return get();
+ }
+
Form form = new Form(rep);
String firstname = form.getFirstValue("firstname");