NTNet airlocks (#35947)

* Standardizes access checks

* Makes SS Networks init before SS Atoms to prevent NTNet interfaces from initializing before them

* Adds passkey support to NTNet packets

* Adds NTNet support to airlocks, makes door remote use NTNet

* Access levels given by jobs are now shuffled

* Access code improvements

* Adds IC card readers

* Fixes a delay issue with opening/closing airlocks with NTNet or signalers

* code review memes

* Renames plaintext_passkey to encrypted_passkey

* death by thousand nitpicks
This commit is contained in:
ACCount
2018-03-08 18:39:17 -05:00
committed by Jordan Brown
parent 29c6ff234b
commit 1f5b59190d
14 changed files with 173 additions and 98 deletions
@@ -0,0 +1,37 @@
/obj/item/integrated_circuit/input/card_reader
name = "card reader"
desc = "A circuit that can read registred name, assignment and a PassKey string from an ID card."
icon_state = "card_reader"
complexity = 4
spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH
outputs = list(
"registered name" = IC_PINTYPE_STRING,
"assignment" = IC_PINTYPE_STRING,
"passkey" = IC_PINTYPE_STRING
)
activators = list(
"on read" = IC_PINTYPE_PULSE_OUT
)
/obj/item/integrated_circuit/input/card_reader/attackby_react(obj/item/I, mob/living/user, intent)
var/obj/item/card/id/card = I.GetID()
var/list/access = I.GetAccess()
var/passkey = strtohex(XorEncrypt(json_encode(access), SScircuit.cipherkey))
if(card) // An ID card.
set_pin_data(IC_OUTPUT, 1, card.registered_name)
set_pin_data(IC_OUTPUT, 2, card.assignment)
else if(length(access)) // A non-card object that has access levels.
set_pin_data(IC_OUTPUT, 1, null)
set_pin_data(IC_OUTPUT, 2, null)
else
return FALSE
set_pin_data(IC_OUTPUT, 3, passkey)
push_data()
activate_pin(1)
return TRUE
@@ -629,17 +629,16 @@
var/datum/netdata/data = new
data.recipient_ids = splittext(target_address, ";")
data.sender_id = address
data.plaintext_data = message
data.plaintext_data_secondary = text
data.plaintext_passkey = key
data.encrypted_passkey = key
ntnet_send(data)
/obj/item/integrated_circuit/input/ntnet_recieve(datum/netdata/data)
set_pin_data(IC_OUTPUT, 1, data.sender_id)
set_pin_data(IC_OUTPUT, 2, data.plaintext_data)
set_pin_data(IC_OUTPUT, 3, data.plaintext_data_secondary)
set_pin_data(IC_OUTPUT, 4, data.plaintext_passkey)
set_pin_data(IC_OUTPUT, 4, data.encrypted_passkey)
push_data()
activate_pin(2)