diff --git a/gulpfile.js b/gulpfile.js index 870e99a2..8d6b0610 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -98,8 +98,9 @@ gulp.task('serve', function() { middleware : function() { var rest = '^/rest/(.*)$ http://localhost:8083/rest/$1 [P]'; var next = '^/next(.*)$ http://localhost:8083/next$1 [P]'; - var logout = '^/logout(.*)$ http://localhost:8083/logout$1 [P]'; - return [modRewrite([rest, next, logout])]; + var logout = '^/logout$ http://localhost:8083/logout [P]'; + var custom_css = '^/custom_css.css$ http://localhost:8083/custom_css.css [P]'; + return [modRewrite([rest, next, logout, custom_css])]; } }); }); diff --git a/src/main/app/index.html b/src/main/app/index.html index 45edb9ce..513a8a23 100644 --- a/src/main/app/index.html +++ b/src/main/app/index.html @@ -31,6 +31,7 @@ +
diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java index dbd569bc..5c852ab5 100644 --- a/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/CommaFeedApplication.java @@ -76,6 +76,7 @@ import com.commafeed.frontend.resource.FeedREST; import com.commafeed.frontend.resource.PubSubHubbubCallbackREST; import com.commafeed.frontend.resource.ServerREST; import com.commafeed.frontend.resource.UserREST; +import com.commafeed.frontend.servlet.CustomCssServlet; import com.commafeed.frontend.servlet.LogoutServlet; import com.commafeed.frontend.servlet.NextUnreadServlet; @@ -194,8 +195,10 @@ public class CommaFeedApplication extends Application { NextUnreadServlet nextUnreadServlet = new NextUnreadServlet(sessionFactory, feedSubscriptionDAO, feedEntryStatusDAO, feedCategoryDAO, config); LogoutServlet logoutServlet = new LogoutServlet(config); + CustomCssServlet customCssServlet = new CustomCssServlet(sessionFactory, userSettingsDAO, config); environment.servlets().addServlet("next", nextUnreadServlet).addMapping("/next"); environment.servlets().addServlet("logout", logoutServlet).addMapping("/logout"); + environment.servlets().addServlet("customCss", customCssServlet).addMapping("/custom_css.css"); // Tasks SchedulingService schedulingService = new SchedulingService(); diff --git a/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java b/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java index ac484dd8..0500f1bf 100644 --- a/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java +++ b/src/main/java/com/commafeed/backend/dao/UserSettingsDAO.java @@ -1,18 +1,20 @@ package com.commafeed.backend.dao; import org.hibernate.SessionFactory; -import org.hibernate.criterion.Restrictions; +import com.commafeed.backend.model.QUserSettings; import com.commafeed.backend.model.User; import com.commafeed.backend.model.UserSettings; public class UserSettingsDAO extends GenericDAO { + private QUserSettings settings = QUserSettings.userSettings; + public UserSettingsDAO(SessionFactory sessionFactory) { super(sessionFactory); } public UserSettings findByUser(User user) { - return uniqueResult(criteria().add(Restrictions.eq("user", user))); + return newQuery().from(settings).where(settings.user.eq(user)).uniqueResult(settings); } } diff --git a/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java b/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java new file mode 100644 index 00000000..afdf1b4b --- /dev/null +++ b/src/main/java/com/commafeed/frontend/servlet/CustomCssServlet.java @@ -0,0 +1,47 @@ +package com.commafeed.frontend.servlet; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import lombok.RequiredArgsConstructor; + +import org.hibernate.SessionFactory; + +import com.commafeed.CommaFeedApplication; +import com.commafeed.CommaFeedConfiguration; +import com.commafeed.backend.dao.UnitOfWork; +import com.commafeed.backend.dao.UserSettingsDAO; +import com.commafeed.backend.model.User; +import com.commafeed.backend.model.UserSettings; + +@SuppressWarnings("serial") +@RequiredArgsConstructor +public class CustomCssServlet extends HttpServlet { + + private final SessionFactory sessionFactory; + private final UserSettingsDAO userSettingsDAO; + private final CommaFeedConfiguration config; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + final User user = (User) req.getSession().getAttribute(CommaFeedApplication.SESSION_USER); + if (user == null) { + resp.sendRedirect(resp.encodeRedirectURL(config.getApplicationSettings().getPublicUrl())); + return; + } + + UserSettings settings = new UnitOfWork(sessionFactory) { + @Override + protected UserSettings runInSession() { + return userSettingsDAO.findByUser(user); + } + }.run(); + + resp.setContentType("text/css"); + resp.getWriter().write(settings.getCustomCss()); + } +}