incomplete sban import logic (mod still unusable)
parent
afefd92991
commit
5c449e099d
142
data.lua
142
data.lua
|
@ -55,6 +55,7 @@ local function get_full_table(query)
|
|||
row[names[col_id]] = values[col_id]
|
||||
end
|
||||
table.insert(row)
|
||||
return 0
|
||||
end
|
||||
|
||||
local status = db:exec(query, populate_table)
|
||||
|
@ -78,17 +79,146 @@ end -- init_db()
|
|||
init_db()
|
||||
|
||||
function verbana.data.import_from_sban(filename)
|
||||
-- this method isn't as complicated as it looks; 2/3 of it is repetative error handling
|
||||
local sban_db, _, errormsg = sql.open(filename, sql.OPEN_READONLY)
|
||||
if not sban_db then
|
||||
return false, ('Error opening %s: %s'):format(filename, errormsg)
|
||||
end
|
||||
-- IMPORT INTO VERBANA --
|
||||
local insert_player_sql = 'INSERT OR IGNORE INTO player (name) VALUES (?)'
|
||||
local insert_player_statement = db:prepare()
|
||||
for name in sban_db:urows('SELECT DISTINCT name FROM playerdata') do
|
||||
local rv = insert_player_statement:bind_values(name)
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'error binding %q in %q: %s', name, insert_player_sql, rv)
|
||||
return false, 'Error importing players (see server log)'
|
||||
end
|
||||
local rv = insert_player_statement:step()
|
||||
if rv ~= sql.DONE then
|
||||
verbana.log('error', 'error stepping %q: %s', insert_player_sql, rv)
|
||||
return false, 'Error importing players (see server log)'
|
||||
end
|
||||
insert_player_statement:reset()
|
||||
end
|
||||
local rv = insert_player_statement:finalize()
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'error finalizing %q: %s', insert_player_sql, rv)
|
||||
return false, 'Error importing player names (see server log)'
|
||||
end
|
||||
-- GET VERBANA PLAYER IDS --
|
||||
local player_id_by_name = {}
|
||||
for id, name in db:urows('SELECT id, name FROM player') do
|
||||
player_id_by_name[name] = id
|
||||
end
|
||||
-- associations --
|
||||
local insert_assoc_sql = 'INSERT OR IGNORE INTO assoc (player_id, ip, asn) VALUES (?, ?, ?)'
|
||||
local insert_assoc_statement = db:prepare(insert_assoc_sql)
|
||||
for name, ipstr in sban_db:urows('SELECT DISTINCT name, ip FROM playerdata') do
|
||||
local player_id = player_id_by_name[name]
|
||||
if not verbana.ip.is_valid_ip(ipstr) then
|
||||
verbana.log('error', '%s is not a valid IPv4 address', ipstr)
|
||||
return false, 'error processing IPs in SBAN (see server log)'
|
||||
end
|
||||
local ipint = verbana.ip.ipstr_to_number(ipstr)
|
||||
local asn = verbana.asn.lookup(ipint)
|
||||
|
||||
local player_data = get_full_table([[
|
||||
SELECT id, name, ip, created, last_login FROM playerdata
|
||||
]])
|
||||
local bans_data = get_full_table([[
|
||||
SELECT id, name, source, created, reason, expires, u_source, u_reason, u_date, active, last_pos FROM bans
|
||||
]])
|
||||
local rv = insert_assoc_statement:bind_values(player_id, ipint, asn)
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'error binding %q %q %q in %q: %s', player_id, ipint, asn, insert_assoc_sql, rv)
|
||||
return false, 'Error importing associations (see server log)'
|
||||
end
|
||||
local rv = insert_assoc_statement:step()
|
||||
if rv ~= sql.DONE then
|
||||
verbana.log('error', 'error stepping %q: %s', insert_assoc_sql, rv)
|
||||
return false, 'Error importing associations (see server log)'
|
||||
end
|
||||
insert_assoc_statement:reset()
|
||||
end
|
||||
local rv = insert_assoc_statement:finalize()
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'error finalizing %q: %s', insert_assoc_sql, rv)
|
||||
return false, 'Error IP importing associations (see server log)'
|
||||
end
|
||||
-- player action --
|
||||
local insert_player_action_sql = [[
|
||||
INSERT OR IGNORE
|
||||
INTO player_action_log (executor_id, player_id, status_id, timestamp, reason, expires)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
]]
|
||||
local insert_player_action_statement = db:prepare(insert_player_action_sql)
|
||||
local select_bans_sql = [[
|
||||
SELECT name, source, created, reason, expires, u_source, u_reason, u_date
|
||||
FROM bans
|
||||
ORDER BY name, created
|
||||
]]
|
||||
local default_player_status_id = verbana.data.player_status_id.default
|
||||
local banned_player_status_id = verbana.data.player_status_id.banned
|
||||
local tempbanned_player_status_id = verbana.data.player_status_id.tempbanned
|
||||
for name, source, created, reason, expires, u_source, u_reason, u_date in sban_db:urows(select_bans_sql) do
|
||||
local player_id = player_id_by_name[name]
|
||||
local source_id = player_id_by_name[source]
|
||||
local unban_source_id
|
||||
if u_source and u_source == 'sban' then
|
||||
unban_source_id = source_id
|
||||
else
|
||||
unban_source_id = player_id_by_name[u_source]
|
||||
end
|
||||
|
||||
local status_id
|
||||
if expires then
|
||||
status_id = tempbanned_player_status_id
|
||||
else
|
||||
status_id = banned_player_status_id
|
||||
end
|
||||
local rv = insert_player_action_statement:bind_values(
|
||||
source_id, player_id, status_id, created, reason, expires
|
||||
)
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'bans: error binding %q %q %q %q %q %q in %q: %s',
|
||||
source_id, player_id, status_id, created, reason, expires, insert_player_action_sql, rv
|
||||
)
|
||||
return false, 'Error importing bans (see server log)'
|
||||
end
|
||||
local rv = insert_player_action_statement:step()
|
||||
if rv ~= sql.DONE then
|
||||
verbana.log('error', 'bans: error stepping %q: %s', insert_player_action_sql, rv)
|
||||
return false, 'Error importing bans (see server log)'
|
||||
end
|
||||
insert_player_action_statement:reset()
|
||||
|
||||
if unban_source_id then
|
||||
local status_id = default_player_status_id
|
||||
local rv = insert_player_action_statement:bind_values(
|
||||
unban_source_id, player_id, status_id, u_date, u_reason, nil
|
||||
)
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'unbans: error binding %q %q %q %q %q %q in %q: %s',
|
||||
unban_source_id, player_id, status_id, u_date, u_reason, nil, insert_player_action_sql, rv
|
||||
)
|
||||
return false, 'Error importing bans (see server log)'
|
||||
end
|
||||
local rv = insert_player_action_statement:step()
|
||||
if rv ~= sql.DONE then
|
||||
verbana.log('error', 'unbans: error stepping %q: %s', insert_player_action_sql, rv)
|
||||
return false, 'Error importing bans (see server log)'
|
||||
end
|
||||
insert_player_action_statement:reset()
|
||||
end
|
||||
end
|
||||
local rv = insert_player_action_statement.finalize()
|
||||
if rv ~= sql.OK then
|
||||
verbana.log('error', 'error finalizing %q: %s', insert_player_action_sql, rv)
|
||||
return false, 'Error importing bans (see server log)'
|
||||
end
|
||||
|
||||
-- set the current player actions
|
||||
|
||||
-- local player_data = get_full_table([[
|
||||
-- SELECT id, name, ip, created, last_login FROM playerdata
|
||||
-- ]])
|
||||
-- local bans_data = get_full_table([[
|
||||
-- SELECT id, name, source, created, reason, expires, u_source, u_reason, u_date, active, last_pos FROM bans
|
||||
-- ]])
|
||||
|
||||
sban_db.close()
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue