WindChat/windchat-business/src/main/java/com/windchat/im/business/impl/site/SiteConfig.java

333 lines
9.1 KiB
Java
Executable File

/**
* Copyright 2018-2028 Akaxin Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.windchat.im.business.impl.site;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.windchat.im.business.constant.GroupConfig;
import com.windchat.im.business.dao.SiteConfigDao;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.akaxin.proto.core.ConfigProto;
import com.windchat.im.business.constant.GroupConfig;
import com.windchat.im.business.dao.SiteConfigDao;
import com.windchat.im.message.utils.SiteConfigHelper;
/**
* 管理站点配置相关信息
*
* @author Sam{@link an.guoyue254@gmail.com}
* @since 2018-01-14 21:18:49
*/
public class SiteConfig {
private static final Logger logger = LoggerFactory.getLogger(SiteConfig.class);
private static volatile Map<Integer, String> configMap;
private static volatile Set<String> siteManagerSet;
private static volatile Set<String> userDefaultFriendSet;
private static volatile Set<String> userDefaultGroupSet;
private SiteConfig() {
}
public static Map<Integer, String> getConfigMap() {
if (configMap == null) {
configMap = updateConfig();
}
return configMap;
}
public static Map<Integer, String> updateConfig() {
try {
configMap = SiteConfigDao.getInstance().getSiteConfig();
if (configMap != null) {
updateCacheSiteManagerSet();
updateCacheUserDefaultFriendSet();
updateCacheUserDefaultGroupSet();
}
SiteConfigHelper.updateConfig();
} catch (Exception e) {
logger.error("update site config error.", e);
}
return configMap;
}
private static void updateCacheSiteManagerSet() {
String siteManageUsers = getConfigMap().get(ConfigProto.ConfigKey.SITE_MANAGER_VALUE);
if (StringUtils.isNotEmpty(siteManageUsers)) {
String[] adminUsers = siteManageUsers.split(",");
List<String> managerList = Arrays.asList(adminUsers);
siteManagerSet = new HashSet<String>(managerList);
logger.info("update new site managers={}", siteManagerSet);
}
}
private static void updateCacheUserDefaultFriendSet() {
String userFriends = getConfigMap().get(ConfigProto.ConfigKey.DEFAULT_USER_FRIENDS_VALUE);
if (StringUtils.isNotEmpty(userFriends)) {
String[] friends = userFriends.split(",");
List<String> friendList = Arrays.asList(friends);
userDefaultFriendSet = new HashSet<String>(friendList);
logger.info("update user default friends={}", userDefaultFriendSet);
}
}
private static void updateCacheUserDefaultGroupSet() {
String userGroups = getConfigMap().get(ConfigProto.ConfigKey.DEFAULT_USER_GROUPS_VALUE);
if (StringUtils.isNotEmpty(userGroups)) {
String[] groups = userGroups.split(",");
List<String> groupList = Arrays.asList(groups);
userDefaultGroupSet = new HashSet<String>(groupList);
logger.info("update user default groups={}", userDefaultGroupSet);
}
}
public static String getConfig(int key) {
try {
return getConfigMap().get(key);
} catch (Exception e) {
logger.error("get config value error", e);
}
return null;
}
/**
* <pre>
* 站点是否关闭,关闭的站点,用户不能注册以及登陆功能
* 1.siteStatus=0,站点关闭
* 2.siteStatus=1,站点开启
* </pre>
*
* @return true/false
*/
public static boolean isOpen() {
if (getConfigMap() != null) {
String value = getConfigMap().get(ConfigProto.ConfigKey.SITE_STATUS_VALUE);
if (StringUtils.isNumeric(value)) {
return ConfigProto.SiteStatusConfig.OPEN_VALUE == Integer.valueOf(value);
}
}
return false;
}
/**
* 判断站点是否关闭状态
*
* @return
*/
public static boolean isClose() {
return !isOpen();
}
// 获取是否需要实名配置
public static ConfigProto.RealNameConfig getRealNameConfig() {
ConfigProto.RealNameConfig realNameConfig = null;
if (getConfigMap() != null) {
String value = getConfigMap().get(ConfigProto.ConfigKey.REALNAME_STATUS_VALUE);
if (StringUtils.isNumeric(value)) {
realNameConfig = ConfigProto.RealNameConfig.forNumber(Integer.valueOf(value));
}
}
return realNameConfig == null ? ConfigProto.RealNameConfig.REALNAME_NO : realNameConfig;
}
// 获取邀请码配置
public static ConfigProto.InviteCodeConfig getUICConfig() {
ConfigProto.InviteCodeConfig uicConfig = null;
if (getConfigMap() != null) {
String value = getConfigMap().get(ConfigProto.ConfigKey.INVITE_CODE_STATUS_VALUE);
if (StringUtils.isNumeric(value)) {
uicConfig = ConfigProto.InviteCodeConfig.forNumber(Integer.valueOf(value));
}
}
return uicConfig == null ? ConfigProto.InviteCodeConfig.UIC_NO : uicConfig;
}
public static String getSiteAddress() {
if (getConfigMap() != null) {
String siteHost = getConfigMap().get(ConfigProto.ConfigKey.SITE_ADDRESS_VALUE);
String sitePort = getConfigMap().get(ConfigProto.ConfigKey.SITE_PORT_VALUE);
return siteHost + ":" + sitePort;
}
return null;
}
/**
* 获取超级管理员
*
* @return
*/
public static String getSiteSuperAdmin() {
if (getConfigMap() != null) {
String siteAdmin = getConfigMap().get(ConfigProto.ConfigKey.SITE_ADMIN_VALUE);
return siteAdmin;
}
return null;
}
/**
* 判断是否为超级管理员
*
* @param siteUserId
* @return
*/
public static boolean isSiteSuperAdmin(String siteUserId) {
if (StringUtils.isNotEmpty(siteUserId)) {
return siteUserId.equals(getSiteSuperAdmin());
}
return false;
}
/**
* 判断是否为普通管理员
*
* @param siteUserId
* @return
*/
public static boolean isSiteManager(String siteUserId) {
if (isSiteSuperAdmin(siteUserId)) {
return true;
}
if (siteManagerSet != null && StringUtils.isNotEmpty(siteUserId)) {
return siteManagerSet.contains(siteUserId);
}
return false;
}
/**
* 判断是否存在超级管理员
*
* @return
*/
public static boolean hasNoAdminUser() {
return !hasAdminUser();
}
public static boolean hasAdminUser() {
if (StringUtils.isNotEmpty(getSiteSuperAdmin())) {
return true;
}
return false;
}
public static int getMaxGroupMemberSize() {
try {
Map<Integer, String> map = getConfigMap();
if (map != null) {
String memberCount = map.get(ConfigProto.ConfigKey.GROUP_MEMBERS_COUNT_VALUE);
if (StringUtils.isNumeric(memberCount)) {
return Integer.valueOf(memberCount);
}
}
} catch (Exception e) {
logger.error("get max group member size error.", e);
}
return GroupConfig.GROUP_MAX_MEMBER_COUNT;
}
public static ConfigProto.U2EncryptionConfig getU2EncryStatusConfig() {
try {
Map<Integer, String> map = getConfigMap();
if (map != null) {
String statusNum = map.get(ConfigProto.ConfigKey.U2_ENCRYPTION_STATUS_VALUE);
if (StringUtils.isNumeric(statusNum)) {
return ConfigProto.U2EncryptionConfig.forNumber(Integer.valueOf(statusNum));
}
}
} catch (Exception e) {
logger.error("get u2 encry status error", e);
}
return ConfigProto.U2EncryptionConfig.U2_CLOSE;
}
public static boolean allowAddFriends(String siteUserId) {
if (isSiteManager(siteUserId)) {
return true;
}
Map<Integer, String> map = getConfigMap();
if (map != null) {
String value = map.get(ConfigProto.ConfigKey.CONFIG_FRIEND_REQUEST_VALUE);
return !String.valueOf(ConfigProto.ConfigFriendRequest.ConfigFriendRequest_NO_VALUE).equals(value);
}
return true;
}
public static boolean allowCreateGroups(String siteUserId) {
if (isSiteManager(siteUserId)) {
return true;
}
Map<Integer, String> map = getConfigMap();
if (map != null) {
String value = map.get(ConfigProto.ConfigKey.CONFIG_CREATE_GROUP_VALUE);
return !String.valueOf(ConfigProto.ConfigCreateGroup.ConfigCreateGroup_NO_VALUE).equals(value);
}
return true;
}
/**
* <pre>
* 1天
* 7天
* 14天
* </pre>
*
* @return
*/
public static int getGroupQRExpireDay() {
int expireDay = 14;
Map<Integer, String> map = getConfigMap();
if (map != null) {
String value = map.get(ConfigProto.ConfigKey.GROUP_QR_EXPIRE_TIME_VALUE);
if (NumberUtils.isDigits(value)) {
int day = Integer.valueOf(value);
if (day == 1 || day == 7 || day == 14) {
return day;
}
}
}
return expireDay;
}
public static String getSiteLogo() {
try {
Map<Integer, String> map = getConfigMap();
if (map != null) {
return map.get(ConfigProto.ConfigKey.SITE_LOGO_VALUE);
}
} catch (Exception e) {
logger.error("get site logo error", e);
}
return null;
}
public static Set<String> getUserDefaultFriends() {
return userDefaultFriendSet;
}
public static Set<String> getUserDefaultGroups() {
return userDefaultGroupSet;
}
}