diff --git a/java/src/org/voelk/holidays/web/GaeAuthenticator.java b/java/src/org/voelk/holidays/web/GaeAuthenticator.java new file mode 100644 index 0000000..8235732 --- /dev/null +++ b/java/src/org/voelk/holidays/web/GaeAuthenticator.java @@ -0,0 +1,24 @@ +package org.voelk.holidays.web; + +import com.google.appengine.api.users.*; +import org.restlet.*; +import org.restlet.data.*; +import org.restlet.security.*; + +public class GaeAuthenticator extends ChallengeAuthenticator { + public GaeAuthenticator(Context context, ChallengeScheme challengeScheme, String realm) { + super(context, challengeScheme, realm); + } + + @Override + protected boolean authenticate(Request request, Response response) { + if (!UserServiceFactory.getUserService().isUserLoggedIn()) { + String path = request.getOriginalRef().getPath(); + String loginURL = UserServiceFactory.getUserService().createLoginURL(path); + response.redirectTemporary(loginURL); + return false; + } else { + return true; + } + } +} diff --git a/java/src/org/voelk/holidays/web/HolidayApplication.java b/java/src/org/voelk/holidays/web/HolidayApplication.java index 4774d6d..cd90d97 100644 --- a/java/src/org/voelk/holidays/web/HolidayApplication.java +++ b/java/src/org/voelk/holidays/web/HolidayApplication.java @@ -1,13 +1,16 @@ package org.voelk.holidays.web; +import freemarker.template.*; import org.restlet.*; import org.restlet.data.*; -import org.restlet.resource.*; +import org.restlet.ext.freemarker.*; import org.restlet.routing.*; +import org.voelk.holidays.web.pages.*; +import org.voelk.holidays.web.webservices.*; -import java.util.*; +public class HolidayApplication extends Application { -public abstract class HolidayApplication extends Application { + private Configuration configuration; public HolidayApplication() { getConnectorService().getClientProtocols().add(Protocol.WAR); @@ -16,12 +19,22 @@ public HolidayApplication() { @Override public Restlet createInboundRoot() { + configuration = new Configuration(); + configuration.setTemplateLoader(new ContextTemplateLoader(getContext(), + "war:///WEB-INF/templates/pages")); + configuration.setDefaultEncoding("UTF-8"); Router router = new Router(getContext()); - for (Map.Entry> entry : getRoutes().entrySet()) { - router.attach(entry.getKey(), entry.getValue()); - } + router.attach("/public/calculate/neededDays", HolidayCalculatorWebserviceResource.class); + router.attach("/public/calculator", CalculatorPageResource.class); + Router secureRouter = new Router(getContext()); + secureRouter.attach("/calculator", CalculatorPageResource.class); + GaeAuthenticator authenticator = new GaeAuthenticator(getContext(), ChallengeScheme.CUSTOM, "System Authentication - Provide your credentials"); + authenticator.setNext(secureRouter); + router.attach("/private", authenticator, org.restlet.routing.Template.MODE_STARTS_WITH); return router; } - protected abstract Map> getRoutes(); + public Configuration getConfiguration() { + return configuration; + } } \ No newline at end of file diff --git a/java/src/org/voelk/holidays/web/HolidayPagesApplication.java b/java/src/org/voelk/holidays/web/HolidayPagesApplication.java deleted file mode 100644 index 0e75f45..0000000 --- a/java/src/org/voelk/holidays/web/HolidayPagesApplication.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.voelk.holidays.web; - -import freemarker.template.*; -import org.restlet.*; -import org.restlet.ext.freemarker.*; -import org.restlet.resource.*; -import org.voelk.holidays.web.pages.*; - -import java.util.*; - -public class HolidayPagesApplication extends HolidayApplication { - - private Configuration configuration; - - @Override - public Restlet createInboundRoot() { - configuration = new Configuration(); - configuration.setTemplateLoader(new ContextTemplateLoader(getContext(), - "war:///WEB-INF/templates/pages")); - configuration.setDefaultEncoding("UTF-8"); - return super.createInboundRoot(); - } - - @Override - protected Map> getRoutes() { - Map> ret = new HashMap>(); - ret.put("/public/calculator", CalculatorPageResource.class); - return ret; - } - - public Configuration getConfiguration() { - return configuration; - } -} \ No newline at end of file diff --git a/java/src/org/voelk/holidays/web/HolidayWebservicesApplication.java b/java/src/org/voelk/holidays/web/HolidayWebservicesApplication.java deleted file mode 100644 index a5f1e02..0000000 --- a/java/src/org/voelk/holidays/web/HolidayWebservicesApplication.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.voelk.holidays.web; - -import org.restlet.resource.*; -import org.voelk.holidays.web.webservices.*; - -import java.util.*; - -public class HolidayWebservicesApplication extends HolidayApplication { - - @Override - protected Map> getRoutes() { - Map> ret = new HashMap>(); - ret.put("/public/calculate/neededDays", HolidayCalculatorWebserviceResource.class); - return ret; - } -} \ No newline at end of file diff --git a/java/src/org/voelk/holidays/web/pages/PageResource.java b/java/src/org/voelk/holidays/web/pages/PageResource.java index c9ef8b5..c52dad4 100644 --- a/java/src/org/voelk/holidays/web/pages/PageResource.java +++ b/java/src/org/voelk/holidays/web/pages/PageResource.java @@ -10,8 +10,8 @@ public abstract class PageResource extends ServerResource { @Override - public HolidayPagesApplication getApplication() { - return (HolidayPagesApplication) super.getApplication(); + public HolidayApplication getApplication() { + return (HolidayApplication) super.getApplication(); } @Get @@ -19,6 +19,14 @@ public Representation toHtml() { return toRepresentation(); } + protected Map createPageData() { + Map ret = getPageData(); +// String s1 = getRequest().getRootRef().getPath(); +// String s2 = getRequest().getRootRef().toString(); +// ret.put("pageContext", s1); + return ret; + } + protected MediaType getMediaType() { return MediaType.TEXT_HTML; } @@ -28,6 +36,6 @@ protected MediaType getMediaType() { protected abstract Map getPageData(); protected Representation toRepresentation() { - return new TemplateRepresentation(getTemplatePath(), getApplication().getConfiguration(), getPageData(), getMediaType()); + return new TemplateRepresentation(getTemplatePath(), getApplication().getConfiguration(), createPageData(), getMediaType()); } } diff --git a/web/WEB-INF/templates/pages/basePage.ftl b/web/WEB-INF/templates/pages/basePage.ftl index 4890fb3..6af57da 100644 --- a/web/WEB-INF/templates/pages/basePage.ftl +++ b/web/WEB-INF/templates/pages/basePage.ftl @@ -11,13 +11,13 @@ - + - + - + -
+ +

Urlaubsplanung

diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml index 923f96a..035e490 100644 --- a/web/WEB-INF/web.xml +++ b/web/WEB-INF/web.xml @@ -4,33 +4,21 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> - - HolidayWebservices - org.restlet.ext.servlet.ServerServlet - - org.restlet.application - org.voelk.holidays.web.HolidayWebservicesApplication - - - - HolidayWebservices - /rest/* - HolidayPages org.restlet.ext.servlet.ServerServlet org.restlet.application - org.voelk.holidays.web.HolidayPagesApplication + org.voelk.holidays.web.HolidayApplication HolidayPages - /pages/* + /app/* - - pages/public/calculator - + + + diff --git a/web/index.html b/web/index.html index 2396dc3..931c0b2 100644 --- a/web/index.html +++ b/web/index.html @@ -5,5 +5,7 @@ Holiday Planner +Public +Private \ No newline at end of file