Commit 9cfe9747 authored by nanahira's avatar nanahira

rework mycard room

parent c1cd0409
Pipeline #6498 passed with stages
in 88 minutes and 21 seconds
...@@ -18,7 +18,6 @@ _.str = require 'underscore.string' ...@@ -18,7 +18,6 @@ _.str = require 'underscore.string'
_.mixin(_.str.exports()) _.mixin(_.str.exports())
request = require 'request' request = require 'request'
axios = require 'axios'
qs = require "querystring" qs = require "querystring"
zlib = require 'zlib' zlib = require 'zlib'
axios = require 'axios' axios = require 'axios'
...@@ -2210,11 +2209,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2210,11 +2209,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
if settings.modules.arena_mode.check_permit if settings.modules.arena_mode.check_permit
match_permit = null match_permit = null
try try
match_permit = await axios.get settings.modules.arena_mode.check_permit, match_permit = await (axios.get settings.modules.arena_mode.check_permit,
responseType: 'json' responseType: 'json'
timeout: 3000 timeout: 3000
)
.data
catch e catch e
log.warn "match permit fail #{e.toString()}" log.warn "match permit fail #{e.toString()}"
if client.closed
return
if match_permit and match_permit.permit == false if match_permit and match_permit.permit == false
ygopro.stoc_die(client, '${invalid_password_unauthorized}') ygopro.stoc_die(client, '${invalid_password_unauthorized}')
return return
...@@ -2246,95 +2249,40 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2246,95 +2249,40 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
room.join_player(client) room.join_player(client)
return return
_async.auto({ decrypted_buffer = null
###
match_permit: (done) ->
if client.closed
done()
return
if(!settings.modules.arena_mode.check_permit)
done(null, null)
return
request
url: settings.modules.arena_mode.check_permit,
json: true,
qs:
username: client.name,
password: info.pass,
arena: settings.modules.arena_mode.mode
, (error, response, body)->
if client.closed
done(null, null)
return
if !error and body
done(null, body)
else
log.warn("Match permit request error", error)
done(null, null)
return
return
###
get_user: (done) ->
if client.closed
done()
return
if id = users_cache[client.name] if id = users_cache[client.name]
secret = id % 65535 + 1 secret = id % 65535 + 1
decrypted_buffer = Buffer.allocUnsafe(6) decrypted_buffer = Buffer.allocUnsafe(6)
for i in [0, 2, 4] for i in [0, 2, 4]
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i) decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i)
if check_buffer_indentity(decrypted_buffer) if check_buffer_indentity(decrypted_buffer)
done(null, { return create_room_with_action(decrypted_buffer, decrypted_buffer)
original: decrypted_buffer,
decrypted: decrypted_buffer
})
return
#TODO: query database directly, like preload. try
request userData = await (axios.get "#{settings.modules.mycard.auth_base_url}/users/#{encodeURIComponent(client.name)}.json",
baseUrl: settings.modules.mycard.auth_base_url, responseType: 'json'
url: '/users/' + encodeURIComponent(client.name) + '.json', timeout: 10000
qs: )
api_key: settings.modules.mycard.auth_key, .data
api_username: client.name, catch e
skip_track_visit: true log.warn("READ USER FAIL", client.name, e.toString())
json: true if !client.closed
, (error, response, body)-> ygopro.stoc_die(client, '${load_user_info_fail}')
if !error and body and body.user return
users_cache[client.name] = body.user.id if client.closed
secret = body.user.id % 65535 + 1 return
users_cache[client.name] = userData.user.id
secret = userData.user.id % 65535 + 1
decrypted_buffer = Buffer.allocUnsafe(6) decrypted_buffer = Buffer.allocUnsafe(6)
for i in [0, 2, 4] for i in [0, 2, 4]
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i) decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i)
if check_buffer_indentity(decrypted_buffer) if check_buffer_indentity(decrypted_buffer)
buffer = decrypted_buffer buffer = decrypted_buffer
else
log.warn("READ USER FAIL", client.name, error, body)
done("${load_user_info_fail}")
return
# buffer != decrypted_buffer ==> auth failed
if !check_buffer_indentity(buffer) if !check_buffer_indentity(buffer)
done('${invalid_password_checksum}') ygopro.stoc_die(client, '${invalid_password_checksum}')
return
done(null, {
original: buffer,
decrypted: decrypted_buffer
})
return
return
}, (err, data) ->
if(client.closed)
return return
if(err) return create_room_with_action(buffer, decrypted_buffer)
ygopro.stoc_die(client, err)
return
create_room_with_action(data.get_user.original, data.get_user.decrypted)
)
else if settings.modules.challonge.enabled else if settings.modules.challonge.enabled
if info.version != settings.version and settings.alternative_versions.includes(info.version) if info.version != settings.version and settings.alternative_versions.includes(info.version)
......
...@@ -36,8 +36,6 @@ ...@@ -36,8 +36,6 @@
request = require('request'); request = require('request');
axios = require('axios');
qs = require("querystring"); qs = require("querystring");
zlib = require('zlib'); zlib = require('zlib');
...@@ -2728,7 +2726,7 @@ ...@@ -2728,7 +2726,7 @@
}); });
ygopro.ctos_follow('JOIN_GAME', true, async function(buffer, info, client, server, datas) { ygopro.ctos_follow('JOIN_GAME', true, async function(buffer, info, client, server, datas) {
var available_logs, check_buffer_indentity, create_room_with_action, duelLog, exactBan, index, j, l, len, len1, pre_room, recover_match, replay, replay_id, replays, room, struct; var available_logs, check_buffer_indentity, create_room_with_action, decrypted_buffer, duelLog, e, exactBan, i, id, index, j, l, len, len1, len2, len3, m, n, pre_room, recover_match, ref, ref1, replay, replay_id, replays, room, secret, struct, userData;
//log.info info //log.info info
info.pass = info.pass.trim(); info.pass = info.pass.trim();
client.pass = info.pass; client.pass = info.pass;
...@@ -2916,13 +2914,17 @@ ...@@ -2916,13 +2914,17 @@
if (settings.modules.arena_mode.check_permit) { if (settings.modules.arena_mode.check_permit) {
match_permit = null; match_permit = null;
try { try {
match_permit = (await axios.get(settings.modules.arena_mode.check_permit, { match_permit = (await (axios.get(settings.modules.arena_mode.check_permit, {
responseType: 'json' responseType: 'json',
})); timeout: 3000
})).data);
} catch (error1) { } catch (error1) {
e = error1; e = error1;
log.warn(`match permit fail ${e.toString()}`); log.warn(`match permit fail ${e.toString()}`);
} }
if (client.closed) {
return;
}
if (match_permit && match_permit.permit === false) { if (match_permit && match_permit.permit === false) {
ygopro.stoc_die(client, '${invalid_password_unauthorized}'); ygopro.stoc_die(client, '${invalid_password_unauthorized}');
return; return;
...@@ -2967,40 +2969,7 @@ ...@@ -2967,40 +2969,7 @@
room.join_player(client); room.join_player(client);
} }
}; };
_async.auto({ decrypted_buffer = null;
/*
match_permit: (done) ->
if client.closed
done()
return
if(!settings.modules.arena_mode.check_permit)
done(null, null)
return
request
url: settings.modules.arena_mode.check_permit,
json: true,
qs:
username: client.name,
password: info.pass,
arena: settings.modules.arena_mode.mode
, (error, response, body)->
if client.closed
done(null, null)
return
if !error and body
done(null, body)
else
log.warn("Match permit request error", error)
done(null, null)
return
return
*/
get_user: function(done) {
var decrypted_buffer, i, id, len2, m, ref, secret;
if (client.closed) {
done();
return;
}
if (id = users_cache[client.name]) { if (id = users_cache[client.name]) {
secret = id % 65535 + 1; secret = id % 65535 + 1;
decrypted_buffer = Buffer.allocUnsafe(6); decrypted_buffer = Buffer.allocUnsafe(6);
...@@ -3010,28 +2979,27 @@ ...@@ -3010,28 +2979,27 @@
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i); decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i);
} }
if (check_buffer_indentity(decrypted_buffer)) { if (check_buffer_indentity(decrypted_buffer)) {
done(null, { return create_room_with_action(decrypted_buffer, decrypted_buffer);
original: decrypted_buffer, }
decrypted: decrypted_buffer }
}); try {
userData = (await (axios.get(`${settings.modules.mycard.auth_base_url}/users/${encodeURIComponent(client.name)}.json`, {
responseType: 'json',
timeout: 10000
})).data);
} catch (error1) {
e = error1;
log.warn("READ USER FAIL", client.name, e.toString());
if (!client.closed) {
ygopro.stoc_die(client, '${load_user_info_fail}');
}
return; return;
} }
if (client.closed) {
return;
} }
//TODO: query database directly, like preload. users_cache[client.name] = userData.user.id;
request({ secret = userData.user.id % 65535 + 1;
baseUrl: settings.modules.mycard.auth_base_url,
url: '/users/' + encodeURIComponent(client.name) + '.json',
qs: {
api_key: settings.modules.mycard.auth_key,
api_username: client.name,
skip_track_visit: true
},
json: true
}, function(error, response, body) {
var len3, n, ref1;
if (!error && body && body.user) {
users_cache[client.name] = body.user.id;
secret = body.user.id % 65535 + 1;
decrypted_buffer = Buffer.allocUnsafe(6); decrypted_buffer = Buffer.allocUnsafe(6);
ref1 = [0, 2, 4]; ref1 = [0, 2, 4];
for (n = 0, len3 = ref1.length; n < len3; n++) { for (n = 0, len3 = ref1.length; n < len3; n++) {
...@@ -3041,31 +3009,11 @@ ...@@ -3041,31 +3009,11 @@
if (check_buffer_indentity(decrypted_buffer)) { if (check_buffer_indentity(decrypted_buffer)) {
buffer = decrypted_buffer; buffer = decrypted_buffer;
} }
} else {
log.warn("READ USER FAIL", client.name, error, body);
done("${load_user_info_fail}");
return;
}
if (!check_buffer_indentity(buffer)) { if (!check_buffer_indentity(buffer)) {
done('${invalid_password_checksum}'); ygopro.stoc_die(client, '${invalid_password_checksum}');
return; return;
} }
done(null, { return create_room_with_action(buffer, decrypted_buffer);
original: buffer,
decrypted: decrypted_buffer
});
});
}
}, function(err, data) {
if (client.closed) {
return;
}
if (err) {
ygopro.stoc_die(client, err);
return;
}
return create_room_with_action(data.get_user.original, data.get_user.decrypted);
});
} else if (settings.modules.challonge.enabled) { } else if (settings.modules.challonge.enabled) {
if (info.version !== settings.version && settings.alternative_versions.includes(info.version)) { if (info.version !== settings.version && settings.alternative_versions.includes(info.version)) {
info.version = settings.version; info.version = settings.version;
...@@ -3097,7 +3045,7 @@ ...@@ -3097,7 +3045,7 @@
}); });
} }
}, async function(err, datas) { }, async function(err, datas) {
var create_room_name, found, k, match, ref, ref1, room, user; var create_room_name, found, k, match, ref2, ref3, room, user;
if (client.closed) { if (client.closed) {
return; return;
} }
...@@ -3107,9 +3055,9 @@ ...@@ -3107,9 +3055,9 @@
return; return;
} }
found = false; found = false;
ref = datas.participant_data; ref2 = datas.participant_data;
for (k in ref) { for (k in ref2) {
user = ref[k]; user = ref2[k];
if (user.participant && user.participant.name && deck_name_match(user.participant.name, client.name)) { if (user.participant && user.participant.name && deck_name_match(user.participant.name, client.name)) {
found = user.participant; found = user.participant;
break; break;
...@@ -3121,9 +3069,9 @@ ...@@ -3121,9 +3069,9 @@
} }
client.challonge_info = found; client.challonge_info = found;
found = false; found = false;
ref1 = datas.match_data; ref3 = datas.match_data;
for (k in ref1) { for (k in ref3) {
match = ref1[k]; match = ref3[k];
if (match && match.match && !match.match.winnerId && match.match.state !== "complete" && match.match.player1Id && match.match.player2Id && (match.match.player1Id === client.challonge_info.id || match.match.player2Id === client.challonge_info.id)) { if (match && match.match && !match.match.winnerId && match.match.state !== "complete" && match.match.player1Id && match.match.player2Id && (match.match.player1Id === client.challonge_info.id || match.match.player2Id === client.challonge_info.id)) {
found = match.match; found = match.match;
break; break;
......
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