移除云片短信渠道,解决云片的安全风险
parent
1465d064dd
commit
ea95115ffd
@ -1,59 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.sms.core.client.impl.yunpian;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.SmsCodeMapping;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.enums.SmsFrameworkErrorCodeConstants;
|
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.SUCCESS;
|
|
||||||
import static com.yunpian.sdk.constant.Code.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 云片的 SmsCodeMapping 实现类
|
|
||||||
* <p>
|
|
||||||
* 参见 https://www.yunpian.com/official/document/sms/zh_CN/returnvalue_common 文档
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
public class YunpianSmsCodeMapping implements SmsCodeMapping {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ErrorCode apply(String apiCode) {
|
|
||||||
int code = Integer.parseInt(apiCode);
|
|
||||||
switch (code) {
|
|
||||||
case OK:
|
|
||||||
return SUCCESS;
|
|
||||||
case ARGUMENT_MISSING:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_API_PARAM_ERROR;
|
|
||||||
case BAD_ARGUMENT_FORMAT:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_PARAM_ERROR;
|
|
||||||
case TPL_NOT_FOUND:
|
|
||||||
case TPL_NOT_VALID:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_INVALID;
|
|
||||||
case MONEY_NOT_ENOUGH:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_MONEY_NOT_ENOUGH;
|
|
||||||
case BLACK_WORD:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_SEND_CONTENT_INVALID;
|
|
||||||
case DUP_IN_SHORT_TIME:
|
|
||||||
case TOO_MANY_TIME_IN_5:
|
|
||||||
case DAY_LIMIT_PER_MOBILE:
|
|
||||||
case HOUR_LIMIT_PER_MOBILE:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL;
|
|
||||||
case BLACK_PHONE_FILTER:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_MOBILE_BLACK;
|
|
||||||
case SIGN_NOT_MATCH:
|
|
||||||
case BAD_SIGN_FORMAT:
|
|
||||||
case SIGN_NOT_VALID:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_SIGN_INVALID;
|
|
||||||
case BAD_API_KEY:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_INVALID;
|
|
||||||
case API_NOT_ALLOWED:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_PERMISSION_DENY;
|
|
||||||
case IP_NOT_ALLOWED:
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_IP_DENY;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return SmsFrameworkErrorCodeConstants.SMS_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.sms.core.client.impl.yunpian;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.core.KeyValue;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.dto.SmsTemplateRespDTO;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.client.impl.yunpian.YunpianSmsClient;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.enums.SmsChannelEnum;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.property.SmsChannelProperties;
|
|
||||||
import org.junit.jupiter.api.BeforeAll;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link YunpianSmsClient} 的集成测试
|
|
||||||
*/
|
|
||||||
public class YunpianSmsClientIntegrationTest {
|
|
||||||
|
|
||||||
private static YunpianSmsClient smsClient;
|
|
||||||
|
|
||||||
@BeforeAll
|
|
||||||
public static void init() {
|
|
||||||
// 创建配置类
|
|
||||||
SmsChannelProperties properties = new SmsChannelProperties();
|
|
||||||
properties.setId(1L);
|
|
||||||
properties.setSignature("芋道");
|
|
||||||
properties.setCode(SmsChannelEnum.YUN_PIAN.getCode());
|
|
||||||
properties.setApiKey("1555a14277cb8a608cf45a9e6a80d510");
|
|
||||||
// 创建客户端
|
|
||||||
smsClient = new YunpianSmsClient(properties);
|
|
||||||
smsClient.init();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSendSms() {
|
|
||||||
List<KeyValue<String, Object>> templateParams = new ArrayList<>();
|
|
||||||
templateParams.add(new KeyValue<>("code", "1024"));
|
|
||||||
templateParams.add(new KeyValue<>("operation", "嘿嘿"));
|
|
||||||
// SmsResult result = smsClient.send(1L, "15601691399", "4372216", templateParams);
|
|
||||||
SmsCommonResult<SmsSendRespDTO> result = smsClient.sendSms(1L, "15601691399", "4383920", templateParams);
|
|
||||||
System.out.println(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetSmsTemplate() {
|
|
||||||
String apiTemplateId = "4383920";
|
|
||||||
SmsCommonResult<SmsTemplateRespDTO> result = smsClient.getSmsTemplate(apiTemplateId);
|
|
||||||
System.out.println(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
package cn.iocoder.yudao.framework.sms.core.client.impl.yunpian;
|
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.test.core.ut.BaseMockitoUnitTest;
|
|
||||||
import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
|
|
||||||
import cn.iocoder.yudao.framework.sms.core.enums.SmsFrameworkErrorCodeConstants;
|
|
||||||
import org.junit.jupiter.api.Assertions;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
|
|
||||||
import static com.yunpian.sdk.constant.Code.*;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@link YunpianSmsCodeMapping} 的单元测试
|
|
||||||
*
|
|
||||||
* @author 芋道源码
|
|
||||||
*/
|
|
||||||
class YunpianSmsCodeMappingTest extends BaseMockitoUnitTest {
|
|
||||||
|
|
||||||
@InjectMocks
|
|
||||||
private YunpianSmsCodeMapping codeMapping;
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testApply() {
|
|
||||||
assertEquals(GlobalErrorCodeConstants.SUCCESS, codeMapping.apply(String.valueOf(OK)));
|
|
||||||
Assertions.assertEquals(SmsFrameworkErrorCodeConstants.SMS_API_PARAM_ERROR, codeMapping.apply(String.valueOf(ARGUMENT_MISSING)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_PARAM_ERROR, codeMapping.apply(String.valueOf(BAD_ARGUMENT_FORMAT)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_MONEY_NOT_ENOUGH, codeMapping.apply(String.valueOf(MONEY_NOT_ENOUGH)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_INVALID, codeMapping.apply(String.valueOf(TPL_NOT_FOUND)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_TEMPLATE_INVALID, codeMapping.apply(String.valueOf(TPL_NOT_VALID)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL, codeMapping.apply(String.valueOf(DUP_IN_SHORT_TIME)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL, codeMapping.apply(String.valueOf(TOO_MANY_TIME_IN_5)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL, codeMapping.apply(String.valueOf(DAY_LIMIT_PER_MOBILE)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SEND_BUSINESS_LIMIT_CONTROL, codeMapping.apply(String.valueOf(HOUR_LIMIT_PER_MOBILE)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_MOBILE_BLACK, codeMapping.apply(String.valueOf(BLACK_PHONE_FILTER)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SIGN_INVALID, codeMapping.apply(String.valueOf(SIGN_NOT_MATCH)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SIGN_INVALID, codeMapping.apply(String.valueOf(SIGN_NOT_VALID)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_SIGN_INVALID, codeMapping.apply(String.valueOf(BAD_SIGN_FORMAT)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_ACCOUNT_INVALID, codeMapping.apply(String.valueOf(BAD_API_KEY)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_PERMISSION_DENY, codeMapping.apply(String.valueOf(API_NOT_ALLOWED)));
|
|
||||||
assertEquals(SmsFrameworkErrorCodeConstants.SMS_IP_DENY, codeMapping.apply(String.valueOf(IP_NOT_ALLOWED)));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
package cn.iocoder.yudao.module.system.job;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
|
||||||
|
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@TenantJob // 标记多租户
|
||||||
|
public class DemoJob implements JobHandler {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AdminUserMapper adminUserMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(String param) throws Exception {
|
||||||
|
System.out.println("当前租户:" + TenantContextHolder.getTenantId());
|
||||||
|
List<AdminUserDO> users = adminUserMapper.selectList();
|
||||||
|
return "用户数量:" + users.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue