Commit a76fe295 authored by nanahira's avatar nanahira

Merge branch 'master' of ../srvpro

parents fd2bf6ea 6df616b8
Pipeline #42181 passed with stages
in 9 minutes and 15 seconds
...@@ -262,7 +262,7 @@ real_windbot_server_ip = null ...@@ -262,7 +262,7 @@ real_windbot_server_ip = null
long_resolve_cards = [] long_resolve_cards = []
ReplayParser = null ReplayParser = null
athleticChecker = null athleticChecker = null
users_cache = {} # users_cache = {}
geoip = null geoip = null
dataManager = null dataManager = null
windbots = [] windbots = []
...@@ -572,25 +572,25 @@ loadLFList = (path) -> ...@@ -572,25 +572,25 @@ loadLFList = (path) ->
geoip = require('geoip-country-lite') geoip = require('geoip-country-lite')
if settings.modules.mycard.enabled if settings.modules.mycard.enabled
pgClient = require('pg').Client # pgClient = require('pg').Client
pg_client = global.pg_client = new pgClient(settings.modules.mycard.auth_database) # pg_client = global.pg_client = new pgClient(settings.modules.mycard.auth_database)
pg_client.on 'error', (err) -> # pg_client.on 'error', (err) ->
log.warn "PostgreSQL ERROR: ", err # log.warn "PostgreSQL ERROR: ", err
return # return
pg_query = pg_client.query('SELECT username, id from users') # pg_query = pg_client.query('SELECT username, id from users')
pg_query.on 'error', (err) -> # pg_query.on 'error', (err) ->
log.warn "PostgreSQL Query ERROR: ", err # log.warn "PostgreSQL Query ERROR: ", err
return # return
pg_query.on 'row', (row) -> # pg_query.on 'row', (row) ->
#log.info "load user", row.username, row.id # #log.info "load user", row.username, row.id
users_cache[row.username] = row.id # users_cache[row.username] = row.id
return # return
pg_query.on 'end', (result) -> # pg_query.on 'end', (result) ->
log.info "users loaded", result.rowCount # log.info "users loaded", result.rowCount
return # return
pg_client.on 'drain', pg_client.end.bind(pg_client) # pg_client.on 'drain', pg_client.end.bind(pg_client)
log.info "loading mycard user..." # log.info "loading mycard user..."
pg_client.connect() # pg_client.connect()
if settings.modules.arena_mode.enabled and settings.modules.arena_mode.init_post.enabled if settings.modules.arena_mode.enabled and settings.modules.arena_mode.init_post.enabled
postData = qs.stringify({ postData = qs.stringify({
ak: settings.modules.arena_mode.init_post.accesskey, ak: settings.modules.arena_mode.init_post.accesskey,
...@@ -2531,15 +2531,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2531,15 +2531,15 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
checksum += buf.readUInt8(i) checksum += buf.readUInt8(i)
(checksum & 0xFF) == 0 (checksum & 0xFF) == 0
create_room_with_action = (buffer, decrypted_buffer)-> create_room_with_action = (buffer)->
if client.isClosed if client.isClosed
return return
firstByte = buffer.readUInt8(1) firstByte = buffer.readUInt8(1)
action = firstByte >> 4 action = firstByte >> 4
opt0 = firstByte & 0xf opt0 = firstByte & 0xf
if buffer != decrypted_buffer and action in [1, 2, 4] # if buffer != decrypted_buffer and action in [1, 2, 4]
ygopro.stoc_die(client, '${invalid_password_unauthorized}') # ygopro.stoc_die(client, '${invalid_password_unauthorized}')
return # return
# 1 create public room # 1 create public room
# 2 create private room # 2 create private room
...@@ -2648,13 +2648,13 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2648,13 +2648,13 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
decrypted_buffer = null decrypted_buffer = null
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)
return create_room_with_action(decrypted_buffer, decrypted_buffer) # return create_room_with_action(decrypted_buffer, decrypted_buffer)
try try
userUrl = "#{settings.modules.mycard.auth_base_url}/users/#{encodeURIComponent(client.name)}.json" userUrl = "#{settings.modules.mycard.auth_base_url}/users/#{encodeURIComponent(client.name)}.json"
...@@ -2664,8 +2664,8 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2664,8 +2664,8 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
timeout: 4000 timeout: 4000
params: params:
api_key: settings.modules.mycard.auth_key, api_key: settings.modules.mycard.auth_key,
api_username: client.name, # api_username: client.name,
skip_track_visit: true # skip_track_visit: true
userData = userDataRes.data userData = userDataRes.data
#console.log userData #console.log userData
catch e catch e
...@@ -2675,17 +2675,29 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)-> ...@@ -2675,17 +2675,29 @@ ygopro.ctos_follow 'JOIN_GAME', true, (buffer, info, client, server, datas)->
return return
if client.isClosed if client.isClosed
return return
users_cache[client.name] = userData.user.id # users_cache[client.name] = userData.user.id
secret = userData.user.id % 65535 + 1 possible_ids = [
decrypted_buffer = Buffer.allocUnsafe(6) userData.user.u16Secret,
for i in [0, 2, 4] userData.user.u16SecretPrevious,
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i) userData.user.id, # TODO: remove this line after use u16Secret
if check_buffer_indentity(decrypted_buffer) ].filter((id) -> id != null)
buffer = decrypted_buffer try_decrypt_buffer_with_id = (id) ->
if !check_buffer_indentity(buffer) secret = id % 65535 + 1
ygopro.stoc_die(client, '${invalid_password_checksum}') decrypted_buffer = Buffer.allocUnsafe(6)
for i in [0, 2, 4]
decrypted_buffer.writeUInt16LE(buffer.readUInt16LE(i) ^ secret, i)
if check_buffer_indentity(decrypted_buffer)
return decrypted_buffer
return null
decrypted_buffer = null
for possible_id in possible_ids
decrypted_buffer = try_decrypt_buffer_with_id(possible_id)
if decrypted_buffer
break
if !decrypted_buffer
ygopro.stoc_die(client, '${invalid_password_unauthorized}')
return return
return create_room_with_action(buffer, decrypted_buffer) return create_room_with_action(decrypted_buffer)
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)
......
This diff is collapsed.
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