Commit 71c3fa84 authored by nanahira's avatar nanahira

fix some errors on escape string

parent 673dedd6
...@@ -230,7 +230,11 @@ class DataManager { ...@@ -230,7 +230,11 @@ class DataManager {
return []; return [];
} }
} }
getEscapedString(text) {
return text.replace(/\\/g, "").replace(/_/g, "\\_").replace(/%/g, "\\%") + "%";
}
async getDuelLogFromCondition(data) { async getDuelLogFromCondition(data) {
//console.log(data);
if (!data) { if (!data) {
return this.getAllDuelLogs(); return this.getAllDuelLogs();
} }
...@@ -240,7 +244,7 @@ class DataManager { ...@@ -240,7 +244,7 @@ class DataManager {
const queryBuilder = repo.createQueryBuilder("duelLog") const queryBuilder = repo.createQueryBuilder("duelLog")
.where("1"); .where("1");
if (roomName != null && roomName.length) { if (roomName != null && roomName.length) {
const escapedRoomName = roomName.replace(/[%_]/g, "") + "%"; const escapedRoomName = this.getEscapedString(roomName);
queryBuilder.andWhere("duelLog.name like :escapedRoomName", { escapedRoomName }); queryBuilder.andWhere("duelLog.name like :escapedRoomName", { escapedRoomName });
} }
if (duelCount != null && !isNaN(duelCount)) { if (duelCount != null && !isNaN(duelCount)) {
...@@ -250,9 +254,9 @@ class DataManager { ...@@ -250,9 +254,9 @@ class DataManager {
let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id"; let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id";
const innerQueryParams = {}; const innerQueryParams = {};
if (playerName != null && playerName.length) { if (playerName != null && playerName.length) {
const escapedPlayerName = playerName.replace(/[%_]/g, "") + "%"; const escapedPlayerName = this.getEscapedString(playerName);
innerQuery += " and duel_log_player.escapedPlayerName like :escapedPlayerName"; innerQuery += " and duel_log_player.realName like :escapedPlayerName";
innerQueryParams.playerRealName = escapedPlayerName; innerQueryParams.escapedPlayerName = escapedPlayerName;
} }
if (playerScore != null && !isNaN(playerScore)) { if (playerScore != null && !isNaN(playerScore)) {
innerQuery += " and duel_log_player.score = :playerScore"; innerQuery += " and duel_log_player.score = :playerScore";
...@@ -260,9 +264,10 @@ class DataManager { ...@@ -260,9 +264,10 @@ class DataManager {
} }
queryBuilder.andWhere(`exists (${innerQuery})`, innerQueryParams); queryBuilder.andWhere(`exists (${innerQuery})`, innerQueryParams);
} }
const duelLogs = queryBuilder.orderBy("duelLog.id", "DESC") queryBuilder.orderBy("duelLog.id", "DESC")
.leftJoinAndSelect("duelLog.players", "player") .leftJoinAndSelect("duelLog.players", "player");
.getMany(); // console.log(queryBuilder.getSql());
const duelLogs = await queryBuilder.getMany();
return duelLogs; return duelLogs;
} }
catch (e) { catch (e) {
......
...@@ -256,7 +256,12 @@ export class DataManager { ...@@ -256,7 +256,12 @@ export class DataManager {
} }
private getEscapedString(text: string) {
return text.replace(/\\/g, "").replace(/_/g, "\\_").replace(/%/g, "\\%") + "%";
}
async getDuelLogFromCondition(data: DuelLogQuery) { async getDuelLogFromCondition(data: DuelLogQuery) {
//console.log(data);
if(!data) { if(!data) {
return this.getAllDuelLogs(); return this.getAllDuelLogs();
} }
...@@ -266,7 +271,7 @@ export class DataManager { ...@@ -266,7 +271,7 @@ export class DataManager {
const queryBuilder = repo.createQueryBuilder("duelLog") const queryBuilder = repo.createQueryBuilder("duelLog")
.where("1"); .where("1");
if(roomName != null && roomName.length) { if(roomName != null && roomName.length) {
const escapedRoomName = roomName.replace(/[%_]/g, "") + "%"; const escapedRoomName = this.getEscapedString(roomName);
queryBuilder.andWhere("duelLog.name like :escapedRoomName", { escapedRoomName }); queryBuilder.andWhere("duelLog.name like :escapedRoomName", { escapedRoomName });
} }
if(duelCount != null && !isNaN(duelCount)) { if(duelCount != null && !isNaN(duelCount)) {
...@@ -276,9 +281,9 @@ export class DataManager { ...@@ -276,9 +281,9 @@ export class DataManager {
let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id"; let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id";
const innerQueryParams: any = {}; const innerQueryParams: any = {};
if(playerName != null && playerName.length) { if(playerName != null && playerName.length) {
const escapedPlayerName = playerName.replace(/[%_]/g, "") + "%"; const escapedPlayerName = this.getEscapedString(playerName);
innerQuery += " and duel_log_player.escapedPlayerName like :escapedPlayerName"; innerQuery += " and duel_log_player.realName like :escapedPlayerName";
innerQueryParams.playerRealName = escapedPlayerName; innerQueryParams.escapedPlayerName = escapedPlayerName;
} }
if(playerScore != null && !isNaN(playerScore)) { if(playerScore != null && !isNaN(playerScore)) {
innerQuery += " and duel_log_player.score = :playerScore"; innerQuery += " and duel_log_player.score = :playerScore";
...@@ -286,9 +291,10 @@ export class DataManager { ...@@ -286,9 +291,10 @@ export class DataManager {
} }
queryBuilder.andWhere(`exists (${innerQuery})`, innerQueryParams); queryBuilder.andWhere(`exists (${innerQuery})`, innerQueryParams);
} }
const duelLogs = queryBuilder.orderBy("duelLog.id", "DESC") queryBuilder.orderBy("duelLog.id", "DESC")
.leftJoinAndSelect("duelLog.players", "player") .leftJoinAndSelect("duelLog.players", "player");
.getMany(); // console.log(queryBuilder.getSql());
const duelLogs = await queryBuilder.getMany();
return duelLogs; return duelLogs;
} catch (e) { } catch (e) {
this.log.warn(`Failed to fetch duel logs: ${e.toString()}`); this.log.warn(`Failed to fetch duel logs: ${e.toString()}`);
......
...@@ -1908,7 +1908,7 @@ deck_name_match = global.deck_name_match = (deck_name, player_name) -> ...@@ -1908,7 +1908,7 @@ deck_name_match = global.deck_name_match = (deck_name, player_name) ->
ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)-> ygopro.ctos_follow 'PLAYER_INFO', true, (buffer, info, client, server, datas)->
# checkmate use username$password, but here don't # checkmate use username$password, but here don't
# so remove the password # so remove the password
name_full =info.name.split("$") name_full =info.name.replace(/\\/g, "").split("$")
name = name_full[0] name = name_full[0]
vpass = name_full[1] vpass = name_full[1]
if vpass and !vpass.length if vpass and !vpass.length
...@@ -3644,16 +3644,19 @@ global.rebooted = false ...@@ -3644,16 +3644,19 @@ global.rebooted = false
if true if true
getDuelLogQueryFromQs = (qdata) -> getDuelLogQueryFromQs = (qdata) ->
ret = {} try
if(qdata.roomname) ret = {}
ret.roomName = decodeURIComponent(qdata.roomname) if(qdata.roomname)
if(qdata.duelcount) ret.roomName = decodeURIComponent(qdata.roomname).trim()
ret.roomName = parseInt(decodeURIComponent(qdata.duelcount)) if(qdata.duelcount)
if(qdata.playername) ret.duelCount = parseInt(decodeURIComponent(qdata.duelcount))
ret.playerName = decodeURIComponent(qdata.playername) if(qdata.playername)
if(qdata.score) ret.playerName = decodeURIComponent(qdata.playername).trim()
ret.playerScore = parseInt(decodeURIComponent(qdata.score)) if(qdata.score)
return ret.playerScore = parseInt(decodeURIComponent(qdata.score))
return ret
catch
return {}
addCallback = (callback, text)-> addCallback = (callback, text)->
if not callback then return text if not callback then return text
......
...@@ -2563,7 +2563,7 @@ ...@@ -2563,7 +2563,7 @@
var banMCRequest, e, geo, lang, name, name_full, struct, vpass; var banMCRequest, e, geo, lang, name, name_full, struct, vpass;
// checkmate use username$password, but here don't // checkmate use username$password, but here don't
// so remove the password // so remove the password
name_full = info.name.split("$"); name_full = info.name.replace(/\\/g, "").split("$");
name = name_full[0]; name = name_full[0];
vpass = name_full[1]; vpass = name_full[1];
if (vpass && !vpass.length) { if (vpass && !vpass.length) {
...@@ -4867,18 +4867,23 @@ ...@@ -4867,18 +4867,23 @@
if (true) { if (true) {
getDuelLogQueryFromQs = function(qdata) { getDuelLogQueryFromQs = function(qdata) {
var ret; var ret;
ret = {}; try {
if (qdata.roomname) { ret = {};
ret.roomName = decodeURIComponent(qdata.roomname); if (qdata.roomname) {
} ret.roomName = decodeURIComponent(qdata.roomname).trim();
if (qdata.duelcount) { }
ret.roomName = parseInt(decodeURIComponent(qdata.duelcount)); if (qdata.duelcount) {
} ret.duelCount = parseInt(decodeURIComponent(qdata.duelcount));
if (qdata.playername) { }
ret.playerName = decodeURIComponent(qdata.playername); if (qdata.playername) {
} ret.playerName = decodeURIComponent(qdata.playername).trim();
if (qdata.score) { }
ret.playerScore = parseInt(decodeURIComponent(qdata.score)); if (qdata.score) {
ret.playerScore = parseInt(decodeURIComponent(qdata.score));
}
return ret;
} catch (error1) {
return {};
} }
}; };
addCallback = function(callback, text) { addCallback = function(callback, text) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment