package com.ctrip.framework.apollo.portal.component.config;
import com.google.common.base.Strings;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ctrip.framework.apollo.common.config.RefreshableConfig;
import com.ctrip.framework.apollo.common.config.RefreshablePropertySource;
import com.ctrip.framework.apollo.core.enums.Env;
import com.ctrip.framework.apollo.portal.entity.vo.Organization;
import com.ctrip.framework.apollo.portal.service.PortalDBPropertySource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Type;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Set;
@Component
public class PortalConfig extends RefreshableConfig {
private Gson gson = new Gson();
private static final Type ORGANIZATION = new TypeToken<List<Organization>>() {
}.getType();
@Autowired
private PortalDBPropertySource portalDBPropertySource;
@Override
public List<RefreshablePropertySource> getRefreshablePropertySources() {
return Collections.singletonList(portalDBPropertySource);
}
/***
* Level: important
**/
public List<Env> portalSupportedEnvs() {
String[] configurations = getArrayProperty("apollo.portal.envs", new String[]{"FAT", "UAT", "PRO"});
List<Env> envs = Lists.newLinkedList();
for (String env : configurations) {
envs.add(Env.fromString(env));
}
return envs;
}
public List<String> superAdmins() {
String superAdminConfig = getValue("superAdmin", "");
if (Strings.isNullOrEmpty(superAdminConfig)) {
return Collections.emptyList();
}
return splitter.splitToList(superAdminConfig);
}
public Set<Env> emailSupportedEnvs() {
String[] configurations = getArrayProperty("email.supported.envs", null);
Set<Env> result = Sets.newHashSet();
if (configurations == null || configurations.length == 0) {
return result;
}
for (String env : configurations) {
result.add(Env.fromString(env));
}
return result;
}
/***
* Level: normal
**/
public int connectTimeout() {
return getIntProperty("api.connectTimeout", 3000);
}
public int readTimeout() {
return getIntProperty("api.readTimeout", 10000);
}
public List<Organization> organizations() {
String organizations = getValue("organizations");
return organizations == null ? Collections.emptyList() : gson.fromJson(organizations, ORGANIZATION);
}
public String portalAddress() {
return getValue("apollo.portal.address");
}
public boolean isEmergencyPublishAllowed(Env env) {
String targetEnv = env.name();
String[] emergencyPublishSupportedEnvs = getArrayProperty("emergencyPublish.supported.envs", new String[0]);
for (String supportedEnv: emergencyPublishSupportedEnvs) {
if (Objects.equals(targetEnv, supportedEnv.toUpperCase().trim())) {
return true;
}
}
return false;
}
/***
* Level: low
**/
public Set<Env> publishTipsSupportedEnvs() {
String[] configurations = getArrayProperty("namespace.publish.tips.supported.envs", null);
Set<Env> result = Sets.newHashSet();
if (configurations == null || configurations.length == 0) {
return result;
}
for (String env : configurations) {
result.add(Env.fromString(env));
}
return result;
}
public String consumerTokenSalt() {
return getValue("consumer.token.salt", "apollo-portal");
}
public String emailSender() {
return getValue("email.sender");
}
public String emailTemplateFramework() {
return getValue("email.template.framework", "");
}
public String emailReleaseDiffModuleTemplate() {
return getValue("email.template.release.module.diff", "");
}
public String emailRollbackDiffModuleTemplate() {
return getValue("email.template.rollback.module.diff", "");
}
public String emailGrayRulesModuleTemplate() {
return getValue("email.template.release.module.rules", "");
}
public String wikiAddress() {
return getValue("wiki.address", "https://github.com/ctripcorp/apollo/wiki");
}
public boolean canAppAdminCreatePrivateNamespace() {
return getBooleanProperty("admin.createPrivateNamespace.switch", true);
}
/***
* The following configurations are used in ctrip profile
**/
public int appId() {
return getIntProperty("ctrip.appid", 0);
}
//send code & template id. apply from ewatch
public String sendCode() {
return getValue("ctrip.email.send.code");
}
public int templateId() {
return getIntProperty("ctrip.email.template.id", 0);
}
//email retention time in email server queue.TimeUnit: hour
public int survivalDuration() {
return getIntProperty("ctrip.email.survival.duration", 5);
}
public boolean isSendEmailAsync() {
return getBooleanProperty("email.send.async", true);
}
public String portalServerName() {
return getValue("serverName");
}
public String casServerLoginUrl() {
return getValue("casServerLoginUrl");
}
public String casServerUrlPrefix() {
return getValue("casServerUrlPrefix");
}
public String credisServiceUrl() {
return getValue("credisServiceUrl");
}
public String userServiceUrl() {
return getValue("userService.url");
}
public String userServiceAccessToken() {
return getValue("userService.accessToken");
}
public String soaServerAddress() {
return getValue("soa.server.address");
}
public String cloggingUrl() {
return getValue("clogging.server.url");
}
public String cloggingPort() {
return getValue("clogging.server.port");
}
public String hermesServerAddress() {
return getValue("hermes.server.address");
}
}