package com.intrbiz.bergamot.ui.api; import java.util.UUID; import com.intrbiz.balsa.engine.route.Router; import com.intrbiz.balsa.metadata.WithDataAdapter; import com.intrbiz.bergamot.config.model.TrapCfg; import com.intrbiz.bergamot.data.BergamotDB; import com.intrbiz.bergamot.metadata.IgnoreBinding; import com.intrbiz.bergamot.metadata.IsaObjectId; import com.intrbiz.bergamot.model.Site; import com.intrbiz.bergamot.model.Trap; import com.intrbiz.bergamot.model.message.TrapMO; import com.intrbiz.bergamot.model.message.result.MatchOnCheckId; import com.intrbiz.bergamot.model.message.result.PassiveResultMO; import com.intrbiz.bergamot.model.message.state.CheckStateMO; import com.intrbiz.bergamot.ui.BergamotApp; import com.intrbiz.metadata.Any; import com.intrbiz.metadata.Get; import com.intrbiz.metadata.JSON; import com.intrbiz.metadata.Param; import com.intrbiz.metadata.Prefix; import com.intrbiz.metadata.RequireValidPrincipal; import com.intrbiz.metadata.Var; import com.intrbiz.metadata.XML; @Prefix("/api/trap") @RequireValidPrincipal() public class TrapAPIRouter extends Router<BergamotApp> { @Get("/name/:host/:name") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public TrapMO getTrapByName(BergamotDB db, @Var("site") Site site, String hostName, String name) { Trap trap = notNull(db.getTrapOnHostByName(site.getId(), hostName, name)); require(permission("read", trap)); return trap.toMO(currentPrincipal()); } @Get("/id/:id") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public TrapMO getTrap(BergamotDB db, @IsaObjectId() UUID id) { Trap trap = notNull(db.getTrap(id)); require(permission("read", trap)); return trap.toMO(currentPrincipal()); } @Get("/id/:id/state") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public CheckStateMO getTrapState(BergamotDB db, @IsaObjectId() UUID id) { Trap trap = notNull(db.getTrap(id)); require(permission("read", trap)); return trap.getState().toMO(currentPrincipal()); } @Get("/name/:host/:name/state") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public CheckStateMO getTrapStateByName(BergamotDB db, @Var("site") Site site, String hostName, String name) { Trap trap = notNull(db.getTrapOnHostByName(site.getId(), hostName, name)); require(permission("read", trap)); return trap.getState().toMO(currentPrincipal()); } @Any("/id/:id/submit") @JSON(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) public String submitTrapStatus(BergamotDB db, @Var("site") Site site, @IsaObjectId() UUID id, @Param("status") String status, @Param("output") String output) { Trap trap = notNull(db.getTrap(id)); require(permission("submit", trap)); // the result PassiveResultMO resultMO = new PassiveResultMO(); resultMO.setId(UUID.randomUUID()); resultMO.setSiteId(site.getId()); resultMO.setMatchOn(new MatchOnCheckId(id)); resultMO.setStatus(status); resultMO.setOk("OK".equalsIgnoreCase(status) || "PENDING".equalsIgnoreCase(status)); resultMO.setOutput(output); resultMO.setExecuted(System.currentTimeMillis()); resultMO.setRuntime(0); resultMO.setParameter("bergamot.ui.instance", this.app().getInstanceName()); // dispatch the result for processing action("dispatch-result", resultMO); return "Accepted"; } @Get("/id/:id/suppress") @JSON() @WithDataAdapter(BergamotDB.class) public String suppressTrap(BergamotDB db, @IsaObjectId() UUID id) { Trap trap = notNull(db.getTrap(id)); require(permission("suppress", trap)); action("suppress-check", trap); return "Ok"; } @Get("/id/:id/unsuppress") @JSON() @WithDataAdapter(BergamotDB.class) public String unsuppressTrap(BergamotDB db, @IsaObjectId() UUID id) { Trap trap = notNull(db.getTrap(id)); require(permission("unsuppress", trap)); action("unsuppress-check", trap); return "Ok"; } @Get("/name/:host/:name/config.xml") @XML(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) @IgnoreBinding public TrapCfg getTrapConfigByName(BergamotDB db, @Var("site") Site site, String hostName, String name) { Trap trap = notNull(db.getTrapOnHostByName(site.getId(), hostName, name)); require(permission("read.config", trap)); return trap.getConfiguration(); } @Get("/id/:id/config.xml") @XML(notFoundIfNull = true) @WithDataAdapter(BergamotDB.class) @IgnoreBinding public TrapCfg getTrapConfig(BergamotDB db, @IsaObjectId() UUID id) { Trap trap = notNull(db.getTrap(id)); require(permission("read.config", trap)); return trap.getConfiguration(); } }