OneDrive 和 SharePoint 反代功能

This commit is contained in:
赵俊
2021-04-10 15:38:16 +08:00
parent b24c663fd6
commit fb0d9721aa
10 changed files with 42 additions and 7 deletions

View File

@@ -41,4 +41,6 @@ public class StorageConfigConstant {
public static final String IS_PRIVATE = "isPrivate";
public static final String PROXY_DOMAIN = "proxyDomain";
}

View File

@@ -46,4 +46,6 @@ public class StorageStrategyConfig {
private String siteType;
private String proxyDomain;
}

View File

@@ -29,6 +29,7 @@ public abstract class AbstractOneDriveServiceBase extends MicrosoftDriveServiceB
add(new StorageConfig("accessToken", "访问令牌"));
add(new StorageConfig("refreshToken", "刷新令牌"));
add(new StorageConfig("basePath", "基路径"));
add(new StorageConfig("proxyDomain", "反代域名"));
}};
}
}

View File

@@ -24,6 +24,7 @@ public abstract class AbstractSharePointServiceBase extends MicrosoftDriveServic
return new ArrayList<StorageConfig>() {{
add(new StorageConfig("accessToken", "访问令牌"));
add(new StorageConfig("refreshToken", "刷新令牌"));
add(new StorageConfig("proxyDomain", "反代域名"));
add(new StorageConfig("basePath", "基路径"));
add(new StorageConfig("siteName", "站点名称"));
add(new StorageConfig("siteId", "SiteId"));

View File

@@ -32,12 +32,6 @@ import java.util.List;
@Slf4j
public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService {
/**
* https://graph.microsoft.com/v1.0/drives/6e4cf6d2f7e15197/root:%2FData%2F%E5%B8%A6%E6%9C%89%E7%AC%A6%E5%8F%B7%E6%96%87%E4%BB%B6%E5%A4%B9%E6%B5%8B%E8%AF%95%2F%25100+%2520:/children
* https://graph.microsoft.com/v1.0/me/drive/root:%2FData%2F%E5%B8%A6%E6%9C%89%E7%AC%A6%E5%8F%B7%E6%96%87%E4%BB%B6%E5%A4%B9%E6%B5%8B%E8%AF%95%2F%25100+%2520:/children
*/
/**
* 获取根文件 API URI
*/
@@ -63,6 +57,7 @@ public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService
*/
private static final String ONE_DRIVE_FILE_FLAG = "file";
protected String proxyDomain;
@Resource
@Lazy
@@ -174,7 +169,11 @@ public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService
fileItemDTO.setTime(fileItem.getDate("lastModifiedDateTime"));
if (fileItem.containsKey("file")) {
fileItemDTO.setUrl(fileItem.getString("@microsoft.graph.downloadUrl"));
String originUrl = fileItem.getString("@microsoft.graph.downloadUrl");
if (StringUtils.isNotNullOrEmpty(proxyDomain)) {
originUrl = StringUtils.replaceHost(originUrl, proxyDomain);
}
fileItemDTO.setUrl(originUrl);
fileItemDTO.setType(FileTypeEnum.FILE);
} else {
fileItemDTO.setType(FileTypeEnum.FOLDER);

View File

@@ -47,6 +47,11 @@ public class OneDriveChinaServiceImpl extends AbstractOneDriveServiceBase implem
String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue();
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue();
StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN);
if (proxyDomainStorageConfig != null) {
super.proxyDomain = proxyDomainStorageConfig.getValue();
}
if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) {
log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription());

View File

@@ -47,6 +47,10 @@ public class OneDriveServiceImpl extends AbstractOneDriveServiceBase implements
String accessToken = stringStorageConfigMap.get(StorageConfigConstant.ACCESS_TOKEN_KEY).getValue();
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue();
StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN);
if (proxyDomainStorageConfig != null) {
super.proxyDomain = proxyDomainStorageConfig.getValue();
}
if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) {
log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription());

View File

@@ -48,6 +48,10 @@ public class SharePointChinaServiceImpl extends AbstractSharePointServiceBase im
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue();
super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue();
StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN);
if (proxyDomainStorageConfig != null) {
super.proxyDomain = proxyDomainStorageConfig.getValue();
}
if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) {
log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription());

View File

@@ -48,6 +48,10 @@ public class SharePointServiceImpl extends AbstractSharePointServiceBase impleme
String refreshToken = stringStorageConfigMap.get(StorageConfigConstant.REFRESH_TOKEN_KEY).getValue();
super.siteId = stringStorageConfigMap.get(StorageConfigConstant.SHAREPOINT_SITE_ID).getValue();
super.basePath = stringStorageConfigMap.get(StorageConfigConstant.BASE_PATH).getValue();
StorageConfig proxyDomainStorageConfig = stringStorageConfigMap.get(StorageConfigConstant.PROXY_DOMAIN);
if (proxyDomainStorageConfig != null) {
super.proxyDomain = proxyDomainStorageConfig.getValue();
}
if (StringUtils.isEmpty(accessToken) || StringUtils.isEmpty(refreshToken)) {
log.debug("初始化存储策略 [{}] 失败: 参数不完整", getStorageTypeEnum().getDescription());

View File

@@ -1,6 +1,7 @@
package im.zhaojun.zfile.util;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.URLUtil;
import im.zhaojun.zfile.model.constant.ZFileConstant;
/**
@@ -101,4 +102,16 @@ public class StringUtils {
path = ObjectUtil.defaultIfNull(path, "");
return StringUtils.removeDuplicateSeparator(basePath + ZFileConstant.PATH_SEPARATOR + path);
}
/**
* 替换 URL 中的 Host 部分,如替换 http://a.com/1.txt 为 https://abc.com/1.txt
* @param originUrl
* 原 URL
* @param replaceHost
* 替换的 HOST
* @return 替换后的 URL
*/
public static String replaceHost(String originUrl, String replaceHost) {
return concatPath(replaceHost, URLUtil.getPath(originUrl));
}
}