package io.cattle.platform.hazelcast.dao.impl;
import static io.cattle.platform.core.model.tables.DataTable.*;
import io.cattle.platform.db.jooq.dao.impl.AbstractJooqDao;
import io.cattle.platform.hazelcast.dao.HazelcastDao;
import java.security.SecureRandom;
import java.util.UUID;
import org.apache.commons.codec.binary.Base64;
import org.jooq.exception.DataAccessException;
public class HazelcastDaoImpl extends AbstractJooqDao implements HazelcastDao {
SecureRandom random = new SecureRandom();
@Override
public String getGroupName() {
return getRandomString("hazelcast-group-name", true, true);
}
@Override
public String getGroupPassword() {
return getRandomString("hazelcast-group-password", false, false);
}
protected String getRandomString(String name, boolean visible, boolean uuid) {
String value = get(name);
if ( value == null ) {
if ( uuid ) {
value = UUID.randomUUID().toString();
} else {
byte[] bytes = new byte[64];
random.nextBytes(bytes);
value = Base64.encodeBase64String(bytes);
}
try {
set(name, value, visible);
} catch (DataAccessException e) {
value = get(name);
if ( value == null ) {
throw e;
}
}
}
return value;
}
protected String get(String name) {
return create()
.select(DATA.VALUE)
.from(DATA)
.where(DATA.NAME.eq(name))
.fetchOne(DATA.VALUE);
}
protected void set(String name, String value, boolean visible) {
create()
.insertInto(DATA, DATA.NAME, DATA.VISIBLE, DATA.VALUE)
.values(name, visible, value)
.execute();
}
}