Files
Athou_commafeed/src/main/java/com/commafeed/CommaFeedApplication.java

168 lines
7.9 KiB
Java
Raw Normal View History

package com.commafeed;
import io.dropwizard.Application;
import io.dropwizard.assets.AssetsBundle;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.hibernate.HibernateBundle;
2014-08-09 15:25:41 +02:00
import io.dropwizard.jersey.sessions.HttpSessionProvider;
import io.dropwizard.migrations.MigrationsBundle;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import java.io.File;
import java.util.Date;
import java.util.concurrent.TimeUnit;
2014-08-17 17:27:08 +02:00
import javax.servlet.SessionTrackingMode;
import org.eclipse.jetty.server.session.HashSessionManager;
2014-08-09 15:25:41 +02:00
import org.eclipse.jetty.server.session.SessionHandler;
import com.commafeed.backend.feed.FeedRefreshTaskGiver;
import com.commafeed.backend.feed.FeedRefreshUpdater;
import com.commafeed.backend.feed.FeedRefreshWorker;
import com.commafeed.backend.model.AbstractModel;
import com.commafeed.backend.model.Feed;
import com.commafeed.backend.model.FeedCategory;
import com.commafeed.backend.model.FeedEntry;
import com.commafeed.backend.model.FeedEntryContent;
import com.commafeed.backend.model.FeedEntryStatus;
import com.commafeed.backend.model.FeedEntryTag;
import com.commafeed.backend.model.FeedSubscription;
import com.commafeed.backend.model.User;
import com.commafeed.backend.model.UserRole;
import com.commafeed.backend.model.UserSettings;
import com.commafeed.backend.service.StartupService;
import com.commafeed.backend.service.UserService;
2014-08-09 22:18:14 +02:00
import com.commafeed.backend.task.OldStatusesCleanupTask;
import com.commafeed.backend.task.OrphansCleanupTask;
import com.commafeed.backend.task.SchedulingService;
2014-08-08 21:57:16 +02:00
import com.commafeed.frontend.auth.SecurityCheckProvider;
2014-08-09 15:25:41 +02:00
import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider;
import com.commafeed.frontend.resource.AdminREST;
import com.commafeed.frontend.resource.CategoryREST;
import com.commafeed.frontend.resource.EntryREST;
import com.commafeed.frontend.resource.FeedREST;
import com.commafeed.frontend.resource.PubSubHubbubCallbackREST;
import com.commafeed.frontend.resource.ServerREST;
import com.commafeed.frontend.resource.UserREST;
2014-08-11 15:11:01 +02:00
import com.commafeed.frontend.servlet.AnalyticsServlet;
2014-08-11 05:51:44 +02:00
import com.commafeed.frontend.servlet.CustomCssServlet;
2014-08-09 15:25:41 +02:00
import com.commafeed.frontend.servlet.LogoutServlet;
2014-08-09 13:25:53 +02:00
import com.commafeed.frontend.servlet.NextUnreadServlet;
2014-08-17 17:27:08 +02:00
import com.google.common.collect.ImmutableSet;
2014-08-17 14:16:30 +02:00
import com.google.inject.Guice;
import com.google.inject.Injector;
2014-08-11 11:05:50 +02:00
import com.wordnik.swagger.config.ConfigFactory;
import com.wordnik.swagger.config.ScannerFactory;
import com.wordnik.swagger.config.SwaggerConfig;
import com.wordnik.swagger.jaxrs.config.DefaultJaxrsScanner;
import com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider;
import com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON;
import com.wordnik.swagger.jaxrs.listing.ResourceListingProvider;
import com.wordnik.swagger.jaxrs.reader.DefaultJaxrsApiReader;
import com.wordnik.swagger.reader.ClassReaders;
public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
public static final String USERNAME_ADMIN = "admin";
public static final String USERNAME_DEMO = "demo";
public static final Date STARTUP_TIME = new Date();
private HibernateBundle<CommaFeedConfiguration> hibernateBundle;
@Override
public void initialize(Bootstrap<CommaFeedConfiguration> bootstrap) {
2014-08-17 14:16:30 +02:00
bootstrap.addBundle(hibernateBundle = new HibernateBundle<CommaFeedConfiguration>(AbstractModel.class, Feed.class,
FeedCategory.class, FeedEntry.class, FeedEntryContent.class, FeedEntryStatus.class, FeedEntryTag.class,
FeedSubscription.class, User.class, UserRole.class, UserSettings.class) {
@Override
public DataSourceFactory getDataSourceFactory(CommaFeedConfiguration configuration) {
return configuration.getDatabase();
}
2014-08-17 14:16:30 +02:00
});
2014-08-17 14:16:30 +02:00
bootstrap.addBundle(new MigrationsBundle<CommaFeedConfiguration>() {
@Override
public DataSourceFactory getDataSourceFactory(CommaFeedConfiguration configuration) {
return configuration.getDatabase();
}
2014-08-17 14:16:30 +02:00
});
bootstrap.addBundle(new AssetsBundle("/assets/", "/", "index.html"));
}
@Override
public void run(CommaFeedConfiguration config, Environment environment) throws Exception {
2014-08-17 14:16:30 +02:00
// configure context path
environment.getApplicationContext().setContextPath(config.getApplicationSettings().getContextPath());
2014-08-17 14:16:30 +02:00
// guice init
Injector injector = Guice.createInjector(new CommaFeedModule(hibernateBundle.getSessionFactory(), config, environment.metrics()));
2014-08-09 15:25:41 +02:00
// Auth/session management
HashSessionManager sessionManager = new HashSessionManager();
2014-08-17 17:27:08 +02:00
sessionManager.setSessionTrackingModes(ImmutableSet.of(SessionTrackingMode.COOKIE));
sessionManager.setHttpOnly(true);
sessionManager.getSessionCookieConfig().setHttpOnly(true);
2014-08-09 15:25:41 +02:00
sessionManager.setStoreDirectory(new File("sessions"));
sessionManager.getSessionCookieConfig().setMaxAge((int) TimeUnit.DAYS.toSeconds(30));
sessionManager.setMaxInactiveInterval((int) TimeUnit.DAYS.toSeconds(30));
sessionManager.setDeleteUnrestorableSessions(true);
sessionManager.setIdleSavePeriod((int) TimeUnit.HOURS.toSeconds(2));
sessionManager.setRefreshCookieAge((int) TimeUnit.DAYS.toSeconds(1));
sessionManager.setSavePeriod((int) TimeUnit.MINUTES.toSeconds(5));
sessionManager.setScavengePeriod((int) TimeUnit.MINUTES.toSeconds(5));
environment.servlets().setSessionHandler(new SessionHandler(sessionManager));
2014-08-17 14:16:30 +02:00
environment.jersey().register(new SecurityCheckUserServiceProvider(injector.getInstance(UserService.class)));
2014-08-09 15:25:41 +02:00
environment.jersey().register(SecurityCheckProvider.class);
environment.jersey().register(HttpSessionProvider.class);
2014-08-09 15:25:41 +02:00
// REST resources
environment.jersey().setUrlPattern("/rest/*");
2014-08-17 14:16:30 +02:00
environment.jersey().register(injector.getInstance(AdminREST.class));
environment.jersey().register(injector.getInstance(CategoryREST.class));
environment.jersey().register(injector.getInstance(EntryREST.class));
environment.jersey().register(injector.getInstance(FeedREST.class));
environment.jersey().register(injector.getInstance(PubSubHubbubCallbackREST.class));
environment.jersey().register(injector.getInstance(ServerREST.class));
environment.jersey().register(injector.getInstance(UserREST.class));
2014-08-09 15:25:41 +02:00
// Servlets
2014-08-17 14:16:30 +02:00
environment.servlets().addServlet("next", injector.getInstance(NextUnreadServlet.class)).addMapping("/next");
environment.servlets().addServlet("logout", injector.getInstance(LogoutServlet.class)).addMapping("/logout");
environment.servlets().addServlet("customCss", injector.getInstance(CustomCssServlet.class)).addMapping("/custom_css.css");
environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js");
2014-08-09 13:25:53 +02:00
2014-08-09 22:18:14 +02:00
// Tasks
SchedulingService schedulingService = new SchedulingService();
2014-08-17 14:16:30 +02:00
schedulingService.register(injector.getInstance(OldStatusesCleanupTask.class));
schedulingService.register(injector.getInstance(OrphansCleanupTask.class));
2014-08-09 22:18:14 +02:00
2014-08-09 15:25:41 +02:00
// Managed objects
2014-08-17 14:16:30 +02:00
environment.lifecycle().manage(injector.getInstance(StartupService.class));
environment.lifecycle().manage(injector.getInstance(FeedRefreshTaskGiver.class));
environment.lifecycle().manage(injector.getInstance(FeedRefreshWorker.class));
environment.lifecycle().manage(injector.getInstance(FeedRefreshUpdater.class));
2014-08-09 22:18:14 +02:00
environment.lifecycle().manage(schedulingService);
2014-08-09 13:25:53 +02:00
2014-08-11 11:05:50 +02:00
// Swagger
environment.jersey().register(new ApiListingResourceJSON());
environment.jersey().register(new ApiDeclarationProvider());
environment.jersey().register(new ResourceListingProvider());
ScannerFactory.setScanner(new DefaultJaxrsScanner());
ClassReaders.setReader(new DefaultJaxrsApiReader());
SwaggerConfig swaggerConfig = ConfigFactory.config();
swaggerConfig.setApiVersion("1");
swaggerConfig.setBasePath("/rest");
}
public static void main(String[] args) throws Exception {
new CommaFeedApplication().run(args);
}
}