package com.eactive.eai.authserver.dao; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Stream; import com.eactive.eai.common.message.EAIMessage; import com.eactive.eai.common.message.mapper.EAIMessageMapper; import com.eactive.eai.data.entity.onl.message.EAIMessageEntity; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.oauth2.provider.ClientDetails; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.eactive.eai.authserver.dao.ClientLoader; import com.eactive.eai.authserver.vo.ClientVO; import com.eactive.eai.common.dao.BaseDAO; import com.eactive.eai.common.dao.DAOException; import com.eactive.eai.common.exception.ExceptionUtil; import com.eactive.eai.common.util.Logger; import com.eactive.eai.data.converter.LocalDateTimeFormatters; import com.eactive.eai.data.entity.onl.authserver.ClientEntity; @Service @Transactional public class ClientDAO extends BaseDAO { static Logger logger = Logger.getLogger(Logger.LOGGER_DEFAULT); @Autowired private ClientLoader clientService; @Autowired private EAIMessageMapper eaiMessageMapper; public Map loadClientDetails() throws DAOException { try { Stream clientEntities = clientService.loadAll(); Map clientDetailsMap = new HashMap<>(); clientEntities.forEach(clientEntity -> { ClientVO clientVO = createClientVO(clientEntity); clientDetailsMap.put(clientEntity.getClientid(), clientVO); }); return clientDetailsMap; } catch (Exception e) { throw new DAOException(ExceptionUtil.getErrorCode(e, "RECEAIAUC001")); } } public ClientVO getClientById(String clientId) throws DAOException { try { Optional clientEntityOptional = clientService.findById(clientId); ClientEntity clientEntity = clientEntityOptional .orElseThrow(() -> new DAOException("ClientEntity not found for clientId: " + clientId)); return createClientVO(clientEntity); } catch (Exception e) { throw new DAOException(ExceptionUtil.getErrorCode(e, "RECEAIAUC001")); } } private ClientVO createClientVO(ClientEntity clientEntity) { ClientVO clientVO = new ClientVO(); clientVO.setClientName(clientEntity.getClientname()); clientVO.setClientId(clientEntity.getClientid()); clientVO.setClientSecret(clientEntity.getClientsecret()); clientVO.setScope(assignSet(clientEntity.getScope(), ",")); clientVO.setAuthorizedGrantTypes(assignSet(clientEntity.getGranttypes(), ",")); clientVO.setRegisteredRedirectUri(assignSet(clientEntity.getRedirecturi(), ",")); clientVO.setAuthorities(assignAuthorities(clientEntity.getAuthorities())); clientVO.setResourceIds(assignSet(clientEntity.getResourceids(), ",")); if (NumberUtils.isParsable(clientEntity.getAccesstokenvalidityseconds())) { clientVO.setAccessTokenValiditySeconds(Integer.parseInt(clientEntity.getAccesstokenvalidityseconds())); } if (NumberUtils.isParsable(clientEntity.getRefreshtokenvalidityseconds())) { clientVO.setRefreshTokenValiditySeconds(Integer.parseInt(clientEntity.getRefreshtokenvalidityseconds())); } clientVO.setAutoApproveScopes(assignSet(clientEntity.getAutoapprove(), ",")); clientVO.setAllowedIp(clientEntity.getAllowedips()); clientVO.setSecurityKey(clientEntity.getSecuritykey()); clientVO.setModifiedBy(clientEntity.getModifiedby()); clientVO.setOrgId(clientEntity.getModifiedby()); clientVO.setModifiedBy(clientEntity.getModifiedby()); clientVO.setOrgId(clientEntity.getOrgid()); clientVO.setOrgName(clientEntity.getOrgname()); clientVO.setAppStatus(clientEntity.getAppstatus()); clientVO.setDailyTokenLimit(clientEntity.getDailytokenlimit()); if(clientEntity.getModifiedon() != null) { clientVO.setModifiedOn(clientEntity.getModifiedon().format(LocalDateTimeFormatters.FORMATTER_YYYYMMDDHHMMSS_14)); } Map apiMap = new HashMap<>(); for (EAIMessageEntity eaiMessageEntity : clientEntity.getApiList()){ EAIMessage eaiMessage = eaiMessageMapper.toVo(eaiMessageEntity); apiMap.put(eaiMessage.getEAISvcCd(), eaiMessage); } clientVO.setApiMap(apiMap); return clientVO; } private Collection assignAuthorities(String roleStr) { List authorities = new ArrayList<>(); if (StringUtils.isBlank(roleStr)) { return authorities; } for (String role : StringUtils.split(roleStr, ",")) { authorities.add(new SimpleGrantedAuthority(role)); } return authorities; } private Set assignSet(String str, String delim) { Set set = new HashSet<>(); if (StringUtils.isBlank(str)) { return set; } String[] arr = StringUtils.split(str, delim); set.addAll(Arrays.asList(arr)); return set; } }