package com.intrbiz.bergamot.command.admin;
import java.util.List;
import java.util.concurrent.TimeUnit;
import com.intrbiz.bergamot.BergamotCLI;
import com.intrbiz.bergamot.BergamotCLICommand;
import com.intrbiz.bergamot.config.UICfg;
import com.intrbiz.bergamot.data.BergamotDB;
import com.intrbiz.bergamot.model.Site;
import com.intrbiz.bergamot.model.message.agent.manager.AgentManagerRequest;
import com.intrbiz.bergamot.model.message.agent.manager.AgentManagerResponse;
import com.intrbiz.bergamot.model.message.agent.manager.request.CreateSiteCA;
import com.intrbiz.bergamot.model.message.agent.manager.response.CreatedSiteCA;
import com.intrbiz.bergamot.queue.BergamotAgentManagerQueue;
import com.intrbiz.data.DataManager;
import com.intrbiz.queue.QueueManager;
import com.intrbiz.queue.RPCClient;
import com.intrbiz.queue.name.RoutingKey;
import com.intrbiz.queue.rabbit.RabbitPool;
import com.intrbiz.util.pool.database.DatabasePool;
public class GenerateSiteCAsCommand extends BergamotCLICommand
{
public GenerateSiteCAsCommand()
{
super();
}
@Override
public String name()
{
return "generate-site-cas";
}
@Override
public boolean admin()
{
return true;
}
@Override
public String usage()
{
return "";
}
@Override
public String help()
{
return "Ensure that a Site certificate authority is generated for each site\n";
}
@Override
public int execute(BergamotCLI cli, List<String> args) throws Exception
{
// read the UI config and connect to the database
UICfg config = UICfg.loadConfiguration();
// setup the data manager
DataManager.getInstance().registerDefaultServer(DatabasePool.Default.with().postgresql().url(config.getDatabase().getUrl()).username(config.getDatabase().getUsername()).password(config.getDatabase().getPassword()).build());
// setup the queue manager
QueueManager.getInstance().registerDefaultBroker(new RabbitPool(config.getBroker().getUrl(), config.getBroker().getUsername(), config.getBroker().getPassword()));
// ensure the DB schema is installed
BergamotDB.install();
// now actually create the site
try (BergamotDB db = BergamotDB.connect())
{
// create the Site CA
try (BergamotAgentManagerQueue queue = BergamotAgentManagerQueue.open())
{
try (RPCClient<AgentManagerRequest, AgentManagerResponse, RoutingKey> client = queue.createBergamotAgentManagerRPCClient())
{
for (Site site : db.listSites())
{
try
{
AgentManagerResponse response = client.publish(new CreateSiteCA(site.getId(), site.getName())).get(5, TimeUnit.SECONDS);
if (response instanceof CreatedSiteCA)
{
System.out.println("Created Bergamot Agent site Certificate Authority for site " + site.getName());
}
}
catch (Exception e)
{
}
}
System.out.println("Finished creating Bergamot Agent site Certificate Authorities for all sites");
}
}
}
// all ok
return 0;
}
}