mirror of
https://github.com/Athou/commafeed.git
synced 2026-11-02 02:14:47 +00:00
WIP
This commit is contained in:
@@ -1,54 +0,0 @@
|
||||
package com.commafeed.frontend.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserDAO;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.model.UserSettings;
|
||||
import com.commafeed.frontend.session.SessionHelper;
|
||||
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
abstract class AbstractCustomCodeServlet extends HttpServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final transient UnitOfWork unitOfWork;
|
||||
private final transient UserDAO userDAO;
|
||||
private final transient UserSettingsDAO userSettingsDAO;
|
||||
|
||||
@Override
|
||||
protected final void doGet(final HttpServletRequest req, HttpServletResponse resp) throws IOException {
|
||||
resp.setContentType(getMimeType());
|
||||
|
||||
SessionHelper sessionHelper = new SessionHelper(req);
|
||||
Optional<Long> userId = sessionHelper.getLoggedInUserId();
|
||||
final Optional<User> user = unitOfWork.call(() -> userId.map(userDAO::findById));
|
||||
if (user.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
UserSettings settings = unitOfWork.call(() -> userSettingsDAO.findByUser(user.get()));
|
||||
if (settings == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
String customCode = getCustomCode(settings);
|
||||
if (customCode == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
resp.getWriter().write(customCode);
|
||||
}
|
||||
|
||||
protected abstract String getMimeType();
|
||||
|
||||
protected abstract String getCustomCode(UserSettings settings);
|
||||
}
|
||||
@@ -1,28 +1,39 @@
|
||||
package com.commafeed.frontend.servlet;
|
||||
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserDAO;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.model.UserSettings;
|
||||
import com.commafeed.security.AuthenticationContext;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
public class CustomCssServlet extends AbstractCustomCodeServlet {
|
||||
@Path("/custom_css.css")
|
||||
@Produces("text/css")
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class CustomCssServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final AuthenticationContext authenticationContext;
|
||||
private final UserSettingsDAO userSettingsDAO;
|
||||
private final UnitOfWork unitOfWork;
|
||||
|
||||
@Inject
|
||||
public CustomCssServlet(UnitOfWork unitOfWork, UserDAO userDAO, UserSettingsDAO userSettingsDAO) {
|
||||
super(unitOfWork, userDAO, userSettingsDAO);
|
||||
}
|
||||
@GET
|
||||
public String get() {
|
||||
User user = authenticationContext.getCurrentUser();
|
||||
if (user == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMimeType() {
|
||||
return "text/css";
|
||||
}
|
||||
UserSettings settings = unitOfWork.call(() -> userSettingsDAO.findByUser(user));
|
||||
if (settings == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getCustomCode(UserSettings settings) {
|
||||
return settings.getCustomCss();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,30 +1,39 @@
|
||||
package com.commafeed.frontend.servlet;
|
||||
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserDAO;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.model.UserSettings;
|
||||
import com.commafeed.security.AuthenticationContext;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Path("/custom_js.js")
|
||||
@Produces("application/javascript")
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class CustomJsServlet extends AbstractCustomCodeServlet {
|
||||
public class CustomJsServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final AuthenticationContext authenticationContext;
|
||||
private final UserSettingsDAO userSettingsDAO;
|
||||
private final UnitOfWork unitOfWork;
|
||||
|
||||
@Inject
|
||||
public CustomJsServlet(UnitOfWork unitOfWork, UserDAO userDAO, UserSettingsDAO userSettingsDAO) {
|
||||
super(unitOfWork, userDAO, userSettingsDAO);
|
||||
}
|
||||
@GET
|
||||
public String get() {
|
||||
User user = authenticationContext.getCurrentUser();
|
||||
if (user == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getMimeType() {
|
||||
return "application/javascript";
|
||||
}
|
||||
UserSettings settings = unitOfWork.call(() -> userSettingsDAO.findByUser(user));
|
||||
if (settings == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getCustomCode(UserSettings settings) {
|
||||
return settings.getCustomJs();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,26 +1,35 @@
|
||||
package com.commafeed.frontend.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.time.Instant;
|
||||
import java.util.Date;
|
||||
|
||||
import org.eclipse.microprofile.config.inject.ConfigProperty;
|
||||
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.annotation.security.PermitAll;
|
||||
import jakarta.inject.Singleton;
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.core.NewCookie;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
||||
@Path("/logout")
|
||||
@PermitAll
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class LogoutServlet extends HttpServlet {
|
||||
public class LogoutServlet {
|
||||
|
||||
@ConfigProperty(name = "quarkus.http.auth.form.cookie-name")
|
||||
String cookieName;
|
||||
|
||||
private final CommaFeedConfiguration config;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
|
||||
req.getSession().invalidate();
|
||||
resp.sendRedirect(resp.encodeRedirectURL(config.getApplicationSettings().getPublicUrl()));
|
||||
@GET
|
||||
public Response get() {
|
||||
NewCookie removeCookie = new NewCookie.Builder(cookieName).maxAge(0).expiry(Date.from(Instant.EPOCH)).path("/").build();
|
||||
return Response.temporaryRedirect(URI.create(config.publicUrl())).cookie(removeCookie).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package com.commafeed.frontend.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@@ -11,86 +10,68 @@ import com.commafeed.backend.dao.FeedCategoryDAO;
|
||||
import com.commafeed.backend.dao.FeedEntryStatusDAO;
|
||||
import com.commafeed.backend.dao.FeedSubscriptionDAO;
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserDAO;
|
||||
import com.commafeed.backend.model.FeedCategory;
|
||||
import com.commafeed.backend.model.FeedEntryStatus;
|
||||
import com.commafeed.backend.model.FeedSubscription;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.model.UserSettings.ReadingOrder;
|
||||
import com.commafeed.backend.service.FeedEntryService;
|
||||
import com.commafeed.backend.service.UserService;
|
||||
import com.commafeed.frontend.resource.CategoryREST;
|
||||
import com.commafeed.frontend.session.SessionHelper;
|
||||
import com.commafeed.security.AuthenticationContext;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.inject.Singleton;
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.ws.rs.DefaultValue;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
||||
@Path("/next")
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class NextUnreadServlet extends HttpServlet {
|
||||
|
||||
private static final String PARAM_CATEGORYID = "category";
|
||||
private static final String PARAM_READINGORDER = "order";
|
||||
public class NextUnreadServlet {
|
||||
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final FeedSubscriptionDAO feedSubscriptionDAO;
|
||||
private final FeedEntryStatusDAO feedEntryStatusDAO;
|
||||
private final FeedCategoryDAO feedCategoryDAO;
|
||||
private final UserDAO userDAO;
|
||||
private final UserService userService;
|
||||
private final FeedEntryService feedEntryService;
|
||||
private final CommaFeedConfiguration config;
|
||||
private final AuthenticationContext authenticationContext;
|
||||
|
||||
@Override
|
||||
protected void doGet(final HttpServletRequest req, HttpServletResponse resp) throws IOException {
|
||||
final String categoryId = req.getParameter(PARAM_CATEGORYID);
|
||||
String orderParam = req.getParameter(PARAM_READINGORDER);
|
||||
|
||||
SessionHelper sessionHelper = new SessionHelper(req);
|
||||
Optional<Long> userId = sessionHelper.getLoggedInUserId();
|
||||
Optional<User> user = unitOfWork.call(() -> userId.map(userDAO::findById));
|
||||
user.ifPresent(value -> unitOfWork.run(() -> userService.performPostLoginActivities(value)));
|
||||
if (user.isEmpty()) {
|
||||
resp.sendRedirect(resp.encodeRedirectURL(config.getApplicationSettings().getPublicUrl()));
|
||||
return;
|
||||
@GET
|
||||
public Response get(@QueryParam("category") String categoryId, @QueryParam("order") @DefaultValue("desc") ReadingOrder order) {
|
||||
User user = authenticationContext.getCurrentUser();
|
||||
if (user == null) {
|
||||
return Response.temporaryRedirect(URI.create(config.publicUrl())).build();
|
||||
}
|
||||
|
||||
final ReadingOrder order = StringUtils.equals(orderParam, "asc") ? ReadingOrder.asc : ReadingOrder.desc;
|
||||
|
||||
FeedEntryStatus status = unitOfWork.call(() -> {
|
||||
FeedEntryStatus s = null;
|
||||
if (StringUtils.isBlank(categoryId) || CategoryREST.ALL.equals(categoryId)) {
|
||||
List<FeedSubscription> subs = feedSubscriptionDAO.findAll(user.get());
|
||||
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findBySubscriptions(user.get(), subs, true, null, null, 0, 1, order,
|
||||
true, null, null, null);
|
||||
List<FeedSubscription> subs = feedSubscriptionDAO.findAll(user);
|
||||
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findBySubscriptions(user, subs, true, null, null, 0, 1, order, true,
|
||||
null, null, null);
|
||||
s = Iterables.getFirst(statuses, null);
|
||||
} else {
|
||||
FeedCategory category = feedCategoryDAO.findById(user.get(), Long.valueOf(categoryId));
|
||||
FeedCategory category = feedCategoryDAO.findById(user, Long.valueOf(categoryId));
|
||||
if (category != null) {
|
||||
List<FeedCategory> children = feedCategoryDAO.findAllChildrenCategories(user.get(), category);
|
||||
List<FeedSubscription> subscriptions = feedSubscriptionDAO.findByCategories(user.get(), children);
|
||||
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findBySubscriptions(user.get(), subscriptions, true, null, null, 0,
|
||||
1, order, true, null, null, null);
|
||||
List<FeedCategory> children = feedCategoryDAO.findAllChildrenCategories(user, category);
|
||||
List<FeedSubscription> subscriptions = feedSubscriptionDAO.findByCategories(user, children);
|
||||
List<FeedEntryStatus> statuses = feedEntryStatusDAO.findBySubscriptions(user, subscriptions, true, null, null, 0, 1,
|
||||
order, true, null, null, null);
|
||||
s = Iterables.getFirst(statuses, null);
|
||||
}
|
||||
}
|
||||
if (s != null) {
|
||||
feedEntryService.markEntry(user.get(), s.getEntry().getId(), true);
|
||||
feedEntryService.markEntry(user, s.getEntry().getId(), true);
|
||||
}
|
||||
return s;
|
||||
});
|
||||
|
||||
if (status == null) {
|
||||
resp.sendRedirect(resp.encodeRedirectURL(config.getApplicationSettings().getPublicUrl()));
|
||||
} else {
|
||||
String url = status.getEntry().getUrl();
|
||||
resp.sendRedirect(resp.encodeRedirectURL(url));
|
||||
}
|
||||
String url = status == null ? config.publicUrl() : status.getEntry().getUrl();
|
||||
return Response.temporaryRedirect(URI.create(url)).build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,33 @@
|
||||
package com.commafeed.frontend.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.apache.hc.core5.http.HttpStatus;
|
||||
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
|
||||
import jakarta.annotation.security.PermitAll;
|
||||
import jakarta.inject.Singleton;
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Path("/robots.txt")
|
||||
@PermitAll
|
||||
@Produces(MediaType.TEXT_PLAIN)
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class RobotsTxtDisallowAllServlet extends HttpServlet {
|
||||
public class RobotsTxtDisallowAllServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final CommaFeedConfiguration config;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
|
||||
resp.setContentType("text/plain");
|
||||
resp.getWriter().write("User-agent: *");
|
||||
resp.getWriter().write("\n");
|
||||
resp.getWriter().write("Disallow: /");
|
||||
@GET
|
||||
public Response get() {
|
||||
if (config.hideFromWebCrawlers()) {
|
||||
return Response.ok("User-agent: *\nDisallow: /").build();
|
||||
} else {
|
||||
return Response.status(HttpStatus.SC_NOT_FOUND).build();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user