package de.anycook.api;
import de.anycook.api.util.MediaType;
import de.anycook.db.mysql.DBMailProvider;
import de.anycook.mailprovider.MailProvider;
import de.anycook.mailprovider.MailProviders;
import de.anycook.session.Session;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.SQLException;
import java.util.List;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
/**
* @author Jan Graßegger<jan@anycook.de>
*/
@Path("/mailproviders")
@Produces(MediaType.APPLICATION_JSON)
public class MailProviderApi {
private final Logger logger = LogManager.getLogger(getClass());
@Context
private Session session;
@GET
public List<MailProvider> getMailProviders() {
try {
return MailProviders.getMailProviders();
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
@GET
@Path("{shortName}")
public MailProvider getMailProvider(@PathParam("shortName") String shortName) {
try {
return MailProviders.getMailProvider(shortName);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
} catch (DBMailProvider.ProviderNotFoundException e) {
logger.debug(e);
throw new WebApplicationException(Response.Status.NO_CONTENT);
}
}
@PUT
@Path("{shortName}")
public void updateMailProvider(@PathParam("shortName") String shortName,
MailProvider mailProvider) {
session.checkAdminLogin();
try {
MailProviders.updateMailProvider(shortName, mailProvider);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
@DELETE
@Path("{shortName}")
public void deleteMailProvider(@PathParam("shortName") String shortName) {
session.checkAdminLogin();
try {
MailProviders.deleteMailProvider(shortName);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
}
}
@GET
@Path("domain/{domain}")
public MailProvider getMailProviderByDomain(@PathParam("domain") String domain) {
if (domain == null) {
throw new WebApplicationException(Response.Status.BAD_REQUEST);
}
try {
return MailProviders.getMailProviderForDomain(domain);
} catch (SQLException e) {
logger.error(e, e);
throw new WebApplicationException(Response.Status.INTERNAL_SERVER_ERROR);
} catch (DBMailProvider.ProviderNotFoundException e) {
logger.debug(e);
throw new WebApplicationException(Response.Status.NO_CONTENT);
}
}
}