Commit 012cb848 authored by Grzegorz Pietrusza's avatar Grzegorz Pietrusza

purge db and register tasks comands

parent cde37948
import auth.ExampleAuthenticator; import auth.ExampleAuthenticator;
import com.bazaarvoice.dropwizard.webjars.WebJarBundle; import com.bazaarvoice.dropwizard.webjars.WebJarBundle;
import com.fasterxml.jackson.dataformat.yaml.snakeyaml.Yaml;
import com.google.inject.AbstractModule; import com.google.inject.AbstractModule;
import com.google.inject.Guice; import com.google.inject.Guice;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import commands.PurgeDatabaseCommand; import commands.PurgeDatabaseCommand;
import commands.RegisterTasksCommand;
import core.ApplicationConfiguration; import core.ApplicationConfiguration;
import io.dropwizard.Application; import io.dropwizard.Application;
import io.dropwizard.assets.AssetsBundle; import io.dropwizard.assets.AssetsBundle;
...@@ -16,14 +16,12 @@ import io.dropwizard.auth.basic.BasicCredentialAuthFilter; ...@@ -16,14 +16,12 @@ import io.dropwizard.auth.basic.BasicCredentialAuthFilter;
import io.dropwizard.jersey.setup.JerseyEnvironment; import io.dropwizard.jersey.setup.JerseyEnvironment;
import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment; import io.dropwizard.setup.Environment;
import modules.ApplicationModule;
import objects.User; import objects.User;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
import repositories.UsersRepository; import repositories.UsersRepository;
import resources.*; import resources.*;
import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
/** /**
...@@ -31,8 +29,6 @@ import java.util.stream.Stream; ...@@ -31,8 +29,6 @@ import java.util.stream.Stream;
*/ */
public class CTFApplication extends Application<ApplicationConfiguration> public class CTFApplication extends Application<ApplicationConfiguration>
{ {
private Datastore datastore;
private Injector injector; private Injector injector;
@Override @Override
...@@ -40,6 +36,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> ...@@ -40,6 +36,7 @@ public class CTFApplication extends Application<ApplicationConfiguration>
{ {
bootstrap.addBundle(new AssetsBundle("/assets", "/page", "index.html")); bootstrap.addBundle(new AssetsBundle("/assets", "/page", "index.html"));
bootstrap.addCommand(new PurgeDatabaseCommand()); bootstrap.addCommand(new PurgeDatabaseCommand());
bootstrap.addCommand(new RegisterTasksCommand());
Stream.of("org.webjars.npm", "org.webjars.bower") Stream.of("org.webjars.npm", "org.webjars.bower")
.map(WebJarBundle::new) .map(WebJarBundle::new)
.forEach(bootstrap::addBundle); .forEach(bootstrap::addBundle);
...@@ -95,21 +92,7 @@ public class CTFApplication extends Application<ApplicationConfiguration> ...@@ -95,21 +92,7 @@ public class CTFApplication extends Application<ApplicationConfiguration>
private Injector createInjector(ApplicationConfiguration applicationConfiguration) private Injector createInjector(ApplicationConfiguration applicationConfiguration)
{ {
return Guice.createInjector(new AbstractModule() return Guice.createInjector(new ApplicationModule(applicationConfiguration));
{
@Override
protected void configure()
{
bind(ApplicationConfiguration.class).toInstance(applicationConfiguration); //todo: refactor
Morphia morphia = new Morphia();
morphia.mapPackage("objects.Team"); //todo? what for?
datastore = morphia.createDatastore(
new MongoClient(applicationConfiguration.getDbHost(),applicationConfiguration.getDbPort()), applicationConfiguration.getDbName());
datastore.ensureIndexes();
bind(Datastore.class).toInstance(datastore);
}
});
} }
public static void main(String[] args) throws Exception public static void main(String[] args) throws Exception
......
package commands; package commands;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.mongodb.MongoClient; import com.mongodb.MongoClient;
import core.ApplicationConfiguration; import core.ApplicationConfiguration;
import io.dropwizard.cli.ConfiguredCommand; import io.dropwizard.cli.ConfiguredCommand;
import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Bootstrap;
import modules.ApplicationModule;
import net.sourceforge.argparse4j.inf.Namespace; import net.sourceforge.argparse4j.inf.Namespace;
import org.mongodb.morphia.Datastore; import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia; import org.mongodb.morphia.Morphia;
...@@ -21,10 +24,8 @@ public class PurgeDatabaseCommand extends ConfiguredCommand<ApplicationConfigura ...@@ -21,10 +24,8 @@ public class PurgeDatabaseCommand extends ConfiguredCommand<ApplicationConfigura
@Override @Override
protected void run(Bootstrap<ApplicationConfiguration> bootstrap, Namespace namespace, ApplicationConfiguration applicationConfiguration) throws Exception protected void run(Bootstrap<ApplicationConfiguration> bootstrap, Namespace namespace, ApplicationConfiguration applicationConfiguration) throws Exception
{ {
//todo: move and merge with app setup Injector injector = Guice.createInjector(new ApplicationModule(applicationConfiguration));
Morphia morphia = new Morphia(); Datastore datastore = injector.getInstance(Datastore.class);
Datastore datastore = morphia.createDatastore(
new MongoClient(applicationConfiguration.getDbHost(), applicationConfiguration.getDbPort()), applicationConfiguration.getDbName());
datastore.getDB().dropDatabase(); datastore.getDB().dropDatabase();
} }
} }
package commands;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.mongodb.MongoClient;
import core.ApplicationConfiguration;
import core.TaskType;
import helpers.TextTaskConfig;
import helpers.WebTaskConfig;
import io.dropwizard.cli.ConfiguredCommand;
import io.dropwizard.setup.Bootstrap;
import modules.ApplicationModule;
import net.sourceforge.argparse4j.inf.Namespace;
import objects.Flag;
import objects.tasks.Task;
import objects.tasks.TaskCryptoContent;
import objects.tasks.TaskWebContent;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
import repositories.TasksRepository;
import java.util.List;
import java.util.stream.Collectors;
public class RegisterTasksCommand extends ConfiguredCommand<ApplicationConfiguration>
{
private static final String COMMAND_NAME = "registertasks";
private static final String COMMAND_DESCRIPTION = "Register tasks";
public RegisterTasksCommand()
{
super(COMMAND_NAME, COMMAND_DESCRIPTION);
}
private void initializeTasks(ApplicationConfiguration applicationConfiguration, Injector injector)
{
Datastore datastore = injector.getInstance(Datastore.class);
TasksRepository tasksRepository = injector.getInstance(TasksRepository.class);
List<TextTaskConfig> cryptoTasks = applicationConfiguration.getTextTasks();
List<WebTaskConfig> webTasks = applicationConfiguration.getWebTasks();
datastore.getCollection(Task.class).drop();
cryptoTasks.forEach(cryptoTaskConfig -> {
cryptoTaskConfig.getFlags().stream()
.map(Flag::new)
.collect(Collectors.toList());
tasksRepository.add(new Task(
cryptoTaskConfig.getName(),
cryptoTaskConfig.getLevel(),
TaskType.TEXT,
cryptoTaskConfig.getFlags().stream()
.map(Flag::new)
.collect(Collectors.toList()),
new TaskCryptoContent(cryptoTaskConfig.getText())
));
});
webTasks.forEach(webTaskConfig -> tasksRepository.add(new Task(
webTaskConfig.getName(),
webTaskConfig.getLevel(),
TaskType.WEB,
webTaskConfig.getFlags().stream()
.map(Flag::new)
.collect(Collectors.toList()),
new TaskWebContent(webTaskConfig.getUrl())
)));
}
@Override
protected void run(Bootstrap<ApplicationConfiguration> bootstrap, Namespace namespace, ApplicationConfiguration applicationConfiguration) throws Exception
{
//todo: move and merge with app setup
Injector injector = Guice.createInjector(new ApplicationModule(applicationConfiguration));
initializeTasks(applicationConfiguration, injector);
}
}
package modules;
import com.google.inject.AbstractModule;
import com.mongodb.MongoClient;
import core.ApplicationConfiguration;
import org.mongodb.morphia.Datastore;
import org.mongodb.morphia.Morphia;
public class ApplicationModule extends AbstractModule
{
private ApplicationConfiguration applicationConfiguration;
public ApplicationModule(ApplicationConfiguration applicationConfiguration)
{
this.applicationConfiguration = applicationConfiguration;
}
@Override
protected void configure()
{
bind(ApplicationConfiguration.class).toInstance(applicationConfiguration); //todo: refactor
Morphia morphia = new Morphia();
morphia.mapPackage("objects.Team"); //todo? what for?
//todo: instantiate somewhere else?
Datastore datastore = morphia.createDatastore(
new MongoClient(applicationConfiguration.getDbHost(), applicationConfiguration.getDbPort()), applicationConfiguration.getDbName());
datastore.ensureIndexes();
bind(Datastore.class).toInstance(datastore);
}
}
...@@ -72,52 +72,11 @@ public class TasksRepository implements Repository ...@@ -72,52 +72,11 @@ public class TasksRepository implements Repository
return datastore.createQuery(Task.class).asList(); return datastore.createQuery(Task.class).asList();
} }
//todo: rethink, move to command?
public void initialize()
{
List<TextTaskConfig> cryptoTasks = applicationConfiguration.getTextTasks();
List<WebTaskConfig> webTasks = applicationConfiguration.getWebTasks();
this.clean();
cryptoTasks.forEach(cryptoTaskConfig -> {
cryptoTaskConfig.getFlags().stream()
.map(Flag::new)
.collect(Collectors.toList());
this.add(new Task(
cryptoTaskConfig.getName(),
cryptoTaskConfig.getLevel(),
TaskType.TEXT,
cryptoTaskConfig.getFlags().stream()
.map(Flag::new)
.collect(Collectors.toList()),
new TaskCryptoContent(cryptoTaskConfig.getText())
));
});
webTasks.forEach(webTaskConfig -> this.add(new Task(
webTaskConfig.getName(),
webTaskConfig.getLevel(),
TaskType.WEB,
webTaskConfig.getFlags().stream()
.map(Flag::new)
.collect(Collectors.toList()),
new TaskWebContent(webTaskConfig.getUrl())
)));
}
public void add(Task task) public void add(Task task)
{ {
datastore.save(task); datastore.save(task);
} }
public void clean()
{
datastore.getCollection(Task.class).drop();
}
//todo: refactor? //todo: refactor?
public Map<List<String>, Integer> getUserFlagsHashes(String username) public Map<List<String>, Integer> getUserFlagsHashes(String username)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment