From d554dd298cc930037f0ae725b04926ecbcd8640c Mon Sep 17 00:00:00 2001 From: zhaojun1998 Date: Sun, 9 Feb 2020 18:05:01 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E4=BC=98=E5=8C=96=20OneDrive=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/config/OneDriveConfig.java | 12 +++--- .../common/controller/OneDriveController.java | 12 +++--- .../service/AbstractOneDriveService.java | 43 ++++++++++++++----- 3 files changed, 45 insertions(+), 22 deletions(-) diff --git a/src/main/java/im/zhaojun/onedrive/common/config/OneDriveConfig.java b/src/main/java/im/zhaojun/onedrive/common/config/OneDriveConfig.java index 6015cf9..deb559b 100644 --- a/src/main/java/im/zhaojun/onedrive/common/config/OneDriveConfig.java +++ b/src/main/java/im/zhaojun/onedrive/common/config/OneDriveConfig.java @@ -4,8 +4,8 @@ import im.zhaojun.common.model.StorageConfig; import im.zhaojun.common.model.constant.StorageConfigConstant; import im.zhaojun.common.model.enums.StorageTypeEnum; import im.zhaojun.common.service.StorageConfigService; -import im.zhaojun.onedrive.china.service.OneDriveChinaService; -import im.zhaojun.onedrive.international.service.OneDriveService; +import im.zhaojun.onedrive.china.service.OneDriveChinaServiceImpl; +import im.zhaojun.onedrive.international.service.OneDriveServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; @@ -26,11 +26,11 @@ public class OneDriveConfig { @Resource @Lazy - private OneDriveService oneDriveService; + private OneDriveServiceImpl oneDriveServiceImpl; @Resource @Lazy - private OneDriveChinaService oneDriveChinaService; + private OneDriveChinaServiceImpl oneDriveChinaServiceImpl; @Bean public RestTemplate oneDriveRestTemplate() { @@ -39,9 +39,9 @@ public class OneDriveConfig { ClientHttpRequestInterceptor interceptor = (httpRequest, bytes, clientHttpRequestExecution) -> { String host = httpRequest.getURI().getHost(); StorageTypeEnum type; - if (oneDriveChinaService.getGraphEndPoint().contains(host)) { + if (oneDriveChinaServiceImpl.getGraphEndPoint().contains(host)) { type = StorageTypeEnum.ONE_DRIVE_CHINA; - } else if (oneDriveService.getGraphEndPoint().contains(host)) { + } else if (oneDriveServiceImpl.getGraphEndPoint().contains(host)) { type = StorageTypeEnum.ONE_DRIVE; } else { return clientHttpRequestExecution.execute(httpRequest, bytes); diff --git a/src/main/java/im/zhaojun/onedrive/common/controller/OneDriveController.java b/src/main/java/im/zhaojun/onedrive/common/controller/OneDriveController.java index bb633e3..e113392 100644 --- a/src/main/java/im/zhaojun/onedrive/common/controller/OneDriveController.java +++ b/src/main/java/im/zhaojun/onedrive/common/controller/OneDriveController.java @@ -1,8 +1,8 @@ package im.zhaojun.onedrive.common.controller; -import im.zhaojun.onedrive.china.service.OneDriveChinaService; +import im.zhaojun.onedrive.china.service.OneDriveChinaServiceImpl; import im.zhaojun.onedrive.common.model.OneDriveToken; -import im.zhaojun.onedrive.international.service.OneDriveService; +import im.zhaojun.onedrive.international.service.OneDriveServiceImpl; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -18,14 +18,14 @@ import javax.annotation.Resource; public class OneDriveController { @Resource - private OneDriveService oneDriveService; + private OneDriveServiceImpl oneDriveServiceImpl; @Resource - private OneDriveChinaService oneDriveChinaService; + private OneDriveChinaServiceImpl oneDriveChinaServiceImpl; @GetMapping("/callback") public String onedriveCallback(String code, Model model) { - OneDriveToken oneDriveToken = oneDriveService.getToken(code); + OneDriveToken oneDriveToken = oneDriveServiceImpl.getToken(code); model.addAttribute("accessToken", oneDriveToken.getAccessToken()); model.addAttribute("refreshToken", oneDriveToken.getRefreshToken()); return "callback"; @@ -34,7 +34,7 @@ public class OneDriveController { @GetMapping("/china-callback") public String onedriveChinaCallback(String code, Model model) { - OneDriveToken oneDriveToken = oneDriveChinaService.getToken(code); + OneDriveToken oneDriveToken = oneDriveChinaServiceImpl.getToken(code); model.addAttribute("accessToken", oneDriveToken.getAccessToken()); model.addAttribute("refreshToken", oneDriveToken.getRefreshToken()); return "callback"; diff --git a/src/main/java/im/zhaojun/onedrive/common/service/AbstractOneDriveService.java b/src/main/java/im/zhaojun/onedrive/common/service/AbstractOneDriveService.java index 9e9686f..a020c4c 100644 --- a/src/main/java/im/zhaojun/onedrive/common/service/AbstractOneDriveService.java +++ b/src/main/java/im/zhaojun/onedrive/common/service/AbstractOneDriveService.java @@ -11,23 +11,24 @@ import im.zhaojun.common.model.StorageConfig; import im.zhaojun.common.model.constant.StorageConfigConstant; import im.zhaojun.common.model.dto.FileItemDTO; import im.zhaojun.common.model.enums.FileTypeEnum; -import im.zhaojun.common.model.enums.StorageTypeEnum; import im.zhaojun.common.repository.StorageConfigRepository; +import im.zhaojun.common.service.AbstractFileService; +import im.zhaojun.common.service.StorageConfigService; import im.zhaojun.common.util.StringUtils; import im.zhaojun.onedrive.common.model.OneDriveToken; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; -import java.net.URLDecoder; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** * @author Zhao Jun * 2020/1/29 11:54 */ -public abstract class AbstractOneDriveService { +public abstract class AbstractOneDriveService extends AbstractFileService { protected static final String DRIVER_INFO_URL = "https://{graphEndPoint}/v1.0/me/drives"; @@ -45,9 +46,12 @@ public abstract class AbstractOneDriveService { @Resource private StorageConfigRepository storageConfigRepository; - public OneDriveToken getRefreshToken(StorageTypeEnum storageType) { + @Resource + private StorageConfigService storageConfigService; + + public OneDriveToken getRefreshToken() { StorageConfig refreshStorageConfig = - storageConfigRepository.findByTypeAndKey(storageType, StorageConfigConstant.REFRESH_TOKEN_KEY); + storageConfigRepository.findByTypeAndKey(this.getStorageTypeEnum(), StorageConfigConstant.REFRESH_TOKEN_KEY); String param = "client_id=" + getClientId() + "&redirect_uri=" + getRedirectUri() + @@ -79,13 +83,12 @@ public abstract class AbstractOneDriveService { return JSONObject.parseObject(response.body(), OneDriveToken.class); } - - public String getUserInfo() { return oneDriveRestTemplate.getForObject(DRIVER_INFO_URL, String.class); } - public List list(String basePath, String path) { + @Override + public List fileList(String path) { path = StringUtils.removeFirstSeparator(path); String fullPath = StringUtils.getFullPath(basePath, path); @@ -137,11 +140,14 @@ public abstract class AbstractOneDriveService { return result; } + @Override + public FileItemDTO getFileItem(String path) { + + String fullPath = StringUtils.getFullPath(basePath, path); - public FileItemDTO getItem(String path) { String requestUrl; - ResponseEntity responseEntity = oneDriveRestTemplate.getForEntity(DRIVER_ITEM_URL, String.class, path); + ResponseEntity responseEntity = oneDriveRestTemplate.getForEntity(DRIVER_ITEM_URL, String.class, getGraphEndPoint(), fullPath); String body = responseEntity.getBody(); JSONObject fileItem = JSON.parseObject(body); @@ -174,4 +180,21 @@ public abstract class AbstractOneDriveService { public abstract String getClientSecret(); public abstract String getScope(); + + public void refreshOneDriveToken() { + OneDriveToken refreshToken = getRefreshToken(); + + if (refreshToken.getAccessToken() == null || refreshToken.getRefreshToken() == null) { + return; + } + + StorageConfig accessTokenConfig = + storageConfigService.selectByTypeAndKey(this.getStorageTypeEnum(), StorageConfigConstant.ACCESS_TOKEN_KEY); + StorageConfig refreshTokenConfig = + storageConfigService.selectByTypeAndKey(this.getStorageTypeEnum(), StorageConfigConstant.REFRESH_TOKEN_KEY); + accessTokenConfig.setValue(refreshToken.getAccessToken()); + refreshTokenConfig.setValue(refreshToken.getRefreshToken()); + + storageConfigService.updateStorageConfig(Arrays.asList(accessTokenConfig, refreshTokenConfig)); + } }