Skip to content

Commit bacc81a

Browse files
committed
fix: url encode
1 parent 4960b14 commit bacc81a

File tree

5 files changed

+73
-57
lines changed

5 files changed

+73
-57
lines changed

app/src/main/java/com/github/jsbxyyx/xbook/ViewActivity.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.jsbxyyx.xbook;
22

3+
import static com.github.jsbxyyx.xbook.common.UriUtil.urlEncode;
4+
35
import android.annotation.SuppressLint;
46
import android.content.Intent;
57
import android.os.Bundle;
@@ -95,8 +97,8 @@ protected void onCreate(Bundle savedInstanceState) {
9597
// webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
9698
// webView.clearCache(true);
9799
webView.addJavascriptInterface(new BookJavascript(this), "xbook");
98-
String name = Common.urlEncode(
99-
Common.urlEncode(
100+
String name = urlEncode(
101+
urlEncode(
100102
file_path.replace(Common.xbook_dir + "/", "")
101103
)
102104
);
@@ -129,7 +131,7 @@ protected void onCreate(Bundle savedInstanceState) {
129131
String param = String.format(
130132
"cur=%s&pages=%s&book_id=%s&name=%s&t=%s&navh=%s&file_url=%s&online=%s",
131133
cur, pages, bookId, name, System.currentTimeMillis(), navH,
132-
Common.urlEncode(fileUrl), onlineReadData
134+
urlEncode(fileUrl), onlineReadData
133135
);
134136
String url = "${htmlUrl}?${param}"
135137
.replace("${htmlUrl}", htmlUrl)

app/src/main/java/com/github/jsbxyyx/xbook/common/Common.java

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -65,46 +65,6 @@ public class Common {
6565
public static final String serv_userid = "remix_userid";
6666
public static final String serv_userkey = "remix_userkey";
6767

68-
public static String urlEncode(String source) {
69-
if (source == null || source.trim().isEmpty()) {
70-
return "";
71-
}
72-
73-
byte[] bytes = source.getBytes(StandardCharsets.UTF_8);
74-
boolean original = true;
75-
for (byte b : bytes) {
76-
if (!(
77-
(b >= 'a' && b <= 'z' || b >= 'A' && b <= 'Z')
78-
|| (b >= '0' && b <= '9')
79-
|| '-' == b || '.' == b || '_' == b || '~' == b
80-
)) {
81-
original = false;
82-
break;
83-
}
84-
}
85-
if (original) {
86-
return source;
87-
}
88-
89-
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
90-
for (byte b : bytes) {
91-
if (
92-
(b >= 'a' && b <= 'z' || b >= 'A' && b <= 'Z')
93-
|| (b >= '0' && b <= '9')
94-
|| '-' == b || '.' == b || '_' == b || '~' == b
95-
) {
96-
baos.write(b);
97-
} else {
98-
baos.write('%');
99-
char hex1 = Character.toUpperCase(Character.forDigit((b >> 4) & 0xF, 16));
100-
char hex2 = Character.toUpperCase(Character.forDigit(b & 0xF, 16));
101-
baos.write(hex1);
102-
baos.write(hex2);
103-
}
104-
}
105-
return new String(baos.toByteArray(), StandardCharsets.UTF_8);
106-
}
107-
10868
public static boolean statusSuccessful(int status) {
10969
return status >= 200 && status <= 299;
11070
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.github.jsbxyyx.xbook.common;
2+
3+
import java.io.ByteArrayOutputStream;
4+
import java.nio.charset.StandardCharsets;
5+
6+
/**
7+
* @author jsbxyyx
8+
*/
9+
public class UriUtil {
10+
11+
public static String urlEncode(String source) {
12+
if (source == null || source.trim().isEmpty()) {
13+
return "";
14+
}
15+
16+
byte[] bytes = source.getBytes(StandardCharsets.UTF_8);
17+
boolean original = true;
18+
for (byte b : bytes) {
19+
if (!(
20+
(b >= 'a' && b <= 'z' || b >= 'A' && b <= 'Z')
21+
|| (b >= '0' && b <= '9')
22+
|| '-' == b || '.' == b || '_' == b || '~' == b
23+
)) {
24+
original = false;
25+
break;
26+
}
27+
}
28+
if (original) {
29+
return source;
30+
}
31+
32+
ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length);
33+
for (byte b : bytes) {
34+
if (
35+
(b >= 'a' && b <= 'z' || b >= 'A' && b <= 'Z')
36+
|| (b >= '0' && b <= '9')
37+
|| '-' == b || '.' == b || '_' == b || '~' == b
38+
) {
39+
baos.write(b);
40+
} else {
41+
baos.write('%');
42+
char hex1 = Character.toUpperCase(Character.forDigit((b >> 4) & 0xF, 16));
43+
char hex2 = Character.toUpperCase(Character.forDigit(b & 0xF, 16));
44+
baos.write(hex1);
45+
baos.write(hex2);
46+
}
47+
}
48+
return new String(baos.toByteArray(), StandardCharsets.UTF_8);
49+
}
50+
51+
}

app/src/main/java/com/github/jsbxyyx/xbook/data/BookNetHelper.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static com.github.jsbxyyx.xbook.common.Common.getXurl;
44
import static com.github.jsbxyyx.xbook.common.Common.getXburl;
55
import static com.github.jsbxyyx.xbook.common.Common.zurl;
6+
import static com.github.jsbxyyx.xbook.common.UriUtil.urlEncode;
67

78
import androidx.annotation.NonNull;
89

@@ -58,7 +59,7 @@ public class BookNetHelper {
5859
public void search(String keyword, int page, List<String> languages, List<String> extensions, DataCallback<List<Book>> dataCallback) {
5960
Map<String, Object> object = new HashMap<>();
6061

61-
String reqUrl = zurl + "/s/" + Common.urlEncode(keyword);
62+
String reqUrl = zurl + "/s/" + urlEncode(keyword);
6263
object.put("method", "GET");
6364
object.put("url", reqUrl);
6465

@@ -201,11 +202,11 @@ public void login(String email, String password, DataCallback dataCallback) {
201202

202203
StringBuilder data = new StringBuilder();
203204
data.append("isModal=true").append("&");
204-
data.append("email=").append(Common.urlEncode(email)).append("&");
205-
data.append("password=").append(Common.urlEncode(password)).append("&");
205+
data.append("email=").append(urlEncode(email)).append("&");
206+
data.append("password=").append(urlEncode(password)).append("&");
206207
data.append("site_mode=books").append("&");
207208
data.append("action=login").append("&");
208-
data.append("redirectUrl=").append(Common.urlEncode(zurl)).append("&");
209+
data.append("redirectUrl=").append(urlEncode(zurl)).append("&");
209210
data.append("gg_json_mode=1");
210211
object.put("data", data.toString());
211212

@@ -506,7 +507,7 @@ public void sendCode(String email, String password, String nickname, DataCallbac
506507
Map<String, Object> data = new HashMap<>();
507508
data.put("email", email);
508509
data.put("password", password);
509-
data.put("name", Common.isBlank(nickname) ? Common.urlEncode(email.split("\\@")[0]) : Common.urlEncode(nickname));
510+
data.put("name", Common.isBlank(nickname) ? urlEncode(email.split("\\@")[0]) : urlEncode(nickname));
510511
data.put("rx", "215");
511512
data.put("action", "registration");
512513
data.put("redirectUrl", "");
@@ -626,9 +627,9 @@ public void registration(String email, String password, String verifyCode, Strin
626627

627628
StringBuilder data = new StringBuilder();
628629
data.append("isModal=true").append("&");
629-
data.append("email=").append(Common.urlEncode(email)).append("&");
630-
data.append("password=").append(Common.urlEncode(password)).append("&");
631-
data.append("name=").append(Common.isBlank(nickname) ? Common.urlEncode(email.split("\\@")[0]) : Common.urlEncode(nickname)).append("&");
630+
data.append("email=").append(urlEncode(email)).append("&");
631+
data.append("password=").append(urlEncode(password)).append("&");
632+
data.append("name=").append(Common.isBlank(nickname) ? urlEncode(email.split("\\@")[0]) : urlEncode(nickname)).append("&");
632633
data.append("rx=215").append("&");
633634
data.append("action=registration").append("&");
634635
data.append("redirectUrl=").append("&");
@@ -706,7 +707,7 @@ public void call(JsonNode o, Throwable err) {
706707
object.put("headers", headers);
707708

708709
Map<String, Object> data = new HashMap<>();
709-
data.put("title", Common.urlEncode(book.getId() + "-" + book.getTitle() + Common.book_metadata_suffix));
710+
data.put("title", urlEncode(book.getId() + "-" + book.getTitle() + Common.book_metadata_suffix));
710711
data.put("raw", Base64.getEncoder().encodeToString(JsonUtil.toJson(book).getBytes(StandardCharsets.UTF_8)));
711712
data.put("sha", book.extractSha());
712713
object.put("data", data);
@@ -764,7 +765,7 @@ public void cloudSyncRaw(Book book, DataCallback dataCallback) {
764765
byte[] bytes = Files.readAllBytes(new File(file_path).toPath());
765766

766767
Map<String, Object> data = new HashMap<>();
767-
data.put("title", Common.urlEncode(book.getId() + "-" + book.getTitle() + "." + MediaTypeFactory.getFilenameExtension(file_path)));
768+
data.put("title", urlEncode(book.getId() + "-" + book.getTitle() + "." + MediaTypeFactory.getFilenameExtension(file_path)));
768769
data.put("raw", Base64.getEncoder().encodeToString(bytes));
769770
object.put("data", data);
770771

@@ -868,7 +869,7 @@ public void cloudDownload(String title, String token, DataCallback dataCallback)
868869
object.put("headers", headers);
869870

870871
Map<String, Object> data = new HashMap<>();
871-
data.put("title", Common.urlEncode(title));
872+
data.put("title", urlEncode(title));
872873
data.put("token", token);
873874
object.put("data", data);
874875

@@ -912,7 +913,7 @@ public void cloudLog(MLog mLog, DataCallback dataCallback) {
912913
object.put("headers", headers);
913914

914915
Map<String, Object> data = new HashMap<>();
915-
data.put("title", Common.urlEncode(mLog.getTitle()));
916+
data.put("title", urlEncode(mLog.getTitle()));
916917
data.put("raw", Base64.getEncoder().encodeToString(mLog.getRaw().getBytes(StandardCharsets.UTF_8)));
917918
object.put("data", data);
918919

@@ -964,7 +965,7 @@ public void cloudGetMeta(Book book, DataCallback dataCallback) {
964965
object.put("headers", headers);
965966

966967
Map<String, Object> data = new HashMap<>();
967-
data.put("title", Common.urlEncode(book.getId() + "-" + book.getTitle() + Common.book_metadata_suffix));
968+
data.put("title", urlEncode(book.getId() + "-" + book.getTitle() + Common.book_metadata_suffix));
968969
data.put("raw", "");
969970
object.put("data", data);
970971

app/src/main/java/com/github/jsbxyyx/xbook/httpserver/FileHttpServer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.jsbxyyx.xbook.httpserver;
22

3+
import static com.github.jsbxyyx.xbook.common.UriUtil.urlEncode;
4+
35
import com.github.jsbxyyx.xbook.common.Common;
46
import com.github.jsbxyyx.xbook.common.LogUtil;
57
import com.github.jsbxyyx.xbook.common.UiUtils;
@@ -67,7 +69,7 @@ public Response serve(IHTTPSession session) {
6769
if (files != null && files.length > 0) {
6870
for (File file : files) {
6971
String name = file.getAbsolutePath().replace(Common.xbook_dir + "/", "");
70-
String href = Common.urlEncode(name);
72+
String href = urlEncode(name);
7173
answer += "<a href=\"" + href + "\" alt = \"\">" + name + "</a><br>";
7274
}
7375
}

0 commit comments

Comments
 (0)