package io.github.olivierlemasle.caweb;

import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import io.github.olivierlemasle.caweb.cli.CreateCertificate;
import io.github.olivierlemasle.caweb.cli.CreateSelfSignedCertificate;
import io.github.olivierlemasle.caweb.health.MyHealthCheck;
import io.github.olivierlemasle.caweb.json.CertJsonModule;
import io.github.olivierlemasle.caweb.resources.CertificateAuthoritiesResource;
import io.github.olivierlemasle.caweb.resources.UsersResource;

public class CaApplication extends Application<CaConfiguration> {

  public static void main(final String[] args) throws Exception {
    new CaApplication().run(args);
  }

  @Override
  public String getName() {
    return "ca-web";
  }

  @Override
  public void initialize(final Bootstrap<CaConfiguration> bootstrap) {
    bootstrap.addCommand(new CreateSelfSignedCertificate());
    bootstrap.addCommand(new CreateCertificate());
  }

  @Override
  public void run(final CaConfiguration configuration, final Environment environment) {

    // JSON mapper
    environment.getObjectMapper().registerModule(new CertJsonModule());

    // Users
    final UsersResource resource = new UsersResource(configuration.getUsers());
    environment.jersey().register(resource);

    // CA
    final CertificateAuthoritiesResource caResource = new CertificateAuthoritiesResource();
    environment.jersey().register(caResource);

    // HealthCheck
    final MyHealthCheck healthCheck = new MyHealthCheck();
    environment.healthChecks().register("keystore", healthCheck);
  }

}