Skip to content

Commit

Permalink
✨ OneDrive 和 SharePoint 反代功能
Browse files Browse the repository at this point in the history
  • Loading branch information
zhaojun1998 committed Apr 10, 2021
1 parent b24c663 commit fb0d972
Show file tree
Hide file tree
Showing 10 changed files with 42 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,6 @@ public class StorageConfigConstant {

public static final String IS_PRIVATE = "isPrivate";

public static final String PROXY_DOMAIN = "proxyDomain";

}
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,6 @@ public class StorageStrategyConfig {

private String siteType;

private String proxyDomain;

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public List<StorageConfig> storageStrategyConfigList() {
add(new StorageConfig("accessToken", "访问令牌"));
add(new StorageConfig("refreshToken", "刷新令牌"));
add(new StorageConfig("basePath", "基路径"));
add(new StorageConfig("proxyDomain", "反代域名"));
}};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public List<StorageConfig> storageStrategyConfigList() {
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"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,6 @@
@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
*/
Expand All @@ -63,6 +57,7 @@ public abstract class MicrosoftDriveServiceBase extends AbstractBaseFileService
*/
private static final String ONE_DRIVE_FILE_FLAG = "file";

protected String proxyDomain;

@Resource
@Lazy
Expand Down Expand Up @@ -174,7 +169,11 @@ public List<FileItemDTO> fileList(String path) {
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ public void init(Integer driveId) {
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ public void init(Integer driveId) {
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ public void init(Integer driveId) {
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ public void init(Integer driveId) {
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());
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/im/zhaojun/zfile/util/StringUtils.java
Original file line number Diff line number Diff line change
@@ -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;

/**
Expand Down Expand Up @@ -101,4 +102,16 @@ public static String getFullPath(String basePath, String path) {
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));
}
}

0 comments on commit fb0d972

Please sign in to comment.