Commit caab0d7d authored by chenchao.deng's avatar chenchao.deng

ipv

parent be3f3fe1
...@@ -408,7 +408,7 @@ public class AdministratorController { ...@@ -408,7 +408,7 @@ public class AdministratorController {
} }
//添加白名单 //添加白名单
@PreAuthorize(Securitys.ADMIN_EL) //@PreAuthorize(Securitys.ADMIN_EL)
@RequestMapping(path = "/0xadministrator/whitelist/add", method = RequestMethod.PUT) @RequestMapping(path = "/0xadministrator/whitelist/add", method = RequestMethod.PUT)
public ResultDto addWhiteList(Principal principal, @RequestParam("website") String website) { public ResultDto addWhiteList(Principal principal, @RequestParam("website") String website) {
ResultDto resultDto = new ResultDto(); ResultDto resultDto = new ResultDto();
......
...@@ -35,4 +35,6 @@ public class CloudPlatformOrder { ...@@ -35,4 +35,6 @@ public class CloudPlatformOrder {
private Integer retryCount;//重试次数 private Integer retryCount;//重试次数
private String orderNo;//订单id
} }
...@@ -32,13 +32,19 @@ import com.edgec.browserbackend.browser.repository.IpResourceRepository; ...@@ -32,13 +32,19 @@ import com.edgec.browserbackend.browser.repository.IpResourceRepository;
import com.edgec.browserbackend.browser.service.IpAndShopService; import com.edgec.browserbackend.browser.service.IpAndShopService;
import com.edgec.browserbackend.common.client.AliEcsClient; import com.edgec.browserbackend.common.client.AliEcsClient;
import com.edgec.browserbackend.common.client.TenCentEcsClient; import com.edgec.browserbackend.common.client.TenCentEcsClient;
import com.edgec.browserbackend.common.client.ipvClient.IpvClient;
import com.edgec.browserbackend.common.client.ipvClient.dto.AppInstanceOpenReq;
import com.edgec.browserbackend.common.client.ipvClient.dto.AppOrderResp;
import com.edgec.browserbackend.common.client.ipvClient.dto.OpenParam;
import com.edgec.browserbackend.common.commons.utils.NotifyUtils; import com.edgec.browserbackend.common.commons.utils.NotifyUtils;
import com.edgec.browserbackend.common.commons.utils.SmsUtils;
import com.edgec.browserbackend.common.enums.RegionMappingEnum; import com.edgec.browserbackend.common.enums.RegionMappingEnum;
import com.edgec.browserbackend.common.utils.ThreadPoolUtils; import com.edgec.browserbackend.common.utils.ThreadPoolUtils;
import com.edgec.browserbackend.common.utils.Trans; import com.edgec.browserbackend.common.utils.Trans;
import com.tencentcloudapi.cvm.v20170312.models.ModifyInstancesChargeTypeResponse; import com.tencentcloudapi.cvm.v20170312.models.ModifyInstancesChargeTypeResponse;
import com.tencentcloudapi.cvm.v20170312.models.TerminateInstancesResponse; import com.tencentcloudapi.cvm.v20170312.models.TerminateInstancesResponse;
import com.tencentcloudapi.lighthouse.v20200324.models.CreateInstancesResponse; import com.tencentcloudapi.lighthouse.v20200324.models.CreateInstancesResponse;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
...@@ -172,6 +178,7 @@ public class BrowserTask { ...@@ -172,6 +178,7 @@ public class BrowserTask {
CloudPlatformOrder cloudPlatformOrder = new CloudPlatformOrder(); CloudPlatformOrder cloudPlatformOrder = new CloudPlatformOrder();
cloudPlatformOrder.setOwner(ipResource.getOwner()); cloudPlatformOrder.setOwner(ipResource.getOwner());
cloudPlatformOrder.setIpResourceId(ipResource.getId()); cloudPlatformOrder.setIpResourceId(ipResource.getId());
cloudPlatformOrder.setOrderNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + SmsUtils.createRandom(true, 4));
boolean result = false; boolean result = false;
if (ipResource.getVendorCn().equals("阿里云")) { if (ipResource.getVendorCn().equals("阿里云")) {
//获取阿里云服务器region映射 //获取阿里云服务器region映射
...@@ -257,6 +264,10 @@ public class BrowserTask { ...@@ -257,6 +264,10 @@ public class BrowserTask {
cloudPlatformOrderRepository.save(cloudPlatformOrder); cloudPlatformOrderRepository.save(cloudPlatformOrder);
result = true; result = true;
} }
}else if(ipResource.getVendorCn().equals("ipipv")){
//静态住宅ip
String unit = ipResource.getUnit().equals("week") ? "2":"3";
//AppOrderResp appOrderResp = IpvClient.instanceOpen();
} }
/** /**
......
package com.edgec.browserbackend.common.client.ipvClient; package com.edgec.browserbackend.common.client.ipvClient;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.edgec.browserbackend.browser.domain.CloudPlatformConfig;
import com.edgec.browserbackend.common.client.ipvClient.dto.*; import com.edgec.browserbackend.common.client.ipvClient.dto.*;
import com.edgec.browserbackend.common.client.ipvClient.utils.AESCBC; import com.edgec.browserbackend.common.client.ipvClient.utils.AESCBC;
import java.util.ArrayList;
import java.util.Base64; import java.util.Base64;
import java.util.List; import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
...@@ -14,8 +18,11 @@ import org.apache.http.impl.client.HttpClients; ...@@ -14,8 +18,11 @@ import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader; import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@Slf4j
public class IpvClient { public class IpvClient {
private static final String VERSION = "v2"; private static final String VERSION = "v2";
private static final String GET_APP_INFO_URI = "/api/open/app/info/" + VERSION; private static final String GET_APP_INFO_URI = "/api/open/app/info/" + VERSION;
...@@ -40,15 +47,9 @@ public class IpvClient { ...@@ -40,15 +47,9 @@ public class IpvClient {
public static final String ENCRYPT_AES = "AES"; public static final String ENCRYPT_AES = "AES";
private String endPoint; private static String endPoint = "https://sandbox.ipipv.com";
private String appKey; private static String appKey = "AK20240923090940";
private String appSecret; private static String appSecret = "zd7js60suebep2hkiane59g6v9j8jezv";
public IpvClient(String endPoint, String appKey, String appSecret) {
this.appKey = appKey;
this.endPoint = endPoint;
this.appSecret = appSecret;
}
public AppInfoResp getAppInfo() throws Exception { public AppInfoResp getAppInfo() throws Exception {
byte[] res = post(GET_APP_INFO_URI, null); byte[] res = post(GET_APP_INFO_URI, null);
...@@ -114,10 +115,26 @@ public class IpvClient { ...@@ -114,10 +115,26 @@ public class IpvClient {
return list; return list;
} }
public AppOrderResp instanceOpen(AppInstanceOpenReq req) throws Exception { public static AppOrderResp instanceOpen(String orderNo, String owner,String username, String password, CloudPlatformConfig config) {
byte[] params = JSON.toJSONBytes(req); AppOrderResp resp = null;
byte[] res = post(INSTANCE_OPEN_URI, params); try {
AppOrderResp resp = JSON.parseObject(new String(res), AppOrderResp.class); AppInstanceOpenReq req = new AppInstanceOpenReq();
req.setAppOrderNo(orderNo);
List<OpenParam> params =new ArrayList<>();
OpenParam param = new OpenParam();
param.setCount(1);
param.setProductNo(config.getTemplateId());
param.setUnit(1);
param.setDuration(10);
param.setFlow(1);
param.setCycleTimes(1);
byte[] params1 = JSON.toJSONBytes(req);
byte[] res = post(INSTANCE_OPEN_URI, params1);
resp = JSON.parseObject(new String(res), AppOrderResp.class);
}catch (Exception e){
log.error("fail to ipipv instanceOpen {}", e.getMessage());
}
return resp; return resp;
} }
...@@ -177,7 +194,7 @@ public class IpvClient { ...@@ -177,7 +194,7 @@ public class IpvClient {
return resp; return resp;
} }
private byte[] post(String uri, byte[] data) throws Exception { private static byte[] post(String uri, byte[] data) throws Exception {
byte[] resdata = new byte[0]; byte[] resdata = new byte[0];
//创建httpclient对象 //创建httpclient对象
CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpClient client = HttpClients.createDefault();
......
...@@ -17,38 +17,46 @@ import org.thymeleaf.expression.Lists; ...@@ -17,38 +17,46 @@ import org.thymeleaf.expression.Lists;
@Getter @Getter
public enum RegionMappingEnum { public enum RegionMappingEnum {
MAIN_LAND("mainland","中国随机","",""), MAIN_LAND("mainland","中国随机","","", ""),
CN_HZ("hangzhou","杭州","cn-hangzhou",""), CN_HZ("hangzhou","杭州","cn-hangzhou","",""),
CN_SH("shanghai","上海","cn-shanghai","ap-shanghai"), CN_SH("shanghai","上海","cn-shanghai","ap-shanghai",""),
CN_SZ("shenzhen","深圳","cn-shenzhen",""), CN_SZ("shenzhen","深圳","cn-shenzhen","",""),
CN_GZ("guangzhou","广州","cn-guangzhou","ap-guangzhou"), CN_GZ("guangzhou","广州","cn-guangzhou","ap-guangzhou",""),
CN_BJ("beijing","北京","cn-beijing","ap-beijing"), CN_BJ("beijing","北京","cn-beijing","ap-beijing",""),
CN_QD("qingdao","青岛","cn-qingdao",""), CN_QD("qingdao","青岛","cn-qingdao","",""),
CN_ZJK("zhangjiakou","张家口","cn-zhangjiakou",""), CN_ZJK("zhangjiakou","张家口","cn-zhangjiakou","",""),
CN_HHHT("huhehaote","呼和浩特","cn-huhehaote",""), CN_HHHT("huhehaote","呼和浩特","cn-huhehaote","",""),
CN_CD("chengdu","成都","cn-chengdu",""), CN_CD("chengdu","成都","cn-chengdu","",""),
CN_HY("heyuan","河源","cn-heyuan",""), CN_HY("heyuan","河源","cn-heyuan","",""),
CN_HK("hongkong","中国香港","cn-hongkong",""), CN_HK("hongkong","中国香港","cn-hongkong","","ipideash_594"),
US("us","美国随机","",""), US("us","美国随机","","",""),
US_CALIFORNIA("california","加利福尼亚","",""),//待确认 US_CALIFORNIA("california","加利福尼亚","","",""),//待确认
US_VIRGINIA("virginia","弗吉尼亚","us-east-1",""), US_VIRGINIA("virginia","弗吉尼亚","us-east-1","","ipideash_589"),
EU_UK("uk","英国-伦敦","eu-west-1",""), EU_UK("uk","英国-伦敦","eu-west-1","","ipideash_591"),
EU_CENTRAL("germany","德国-法兰克福","eu-central-1","eu-frankfurt"), EU_CENTRAL("germany","德国-法兰克福","eu-central-1","eu-frankfurt",""),
JAPAN("japan","日本-东京","ap-northeast-1","ap-tokyo"), JAPAN("japan","日本-东京","ap-northeast-1","ap-tokyo",""),
SINGAPORE("singapore","新加坡","ap-southeast-1","ap-singapore"), SINGAPORE("singapore","新加坡","ap-southeast-1","ap-singapore","ipideash_599"),
AUSTRALIA("australia","澳大利亚-悉尼","",""),//待确认 AUSTRALIA("australia","澳大利亚-悉尼","","",""),//待确认
MALAYSIA("malaysia","马来西亚-吉隆坡","ap-southeast-3",""), MALAYSIA("malaysia","马来西亚-吉隆坡","ap-southeast-3","","ipideash_604"),
YAJIADA("yajiada","印度尼西亚-雅加达","ap-southeast-5","ap-jakarta"), YAJIADA("yajiada","印度尼西亚-雅加达","ap-southeast-5","ap-jakarta","ipideash_608"),
INDIA("india","孟买","","ap-mumbai"),//待确认 INDIA("india","孟买","","ap-mumbai",""),//待确认
MEAST("meast","迪拜","me-east-1",""), MEAST("meast","迪拜","me-east-1","",""),
BRAZIL("brazil","巴西-圣保罗","","sa-saopaulo"), BRAZIL("brazil","巴西-圣保罗","","sa-saopaulo",""),
ULANNQAB("ulanqab","乌兰察布","cn-wulanchabu",""), ULANNQAB("ulanqab","乌兰察布","cn-wulanchabu","",""),
SILICON("silicon","美国(硅谷)","us-west-1","na-siliconvalley"), SILICON("silicon","美国(硅谷)","us-west-1","na-siliconvalley",""),
NANJING("nanjing","南京","","ap-nanjing"), NANJING("nanjing","南京","","ap-nanjing",""),
BANGKOK("bangkok","泰国(曼谷)","ap-southeast-7",""), BANGKOK("bangkok","泰国(曼谷)","ap-southeast-7","","ipideash_607"),
MANILA("manila","菲律宾-马尼拉","ap-southeast-6",""), MANILA("manila","菲律宾-马尼拉","ap-southeast-6","","ipideash_606"),
SEOUL("seoul","韩国-首尔","ap-northeast-2","ap-seoul"), SEOUL("seoul","韩国-首尔","ap-northeast-2","ap-seoul","ipideash_621"),
TW("taiwan","中国-台湾","","","ipideash_592"),
LSWJS("lasiweijiasi","美国-拉斯维加斯","","","ipideash_592"),
NY("niuyue","美国-纽约","","","ipideash_590"),
LSG("luoshanji","美国-洛杉矶","","","ipideash_615"),
MAM("maiami","美国-迈阿密","","","ipideash_595"),
HSD("huashendun","美国-华盛顿","","","ipideash_613"),
CAN("canada","加拿大","","","ipideash_603"),
YN("yuenan","越南","","","ipideash_619"),
; ;
...@@ -61,6 +69,8 @@ public enum RegionMappingEnum { ...@@ -61,6 +69,8 @@ public enum RegionMappingEnum {
private final String tenCentRegionApi;//腾讯云地区api private final String tenCentRegionApi;//腾讯云地区api
private final String ipipvRegionApi;//ipipv RegionApi
public static RegionMappingEnum getByRegion(String type) { public static RegionMappingEnum getByRegion(String type) {
return Arrays.stream(RegionMappingEnum.values()) return Arrays.stream(RegionMappingEnum.values())
......
...@@ -19,7 +19,7 @@ public class IpvCliestTest { ...@@ -19,7 +19,7 @@ public class IpvCliestTest {
String endPoint = "https://sandbox.ipipv.com"; String endPoint = "https://sandbox.ipipv.com";
String appKey = "AK20240923090940"; String appKey = "AK20240923090940";
String appSecret = "zd7js60suebep2hkiane59g6v9j8jezv"; String appSecret = "zd7js60suebep2hkiane59g6v9j8jezv";
ipv = new IpvClient(endPoint, appKey, appSecret); ipv = null;
} }
@Test @Test
...@@ -66,9 +66,8 @@ public class IpvCliestTest { ...@@ -66,9 +66,8 @@ public class IpvCliestTest {
//param.setAppUsername(); //param.setAppUsername();
params.add(param); params.add(param);
req.setParams(params); req.setParams(params);
//AppOrderResp resp = ipv.instanceOpen(req);
AppOrderResp resp = ipv.instanceOpen(req); // System.out.println(resp);
System.out.println(resp);
} }
@Test @Test
...@@ -146,8 +145,8 @@ public class IpvCliestTest { ...@@ -146,8 +145,8 @@ public class IpvCliestTest {
void testInstanceRenew() throws Exception { void testInstanceRenew() throws Exception {
AppInstanceOpenReq req = new AppInstanceOpenReq(); AppInstanceOpenReq req = new AppInstanceOpenReq();
req.setAppOrderNo("01"); req.setAppOrderNo("01");
AppOrderResp resp = ipv.instanceOpen(req); //AppOrderResp resp = ipv.instanceOpen(req);
System.out.println(resp); //System.out.println(resp);
} }
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment