Skip to content

Commit 3a8bbcf

Browse files
committed
feat(chatroom): 添加 GenMetal功能并优化验证码发送逻辑
- 在 ChatroomProcessor 中添加 genMetal 方法,实现 GenMetal 图片生成功能 - 在 LoginProcessor 和 SettingsProcessor 中增加 verifySMSCodeLimiterOfIPLong 限制器,用于长时间尺度的 IP 验证码发送限制 - 更新验证码发送逻辑,增加多层限制以提高系统安全性 - 在 symphony.properties 中添加 gen.metal.url 配置项,指定 GenMetal 服务地址
1 parent 0005fe4 commit 3a8bbcf

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed

src/main/java/org/b3log/symphony/processor/ChatroomProcessor.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.b3log.symphony.processor;
2020

21+
import jodd.http.HttpRequest;
22+
import jodd.http.HttpResponse;
2123
import org.apache.commons.lang.RandomStringUtils;
2224
import org.apache.commons.lang.StringUtils;
2325
import org.apache.commons.lang.time.DateFormatUtils;
@@ -216,6 +218,28 @@ public static void register() {
216218

217219
Dispatcher.get("/chat-room/node/get", chatroomProcessor::getNode, loginCheck::handle);
218220
Dispatcher.post("/chat-room/node/push", chatroomProcessor::nodePush);
221+
222+
Dispatcher.get("/gen", chatroomProcessor::genMetal, loginCheck::handle);
223+
}
224+
225+
public void genMetal(final RequestContext context) {
226+
Set<String> params = context.getRequest().getParameterNames();
227+
String paramString = "";
228+
for (String param : params) {
229+
paramString += param + "=" + context.getRequest().getParameter(param) + "&";
230+
}
231+
paramString = "?" + paramString.substring(0, paramString.length() - 1);
232+
String genUrl = Symphonys.get("gen.metal.url") + paramString;
233+
final HttpRequest req = HttpRequest.get(genUrl).header(Common.USER_AGENT, Symphonys.USER_AGENT_BOT);
234+
final HttpResponse res = req.connectionTimeout(3000).timeout(5000).send();
235+
res.close();
236+
if (200 != res.statusCode()) {
237+
context.sendError(500);
238+
return;
239+
}
240+
String body = res.charset("utf-8").bodyText();
241+
context.getResponse().setContentType("image/svg+xml");
242+
context.getResponse().sendBytes(body.getBytes());
219243
}
220244

221245
public void nodePush(final RequestContext context) {

src/main/java/org/b3log/symphony/processor/LoginProcessor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ public void forgetPwd(final RequestContext context) {
323323
final String userId = user.optString(Keys.OBJECT_ID);
324324
final String ip = Requests.getRemoteAddr(context.getRequest());
325325
final String name = user.optString(User.USER_NAME);
326-
if (verifySMSCodeLimiterOfIP.access(ip) && verifySMSCodeLimiterOfName.access(name) && verifySMSCodeLimiterOfPhone.access(phone)) {
326+
if (verifySMSCodeLimiterOfIPLong.access(ip) && verifySMSCodeLimiterOfIP.access(ip) && verifySMSCodeLimiterOfName.access(name) && verifySMSCodeLimiterOfPhone.access(phone)) {
327327
final String code = RandomStringUtils.randomNumeric(6);
328328
if (!verifycodeMgmtService.sendVerifyCodeSMS(phone, code)) {
329329
context.renderMsg("验证码发送失败,请稍候重试");
@@ -540,6 +540,7 @@ public void showRegister(final RequestContext context) {
540540
*
541541
* @param context the specified context
542542
*/
543+
public static SimpleCurrentLimiter verifySMSCodeLimiterOfIPLong = new SimpleCurrentLimiter(60 * 60 * 24, 3);
543544
public static SimpleCurrentLimiter verifySMSCodeLimiterOfIP = new SimpleCurrentLimiter(600, 2);
544545
public static SimpleCurrentLimiter verifySMSCodeLimiterOfName = new SimpleCurrentLimiter(600, 2);
545546
public static SimpleCurrentLimiter verifySMSCodeLimiterOfPhone = new SimpleCurrentLimiter(600, 2);
@@ -549,7 +550,7 @@ public void register(final RequestContext context) {
549550
final JSONObject requestJSONObject = context.getRequest().getJSON();
550551
final String name = requestJSONObject.optString(User.USER_NAME);
551552
final String userPhone = requestJSONObject.optString("userPhone");
552-
if (verifySMSCodeLimiterOfIP.access(ip) && verifySMSCodeLimiterOfName.access(name) && verifySMSCodeLimiterOfPhone.access(userPhone)) {
553+
if (verifySMSCodeLimiterOfIPLong.access(ip) && verifySMSCodeLimiterOfIP.access(ip) && verifySMSCodeLimiterOfName.access(name) && verifySMSCodeLimiterOfPhone.access(userPhone)) {
553554
final String invitecode = requestJSONObject.optString(Invitecode.INVITECODE);
554555

555556
final JSONObject user = new JSONObject();

src/main/java/org/b3log/symphony/processor/SettingsProcessor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ public void sendPhoneVC(final RequestContext context) {
465465
final String name = user.optString(User.USER_NAME);
466466
final String ip = Requests.getRemoteAddr(context.getRequest());
467467

468-
if (LoginProcessor.verifySMSCodeLimiterOfIP.access(ip) && LoginProcessor.verifySMSCodeLimiterOfName.access(name) && LoginProcessor.verifySMSCodeLimiterOfPhone.access(userPhone)) {
468+
if (LoginProcessor.verifySMSCodeLimiterOfIPLong.access(ip) && LoginProcessor.verifySMSCodeLimiterOfIP.access(ip) && LoginProcessor.verifySMSCodeLimiterOfName.access(name) && LoginProcessor.verifySMSCodeLimiterOfPhone.access(userPhone)) {
469469
final String code = RandomStringUtils.randomNumeric(6);
470470
if (!verifycodeMgmtService.sendVerifyCodeSMS(userPhone, code)) {
471471
context.renderMsg("验证码发送失败,请稍候重试");

src/main/resources/symphony.properties

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,4 +357,8 @@ pay.wechat.key=
357357
# Rhyus
358358
chatroom.node.url=ws://127.0.0.1:10831,\u6cb3\u5317\u4e00\u533a,1
359359
#ws://121.62.31.42:10831
360-
chatroom.node.adminKey=123456
360+
chatroom.node.adminKey=123456
361+
362+
# GenMetal
363+
#gen.metal.url=http://10.0.8.4:5000/gen
364+
gen.metal.url=https://fishpi.cn/gen

0 commit comments

Comments
 (0)