Skip to content
This repository was archived by the owner on Jul 21, 2024. It is now read-only.

Commit 484716c

Browse files
committed
+ 3.0.5 未登录请求本地拦截
1 parent a23bc8b commit 484716c

File tree

15 files changed

+239
-107
lines changed

15 files changed

+239
-107
lines changed

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
FROM ubuntu:22.04 as builder
2+
# Allow ubuntu to cache package downloads
3+
RUN rm -f /etc/apt/apt.conf.d/docker-clean
24
RUN --mount=type=cache,target=/var/cache/apt \
35
apt update \
46
&& DEBIAN_FRONTEND=noninteractive apt install -y curl build-essential libz-dev zlib1g-dev

aliyundrive-sdk-openapi/src/main/java/net/xdow/aliyundrive/IAliyunDrive.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
import java.util.Map;
99

1010
public interface IAliyunDrive {
11+
12+
int FLAG_API_ANONYMOUS_CALL = 1 << 0;
13+
int FLAG_API_AUTHENTICATION_CALL = 1 << 1;
1114
AliyunDriveCall<AliyunDriveResponse.AccessTokenInfo> getAccessToken(AliyunDriveRequest.AccessTokenInfo query);
1215
AliyunDriveCall<AliyunDriveResponse.QrCodeGenerateInfo> qrCodeGenerate(AliyunDriveRequest.QrCodeGenerateInfo query);
1316

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package net.xdow.aliyundrive.exception;
2+
3+
public class NotAuthenticatedException extends IllegalStateException {
4+
public NotAuthenticatedException() {
5+
}
6+
7+
public NotAuthenticatedException(String s) {
8+
super(s);
9+
}
10+
11+
public NotAuthenticatedException(String message, Throwable cause) {
12+
super(message, cause);
13+
}
14+
15+
public NotAuthenticatedException(Throwable cause) {
16+
super(cause);
17+
}
18+
}

aliyundrive-sdk-openapi/src/main/java/net/xdow/aliyundrive/exception/NotAuthorizeException.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

aliyundrive-sdk-openapi/src/main/java/net/xdow/aliyundrive/impl/AliyunDriveOpenApiImplV1.java

Lines changed: 67 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
import net.xdow.aliyundrive.bean.AliyunDriveFilePartInfo;
88
import net.xdow.aliyundrive.bean.AliyunDriveRequest;
99
import net.xdow.aliyundrive.bean.AliyunDriveResponse;
10-
import net.xdow.aliyundrive.net.AccessTokenInvalidInterceptor;
1110
import net.xdow.aliyundrive.net.AliyunDriveCall;
12-
import net.xdow.aliyundrive.net.XHttpLoggingInterceptor;
11+
import net.xdow.aliyundrive.net.interceptor.AccessTokenInvalidInterceptor;
12+
import net.xdow.aliyundrive.net.interceptor.AliyunDriveAuthenticateInterceptor;
13+
import net.xdow.aliyundrive.net.interceptor.XHttpLoggingInterceptor;
1314
import net.xdow.aliyundrive.util.JsonUtils;
1415
import net.xdow.aliyundrive.util.StringUtils;
1516
import okhttp3.*;
@@ -18,7 +19,7 @@
1819
import java.util.*;
1920
import java.util.concurrent.TimeUnit;
2021

21-
public class AliyunDriveOpenApiImplV1 implements IAliyunDrive {
22+
public class AliyunDriveOpenApiImplV1 implements IAliyunDrive, AliyunDriveAuthenticateInterceptor.IAccessTokenInfoGetter {
2223

2324
private OkHttpClient mOkHttpClient;
2425
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
@@ -33,8 +34,10 @@ public AliyunDriveOpenApiImplV1() {
3334

3435
private void initOkHttp() {
3536
XHttpLoggingInterceptor loggingInterceptor = new XHttpLoggingInterceptor();
37+
AliyunDriveAuthenticateInterceptor authenticateInterceptor = new AliyunDriveAuthenticateInterceptor(this);
3638
this.mOkHttpClient = new OkHttpClient.Builder()
3739
.addInterceptor(loggingInterceptor)//response ↑
40+
.addInterceptor(authenticateInterceptor) //response ↑
3841
.addInterceptor(this.mAccessTokenInvalidInterceptor) //response ↑
3942
.addInterceptor(new Interceptor() {
4043
@Override
@@ -109,21 +112,20 @@ private Request buildCommonRequestHeader(Request request) {
109112

110113
@Override
111114
public AliyunDriveCall<AliyunDriveResponse.AccessTokenInfo> getAccessToken(String url) {
112-
return postApiRequest(url, AliyunDriveResponse.AccessTokenInfo.class);
115+
return postApiRequest(url, AliyunDriveResponse.AccessTokenInfo.class, FLAG_API_ANONYMOUS_CALL);
113116
}
114117

115118
@Override
116119
public AliyunDriveCall<AliyunDriveResponse.QrCodeGenerateInfo> qrCodeGenerate(String url) {
117-
return postApiRequest(url, AliyunDriveResponse.QrCodeGenerateInfo.class);
120+
return postApiRequest(url, AliyunDriveResponse.QrCodeGenerateInfo.class, FLAG_API_ANONYMOUS_CALL);
118121
}
119122

120123
@Override
121124
public AliyunDriveCall<AliyunDriveResponse.QrCodeQueryStatusInfo> qrCodeQueryStatus(String sid) {
122125
String url = String.format(Locale.getDefault(), AliyunDriveConstant.API_QRCODE_QUERY_STATUS, sid);
123-
return getApiRequest(url, AliyunDriveResponse.QrCodeQueryStatusInfo.class);
126+
return getApiRequest(url, AliyunDriveResponse.QrCodeQueryStatusInfo.class, FLAG_API_ANONYMOUS_CALL);
124127
}
125128

126-
127129
@Override
128130
public String qrCodeImageUrl(String sid) {
129131
return String.format(Locale.getDefault(), AliyunDriveConstant.API_QRCODE_IMAGE, sid);
@@ -140,37 +142,44 @@ public AliyunDriveCall<AliyunDriveResponse.AccessTokenInfo> getAccessToken(Aliyu
140142
return new AliyunDriveCall<>(res);
141143
}
142144
}
143-
return postApiRequest(AliyunDriveConstant.API_ACCESS_TOKEN, query, AliyunDriveResponse.AccessTokenInfo.class);
145+
return postApiRequest(AliyunDriveConstant.API_ACCESS_TOKEN, query,
146+
AliyunDriveResponse.AccessTokenInfo.class, FLAG_API_ANONYMOUS_CALL);
144147
}
145148

146149
@Override
147150
public AliyunDriveCall<AliyunDriveResponse.QrCodeGenerateInfo> qrCodeGenerate(AliyunDriveRequest.QrCodeGenerateInfo query) {
148-
return postApiRequest(AliyunDriveConstant.API_QRCODE_GENERATE, query, AliyunDriveResponse.QrCodeGenerateInfo.class);
151+
return postApiRequest(AliyunDriveConstant.API_QRCODE_GENERATE, query,
152+
AliyunDriveResponse.QrCodeGenerateInfo.class, FLAG_API_ANONYMOUS_CALL);
149153
}
150154

151155
@Override
152156
public AliyunDriveCall<AliyunDriveResponse.FileListInfo> fileList(AliyunDriveRequest.FileListInfo query) {
153-
return postApiRequest(AliyunDriveConstant.API_FILE_LIST, query, AliyunDriveResponse.FileListInfo.class);
157+
return postApiRequest(AliyunDriveConstant.API_FILE_LIST, query,
158+
AliyunDriveResponse.FileListInfo.class, FLAG_API_AUTHENTICATION_CALL);
154159
}
155160

156161
@Override
157162
public AliyunDriveCall<AliyunDriveResponse.UserSpaceInfo> getUserSpaceInfo() {
158-
return postApiRequest(AliyunDriveConstant.API_USER_GET_SPACE_INFO, AliyunDriveResponse.UserSpaceInfo.class);
163+
return postApiRequest(AliyunDriveConstant.API_USER_GET_SPACE_INFO,
164+
AliyunDriveResponse.UserSpaceInfo.class, FLAG_API_AUTHENTICATION_CALL);
159165
}
160166

161167
@Override
162168
public AliyunDriveCall<AliyunDriveResponse.UserDriveInfo> getUserDriveInfo() {
163-
return postApiRequest(AliyunDriveConstant.API_USER_GET_DRIVE_INFO, AliyunDriveResponse.UserDriveInfo.class);
169+
return postApiRequest(AliyunDriveConstant.API_USER_GET_DRIVE_INFO,
170+
AliyunDriveResponse.UserDriveInfo.class, FLAG_API_AUTHENTICATION_CALL);
164171
}
165172

166173
@Override
167174
public AliyunDriveCall<AliyunDriveResponse.FileGetInfo> fileGet(AliyunDriveRequest.FileGetInfo query) {
168-
return postApiRequest(AliyunDriveConstant.API_FILE_GET, query, AliyunDriveResponse.FileGetInfo.class);
175+
return postApiRequest(AliyunDriveConstant.API_FILE_GET, query,
176+
AliyunDriveResponse.FileGetInfo.class, FLAG_API_AUTHENTICATION_CALL);
169177
}
170178

171179
@Override
172180
public AliyunDriveCall<AliyunDriveResponse.FileBatchGetInfo> fileBatchGet(AliyunDriveRequest.FileBatchGetInfo query) {
173-
return postApiRequest(AliyunDriveConstant.API_FILE_BATCH_GET, query, AliyunDriveResponse.FileBatchGetInfo.class);
181+
return postApiRequest(AliyunDriveConstant.API_FILE_BATCH_GET, query,
182+
AliyunDriveResponse.FileBatchGetInfo.class, FLAG_API_AUTHENTICATION_CALL);
174183
}
175184

176185
@Override
@@ -179,7 +188,8 @@ public AliyunDriveCall<AliyunDriveResponse.FileGetDownloadUrlInfo> fileGetDownlo
179188
if (expireSec < 900 || expireSec > 115200) {
180189
throw new IllegalArgumentException("Error: expire_sec argument must between 900-115200s, got: " + expireSec);
181190
}
182-
return postApiRequest(AliyunDriveConstant.API_FILE_GET_DOWNLOAD_URL, query, AliyunDriveResponse.FileGetDownloadUrlInfo.class);
191+
return postApiRequest(AliyunDriveConstant.API_FILE_GET_DOWNLOAD_URL, query,
192+
AliyunDriveResponse.FileGetDownloadUrlInfo.class, FLAG_API_AUTHENTICATION_CALL);
183193
}
184194

185195
@Override
@@ -192,22 +202,26 @@ public AliyunDriveCall<AliyunDriveResponse.FileCreateInfo> fileCreate(AliyunDriv
192202
+ AliyunDriveConstant.MAX_FILE_CREATE_PART_INFO_LIST_SIZE + ", got: " + partInfoListSize);
193203
}
194204
}
195-
return postApiRequest(AliyunDriveConstant.API_FILE_CREATE, query, AliyunDriveResponse.FileCreateInfo.class);
205+
return postApiRequest(AliyunDriveConstant.API_FILE_CREATE, query,
206+
AliyunDriveResponse.FileCreateInfo.class, FLAG_API_AUTHENTICATION_CALL);
196207
}
197208

198209
@Override
199210
public AliyunDriveCall<AliyunDriveResponse.FileGetUploadUrlInfo> fileGetUploadUrl(AliyunDriveRequest.FileGetUploadUrlInfo query) {
200-
return postApiRequest(AliyunDriveConstant.API_FILE_GET_UPLOAD_URL, query, AliyunDriveResponse.FileGetUploadUrlInfo.class);
211+
return postApiRequest(AliyunDriveConstant.API_FILE_GET_UPLOAD_URL, query,
212+
AliyunDriveResponse.FileGetUploadUrlInfo.class, FLAG_API_AUTHENTICATION_CALL);
201213
}
202214

203215
@Override
204216
public AliyunDriveCall<AliyunDriveResponse.FileListUploadPartsInfo> fileListUploadedParts(AliyunDriveRequest.FileListUploadPartsInfo query) {
205-
return postApiRequest(AliyunDriveConstant.API_FILE_LIST_UPLOADED_PARTS, query, AliyunDriveResponse.FileListUploadPartsInfo.class);
217+
return postApiRequest(AliyunDriveConstant.API_FILE_LIST_UPLOADED_PARTS, query,
218+
AliyunDriveResponse.FileListUploadPartsInfo.class, FLAG_API_AUTHENTICATION_CALL);
206219
}
207220

208221
@Override
209222
public AliyunDriveCall<AliyunDriveResponse.FileUploadCompleteInfo> fileUploadComplete(AliyunDriveRequest.FileUploadCompleteInfo query) {
210-
return postApiRequest(AliyunDriveConstant.API_FILE_UPLOAD_COMPLETE, query, AliyunDriveResponse.FileUploadCompleteInfo.class);
223+
return postApiRequest(AliyunDriveConstant.API_FILE_UPLOAD_COMPLETE, query,
224+
AliyunDriveResponse.FileUploadCompleteInfo.class, FLAG_API_AUTHENTICATION_CALL);
211225
}
212226

213227
@Override
@@ -224,32 +238,38 @@ public AliyunDriveCall<AliyunDriveResponse.FileRenameInfo> fileRename(AliyunDriv
224238
);
225239
this.fileDelete(deleteQuery).execute();
226240
}
227-
return postApiRequest(AliyunDriveConstant.API_FILE_RENAME, query, AliyunDriveResponse.FileRenameInfo.class);
241+
return postApiRequest(AliyunDriveConstant.API_FILE_RENAME, query,
242+
AliyunDriveResponse.FileRenameInfo.class, FLAG_API_AUTHENTICATION_CALL);
228243
}
229244

230245
@Override
231246
public AliyunDriveCall<AliyunDriveResponse.FileMoveInfo> fileMove(AliyunDriveRequest.FileMoveInfo query) {
232-
return postApiRequest(AliyunDriveConstant.API_FILE_MOVE, query, AliyunDriveResponse.FileMoveInfo.class);
247+
return postApiRequest(AliyunDriveConstant.API_FILE_MOVE, query,
248+
AliyunDriveResponse.FileMoveInfo.class, FLAG_API_AUTHENTICATION_CALL);
233249
}
234250

235251
@Override
236252
public AliyunDriveCall<AliyunDriveResponse.FileCopyInfo> fileCopy(AliyunDriveRequest.FileCopyInfo query) {
237-
return postApiRequest(AliyunDriveConstant.API_FILE_COPY, query, AliyunDriveResponse.FileCopyInfo.class);
253+
return postApiRequest(AliyunDriveConstant.API_FILE_COPY, query,
254+
AliyunDriveResponse.FileCopyInfo.class, FLAG_API_AUTHENTICATION_CALL);
238255
}
239256

240257
@Override
241258
public AliyunDriveCall<AliyunDriveResponse.FileMoveToTrashInfo> fileMoveToTrash(AliyunDriveRequest.FileMoveToTrashInfo query) {
242-
return postApiRequest(AliyunDriveConstant.API_FILE_MOVE_TO_TRASH, query, AliyunDriveResponse.FileMoveToTrashInfo.class);
259+
return postApiRequest(AliyunDriveConstant.API_FILE_MOVE_TO_TRASH, query,
260+
AliyunDriveResponse.FileMoveToTrashInfo.class, FLAG_API_AUTHENTICATION_CALL);
243261
}
244262

245263
@Override
246264
public AliyunDriveCall<AliyunDriveResponse.FileDeleteInfo> fileDelete(AliyunDriveRequest.FileDeleteInfo query) {
247-
return postApiRequest(AliyunDriveConstant.API_FILE_DELETE, query, AliyunDriveResponse.FileDeleteInfo.class);
265+
return postApiRequest(AliyunDriveConstant.API_FILE_DELETE, query,
266+
AliyunDriveResponse.FileDeleteInfo.class, FLAG_API_AUTHENTICATION_CALL);
248267
}
249268

250269
@Override
251270
public Call upload(String url, byte[] bytes, final int offset, final int byteCount) {
252271
Request request = new Request.Builder()
272+
.addHeader(AliyunDriveAuthenticateInterceptor.HEADER_AUTHENTICATE_NAME, AliyunDriveAuthenticateInterceptor.HEADER_AUTHENTICATE_VALUE)
253273
.addHeader(XHttpLoggingInterceptor.SKIP_HEADER_NAME, XHttpLoggingInterceptor.SKIP_HEADER_VALUE)
254274
.put(RequestBody.create(MediaType.parse(""), bytes, offset, byteCount))
255275
.url(url).build();
@@ -260,6 +280,8 @@ public Call upload(String url, byte[] bytes, final int offset, final int byteCou
260280
public Call download(String url, String range, String ifRange) {
261281
Request.Builder builder = new Request.Builder();
262282
builder.addHeader(XHttpLoggingInterceptor.SKIP_HEADER_NAME, XHttpLoggingInterceptor.SKIP_HEADER_VALUE);
283+
builder.addHeader(AliyunDriveAuthenticateInterceptor.HEADER_AUTHENTICATE_NAME,
284+
AliyunDriveAuthenticateInterceptor.HEADER_AUTHENTICATE_VALUE);
263285

264286
if (range != null) {
265287
builder.header("range", range);
@@ -284,7 +306,7 @@ public Map<String, String> getCommonHeaders() {
284306
}
285307

286308
private <T extends AliyunDriveResponse.GenericMessageInfo> AliyunDriveCall<T> getApiRequest(
287-
String url, Class<T> classOfT) {
309+
String url, Class<T> classOfT, int flags) {
288310
Request request = new Request.Builder()
289311
.url(url)
290312
.get()
@@ -293,20 +315,28 @@ private <T extends AliyunDriveResponse.GenericMessageInfo> AliyunDriveCall<T> ge
293315
}
294316

295317
private <T extends AliyunDriveResponse.GenericMessageInfo> AliyunDriveCall<T> postApiRequest(
296-
String url, Class<T> classOfT) {
297-
Request request = new Request.Builder()
298-
.url(url)
299-
.post(RequestBody.create(JSON, "{}"))
300-
.build();
301-
return new AliyunDriveCall<>(this.mOkHttpClient.newCall(request), classOfT);
318+
String url, Class<T> classOfT, int flags) {
319+
return postApiRequest(url, null, classOfT, flags);
302320
}
303321

304322
private <T extends AliyunDriveResponse.GenericMessageInfo> AliyunDriveCall<T> postApiRequest(
305-
String url, Object object, Class<T> classOfT) {
306-
Request request = new Request.Builder()
307-
.url(url)
308-
.post(RequestBody.create(JSON, JsonUtils.toJson(object)))
309-
.build();
310-
return new AliyunDriveCall<>(this.mOkHttpClient.newCall(request), classOfT);
323+
String url, Object object, Class<T> classOfT, int flags) {
324+
Request.Builder builder = new Request.Builder();
325+
builder.url(url);
326+
if (object == null) {
327+
builder.post(RequestBody.create(JSON, "{}"));
328+
} else {
329+
builder.post(RequestBody.create(JSON, JsonUtils.toJson(object)));
330+
}
331+
if ((FLAG_API_AUTHENTICATION_CALL & flags) != 0) {
332+
builder.addHeader(AliyunDriveAuthenticateInterceptor.HEADER_AUTHENTICATE_NAME,
333+
AliyunDriveAuthenticateInterceptor.HEADER_AUTHENTICATE_VALUE);
334+
}
335+
return new AliyunDriveCall<>(this.mOkHttpClient.newCall(builder.build()), classOfT);
336+
}
337+
338+
@Override
339+
public AliyunDriveResponse.AccessTokenInfo getAccessTokenInfo() {
340+
return this.mAccessTokenInfo;
311341
}
312342
}

aliyundrive-sdk-openapi/src/main/java/net/xdow/aliyundrive/net/AliyunDriveCall.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.xdow.aliyundrive.net;
22

33
import net.xdow.aliyundrive.bean.AliyunDriveResponse;
4-
import net.xdow.aliyundrive.exception.NotAuthorizeException;
4+
import net.xdow.aliyundrive.exception.NotAuthenticatedException;
55
import net.xdow.aliyundrive.util.JsonUtils;
66
import net.xdow.aliyundrive.util.TypeReference;
77
import okhttp3.Call;
@@ -51,7 +51,7 @@ public T execute() {
5151
t = mockResultOnSuccessCallback.onSuccess(t);
5252
}
5353
return t;
54-
} catch (NotAuthorizeException e) {
54+
} catch (NotAuthenticatedException e) {
5555
throw e;
5656
} catch (Throwable t) {
5757
return handleResponseError(t);
@@ -66,7 +66,7 @@ public void checkAuthorize(T t) {
6666
return;
6767
}
6868
if ("AccessTokenInvalid".equals(t.getCode())) {
69-
throw new NotAuthorizeException(t.getMessage() + "(" + t.getCode() + ")");
69+
throw new NotAuthenticatedException(t.getMessage() + "(" + t.getCode() + ")");
7070
}
7171
}
7272

aliyundrive-sdk-openapi/src/main/java/net/xdow/aliyundrive/net/AccessTokenInvalidInterceptor.java renamed to aliyundrive-sdk-openapi/src/main/java/net/xdow/aliyundrive/net/interceptor/AccessTokenInvalidInterceptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.xdow.aliyundrive.net;
1+
package net.xdow.aliyundrive.net.interceptor;
22

33
import okhttp3.Interceptor;
44
import okhttp3.Request;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package net.xdow.aliyundrive.net.interceptor;
2+
3+
import net.xdow.aliyundrive.bean.AliyunDriveResponse;
4+
import net.xdow.aliyundrive.util.StringUtils;
5+
import okhttp3.*;
6+
7+
import java.io.IOException;
8+
9+
public class AliyunDriveAuthenticateInterceptor implements Interceptor {
10+
11+
public static final String HEADER_AUTHENTICATE_NAME = "x-authenticate!!";
12+
public static final String HEADER_AUTHENTICATE_VALUE = "1";
13+
public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
14+
private final IAccessTokenInfoGetter mIAccessTokenInfoGetter;
15+
16+
public AliyunDriveAuthenticateInterceptor(IAccessTokenInfoGetter mIAccessTokenInfoGetter) {
17+
this.mIAccessTokenInfoGetter = mIAccessTokenInfoGetter;
18+
}
19+
20+
@Override
21+
public Response intercept(Chain chain) throws IOException {
22+
Request request = chain.request();
23+
if (!HEADER_AUTHENTICATE_VALUE.equals(request.header(HEADER_AUTHENTICATE_NAME))) {
24+
return chain.proceed(request);
25+
}
26+
if (!checkAuthenticated()) {
27+
ResponseBody body = ResponseBody.create(JSON, "{\"code\":\"AccessTokenInvalid\",\"message\":\"access token is blank\",\"data\":null,\"headers\":null,\"pdsRequestId\":null,\"resultCode\":\"AccessTokenInvalid\",\"display_message\":null}");
28+
return new Response.Builder()
29+
.addHeader("content-type", "application/json; charset=utf-8")
30+
.body(body)
31+
.code(401)
32+
.message("access token is blank")
33+
.protocol(Protocol.HTTP_1_0)
34+
.request(chain.request())
35+
.build();
36+
}
37+
return chain.proceed(request.newBuilder().removeHeader(HEADER_AUTHENTICATE_NAME).build());
38+
}
39+
40+
public interface IAccessTokenInfoGetter {
41+
public AliyunDriveResponse.AccessTokenInfo getAccessTokenInfo();
42+
}
43+
44+
private boolean checkAuthenticated() {
45+
AliyunDriveResponse.AccessTokenInfo info = this.mIAccessTokenInfoGetter.getAccessTokenInfo();
46+
if (info == null) {
47+
return false;
48+
}
49+
if (StringUtils.isEmpty(info.getAccessToken())) {
50+
return false;
51+
}
52+
if (StringUtils.isEmpty(info.getRefreshToken())) {
53+
return false;
54+
}
55+
return true;
56+
}
57+
}

0 commit comments

Comments
 (0)