Skip to content

Commit f1c61a5

Browse files
committed
decode token
1 parent 1ba2cc8 commit f1c61a5

File tree

7 files changed

+75
-18
lines changed

7 files changed

+75
-18
lines changed

library/src/androidTest/java/com/qiniu/android/FormUploadTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public void complete(String k, ResponseInfo rinfo, JSONObject response) {
133133
e.printStackTrace();
134134
}
135135
Assert.assertEquals(expectKey, key);
136-
Assert.assertEquals(401, info.statusCode);
136+
Assert.assertEquals(ResponseInfo.InvalidArgument, info.statusCode);
137137
Assert.assertNotNull(info.reqId);
138138
Assert.assertNull(resp);
139139
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.qiniu.android;
2+
3+
import android.test.AndroidTestCase;
4+
5+
import com.qiniu.android.storage.UpToken;
6+
7+
import junit.framework.Assert;
8+
9+
/**
10+
* Created by bailong on 15/6/1.
11+
*/
12+
public class TokenTest extends AndroidTestCase {
13+
public void testRight(){
14+
UpToken t = UpToken.parse(TestConfig.token);
15+
Assert.assertNotNull(t);
16+
}
17+
}

library/src/main/java/com/qiniu/android/http/ResponseInfo.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
* 定义HTTP请求的日志信息和常规方法
88
*/
99
public final class ResponseInfo {
10+
public static final int InvalidToken = -5;
1011
public static final int InvalidArgument = -4;
1112
public static final int InvalidFile = -3;
1213
public static final int Cancelled = -2;

library/src/main/java/com/qiniu/android/storage/FormUploader.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.qiniu.android.storage;
22

3-
import com.qiniu.android.common.Constants;
43
import com.qiniu.android.http.CompletionHandler;
54
import com.qiniu.android.http.HttpManager;
65
import com.qiniu.android.http.PostArgs;
@@ -34,7 +33,7 @@ final class FormUploader {
3433
* @param completionHandler 上传完成后续处理动作
3534
* @param options 上传时的可选参数
3635
*/
37-
static void upload(HttpManager httpManager, Configuration config, byte[] data, String key, String token, final UpCompletionHandler completionHandler,
36+
static void upload(HttpManager httpManager, Configuration config, byte[] data, String key, UpToken token, final UpCompletionHandler completionHandler,
3837
final UploadOptions options) {
3938
post(data, null, key, token, completionHandler, options, httpManager, config);
4039
}
@@ -49,12 +48,12 @@ static void upload(HttpManager httpManager, Configuration config, byte[] data, S
4948
* @param completionHandler 上传完成后续处理动作
5049
* @param options 上传时的可选参数
5150
*/
52-
static void upload(HttpManager httpManager, Configuration config, File file, String key, String token, UpCompletionHandler completionHandler,
51+
static void upload(HttpManager httpManager, Configuration config, File file, String key, UpToken token, UpCompletionHandler completionHandler,
5352
UploadOptions options) {
5453
post(null, file, key, token, completionHandler, options, httpManager, config);
5554
}
5655

57-
private static void post(byte[] data, File file, String k, String token, final UpCompletionHandler completionHandler,
56+
private static void post(byte[] data, File file, String k, UpToken token, final UpCompletionHandler completionHandler,
5857
final UploadOptions optionsIn, final HttpManager httpManager, final Configuration config) {
5958
final String key = k;
6059
Map<String, String> params = new HashMap<String, String>();
@@ -66,7 +65,7 @@ private static void post(byte[] data, File file, String k, String token, final U
6665
args.fileName = "?";
6766
}
6867

69-
params.put("token", token);
68+
params.put("token", token.token);
7069

7170
final UploadOptions options = optionsIn != null ? optionsIn : UploadOptions.defaultOptions();
7271
params.putAll(options.params);

library/src/main/java/com/qiniu/android/storage/ResumeUploader.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,9 @@ final class ResumeUploader implements Runnable {
5151
private RandomAccessFile file;
5252
private File f;
5353
private long crc32;
54+
private UpToken token;
5455

55-
ResumeUploader(HttpManager httpManager, Configuration config, File file, String key, String token,
56+
ResumeUploader(HttpManager httpManager, Configuration config, File file, String key, UpToken token,
5657
UpCompletionHandler completionHandler, UploadOptions options, String recorderKey) {
5758
this.httpManager = httpManager;
5859
this.config = config;
@@ -61,13 +62,14 @@ final class ResumeUploader implements Runnable {
6162
this.size = (int) file.length();
6263
this.key = key;
6364
this.headers = new Header[1];
64-
headers[0] = new BasicHeader("Authorization", "UpToken " + token);
65+
headers[0] = new BasicHeader("Authorization", "UpToken " + token.token);
6566
this.completionHandler = completionHandler;
6667
this.options = options != null ? options : UploadOptions.defaultOptions();
6768
chunkBuffer = new byte[config.chunkSize];
6869
long count = (size + Configuration.BLOCK_SIZE - 1) / Configuration.BLOCK_SIZE;
6970
contexts = new String[(int) count];
7071
modifyTime = f.lastModified();
72+
this.token = token;
7173
}
7274

7375
public void run() {

library/src/main/java/com/qiniu/android/storage/UpPolicy.java renamed to library/src/main/java/com/qiniu/android/storage/UpToken.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,22 @@
66
import org.json.JSONObject;
77

88
/**
9-
* Created by bailong on 15/5/25.
9+
* 内部使用的客户端 token 检查.
1010
*/
11-
final class UpPolicy {
11+
public final class UpToken {
1212
private String returnUrl = null;
13-
static UpPolicy parse(String token){
14-
byte[] dtoken = UrlSafeBase64.decode(token);
13+
public final String token;
14+
public static UpToken parse(String token){
15+
String[] t;
16+
try {
17+
t = token.split(":");
18+
}catch (Exception e){
19+
return null;
20+
}
21+
if (t.length != 3){
22+
return null;
23+
}
24+
byte[] dtoken = UrlSafeBase64.decode(t[2]);
1525
JSONObject obj;
1626
try {
1727
obj = new JSONObject(new String(dtoken));
@@ -27,11 +37,16 @@ static UpPolicy parse(String token){
2737
if (deadline == 0){
2838
return null;
2939
}
30-
return new UpPolicy(obj);
40+
return new UpToken(obj, token);
3141
}
3242

33-
private UpPolicy(JSONObject obj){
43+
private UpToken(JSONObject obj, String token){
3444
returnUrl = obj.optString("returnUrl");
45+
this.token = token;
46+
}
47+
48+
public String toString(){
49+
return token;
3550
}
3651

3752
private boolean hasReturnUrl(){

library/src/main/java/com/qiniu/android/storage/UploadManager.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,22 @@ public void put(final byte[] data, final String key, final String token,
7474
if (areInvalidArg(key, data, null, token, completionHandler)) {
7575
return;
7676
}
77+
78+
final UpToken decodedToken = UpToken.parse(token);
79+
if (decodedToken == null){
80+
final ResponseInfo info = ResponseInfo.invalidArgument("invalid token");
81+
AsyncRun.run(new Runnable() {
82+
@Override
83+
public void run() {
84+
completionHandler.complete(key, info, null);
85+
}
86+
});
87+
return;
88+
}
7789
AsyncRun.run(new Runnable() {
7890
@Override
7991
public void run() {
80-
FormUploader.upload(httpManager, config, data, key, token, completionHandler, options);
92+
FormUploader.upload(httpManager, config, data, key, decodedToken, completionHandler, options);
8193
}
8294
});
8395
}
@@ -105,19 +117,30 @@ public void put(String filePath, String key, String token, UpCompletionHandler c
105117
* @param completionHandler 上传完成的后续处理动作
106118
* @param options 上传数据的可选参数
107119
*/
108-
public void put(File file, String key, String token, UpCompletionHandler completionHandler,
120+
public void put(File file, final String key, String token, final UpCompletionHandler completionHandler,
109121
final UploadOptions options) {
110122
if (areInvalidArg(key, null, file, token, completionHandler)) {
111123
return;
112124
}
125+
UpToken decodedToken = UpToken.parse(token);
126+
if (decodedToken == null){
127+
final ResponseInfo info = ResponseInfo.invalidArgument("invalid token");
128+
AsyncRun.run(new Runnable() {
129+
@Override
130+
public void run() {
131+
completionHandler.complete(key, info, null);
132+
}
133+
});
134+
return;
135+
}
113136
long size = file.length();
114137
if (size <= config.putThreshold) {
115-
FormUploader.upload(httpManager, config, file, key, token, completionHandler, options);
138+
FormUploader.upload(httpManager, config, file, key, decodedToken, completionHandler, options);
116139
return;
117140
}
118141
String recorderKey = config.keyGen.gen(key, file);
119142
ResumeUploader uploader = new ResumeUploader(httpManager, config, file, key,
120-
token, completionHandler, options, recorderKey);
143+
decodedToken, completionHandler, options, recorderKey);
121144

122145
AsyncRun.run(uploader);
123146
}

0 commit comments

Comments
 (0)