package io.cattle.platform.core.dao.impl;
import static io.cattle.platform.core.model.tables.AgentTable.*;
import static io.cattle.platform.core.model.tables.HostTable.*;
import static io.cattle.platform.core.model.tables.InstanceHostMapTable.*;
import static io.cattle.platform.core.model.tables.InstanceTable.*;
import static io.cattle.platform.core.model.tables.SecretTable.*;
import io.cattle.platform.core.addon.SecretReference;
import io.cattle.platform.core.dao.SecretDao;
import io.cattle.platform.core.model.Host;
import io.cattle.platform.core.model.Secret;
import io.cattle.platform.core.model.tables.records.HostRecord;
import io.cattle.platform.core.model.tables.records.InstanceRecord;
import io.cattle.platform.core.model.tables.records.SecretRecord;
import io.cattle.platform.db.jooq.dao.impl.AbstractJooqDao;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.inject.Named;
import org.jooq.Record;
@Named
public class SecretDaoImpl extends AbstractJooqDao implements SecretDao {
@Override
public InstanceAndHost getHostForInstanceUUIDAndAuthAccount(long accountId, String instanceUuid) {
Record r = create().select(HOST.fields())
.from(HOST)
.join(INSTANCE_HOST_MAP)
.on(INSTANCE_HOST_MAP.HOST_ID.eq(HOST.ID))
.join(INSTANCE)
.on(INSTANCE.ID.eq(INSTANCE_HOST_MAP.INSTANCE_ID))
.join(AGENT)
.on(INSTANCE.AGENT_ID.eq(AGENT.ID))
.where(AGENT.ACCOUNT_ID.eq(accountId)
.and(AGENT.REMOVED.isNull())
.and(INSTANCE.REMOVED.isNull())
.and(INSTANCE_HOST_MAP.REMOVED.isNull()))
.fetchAny();
if (r == null) {
return null;
}
Host host = r.into(HostRecord.class);
r = create().select(INSTANCE.fields())
.from(INSTANCE)
.join(INSTANCE_HOST_MAP)
.on(INSTANCE_HOST_MAP.INSTANCE_ID.eq(INSTANCE.ID))
.where(INSTANCE_HOST_MAP.HOST_ID.eq(host.getId())
.and(INSTANCE.UUID.eq(instanceUuid))
.and(INSTANCE.REMOVED.isNull())
.and(INSTANCE_HOST_MAP.REMOVED.isNull()))
.fetchAny();
if (r == null) {
return null;
}
return new InstanceAndHost(r.into(InstanceRecord.class), host);
}
@Override
public Map<Long, Secret> getSecrets(List<SecretReference> refs) {
Set<Long> ids = new HashSet<>();
for (SecretReference ref : refs) {
ids.add(ref.getSecretId());
}
Map<Long, Secret> result = new HashMap<Long, Secret>();
for (Secret secret : create().select(SECRET.fields())
.from(SECRET)
.where(SECRET.ID.in(ids))
.fetchInto(SecretRecord.class)) {
result.put(secret.getId(), secret);
}
return result;
}
}