From 2c105a13b403e377405eadf657ab901d07a7e40b Mon Sep 17 00:00:00 2001 From: davipatury Date: Mon, 20 Feb 2017 09:57:06 -0300 Subject: [PATCH] NTMonitor and Revelation Virus. --- .../programs/antagonist/revelation.dm | 77 +++++++++++++++ .../file_system/programs/ntmonitor.dm | 90 +++++++++++++++++ nano/templates/computer_main.tmpl | 2 +- nano/templates/ntnet_monitor.tmpl | 98 +++++++++++++++++++ nano/templates/revelation.tmpl | 23 +++++ paradise.dme | 2 + 6 files changed, 291 insertions(+), 1 deletion(-) create mode 100644 code/modules/modular_computers/file_system/programs/antagonist/revelation.dm create mode 100644 code/modules/modular_computers/file_system/programs/ntmonitor.dm create mode 100644 nano/templates/ntnet_monitor.tmpl create mode 100644 nano/templates/revelation.tmpl diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm new file mode 100644 index 00000000000..62a0c102b4a --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -0,0 +1,77 @@ +/datum/computer_file/program/revelation + filename = "revelation" + filedesc = "Revelation" + program_icon_state = "hostile" + extended_desc = "This virus can destroy hard drive of system it is executed on. It may be obfuscated to look like another non-malicious program. Once armed, it will destroy the system upon next execution." + size = 13 + requires_ntnet = 0 + available_on_ntnet = 0 + available_on_syndinet = 1 + var/armed = 0 + +/datum/computer_file/program/revelation/run_program(var/mob/living/user) + . = ..(user) + if(armed) + activate() + +/datum/computer_file/program/revelation/proc/activate() + if(computer) + computer.visible_message("\The [computer]'s screen brightly flashes and loud electrical buzzing is heard.") + computer.enabled = 0 + computer.update_icon() + var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] + var/obj/item/weapon/computer_hardware/battery/battery_module = computer.all_components[MC_CELL] + var/obj/item/weapon/computer_hardware/recharger/recharger = computer.all_components[MC_CHARGE] + qdel(hard_drive) + computer.take_damage(25, BRUTE, 0, 0) + if(battery_module && prob(25)) + qdel(battery_module) + computer.visible_message("\The [computer]'s battery explodes in rain of sparks.") + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() + spark_system.set_up(5, 0, computer.loc) + spark_system.start() + + if(recharger && prob(50)) + qdel(recharger) + computer.visible_message("\The [computer]'s recharger explodes in rain of sparks.") + var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread() + spark_system.set_up(5, 0, computer.loc) + spark_system.start() + + +/datum/computer_file/program/revelation/Topic(href, list/href_list) + if(..()) + return 1 + switch(href_list["action"]) + if("PRG_arm") + armed = !armed + if("PRG_activate") + activate() + if("PRG_obfuscate") + var/mob/living/user = usr + var/newname = sanitize(input(user, "Enter new program name: ")) + if(!newname) + return + filedesc = newname + + +/datum/computer_file/program/revelation/clone() + var/datum/computer_file/program/revelation/temp = ..() + temp.armed = armed + return temp + +/datum/computer_file/program/revelation/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) + assets.send(user) + ui = new(user, src, ui_key, "revelation.tmpl", "Revelation Virus", 575, 250) + ui.set_auto_update(1) + ui.open() + +/datum/computer_file/program/revelation/ui_data(mob/user) + var/list/data = get_header_data() + + data["armed"] = armed + + return data \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/ntmonitor.dm new file mode 100644 index 00000000000..969a931ac71 --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/ntmonitor.dm @@ -0,0 +1,90 @@ +/datum/computer_file/program/ntnetmonitor + filename = "ntmonitor" + filedesc = "NTNet Diagnostics and Monitoring" + program_icon_state = "comm_monitor" + extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes" + size = 12 + requires_ntnet = 1 + required_access = access_network //Network control is a more secure program. + available_on_ntnet = 1 + +/datum/computer_file/program/ntnetmonitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + ui = nanomanager.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + var/datum/asset/assets = get_asset_datum(/datum/asset/simple/headers) + assets.send(user) + ui = new(user, src, ui_key, "ntnet_monitor.tmpl", "NTNet Diagnostics and Monitoring Tool", 575, 700) + ui.set_auto_update(1) + ui.open() + + +/datum/computer_file/program/ntnetmonitor/Topic(href, list/href_list) + if(..()) + return 1 + switch(href_list["action"]) + if("resetIDS") + . = 1 + if(ntnet_global) + ntnet_global.resetIDS() + return 1 + if("toggleIDS") + . = 1 + if(ntnet_global) + ntnet_global.toggleIDS() + return 1 + if("toggleWireless") + . = 1 + if(!ntnet_global) + return 1 + + // NTNet is disabled. Enabling can be done without user prompt + if(ntnet_global.setting_disabled) + ntnet_global.setting_disabled = 0 + return 1 + + // NTNet is enabled and user is about to shut it down. Let's ask them if they really want to do it, as wirelessly connected computers won't connect without NTNet being enabled (which may prevent people from turning it back on) + var/mob/user = usr + if(!user) + return 1 + var/response = alert(user, "Really disable NTNet wireless? If your computer is connected wirelessly you won't be able to turn it back on! This will affect all connected wireless devices.", "NTNet shutdown", "Yes", "No") + if(response == "Yes") + ntnet_global.setting_disabled = 1 + return 1 + if("purgelogs") + . = 1 + if(ntnet_global) + ntnet_global.purge_logs() + if("updatemaxlogs") + . = 1 + var/mob/user = usr + var/logcount = text2num(input(user,"Enter amount of logs to keep in memory ([MIN_NTNET_LOGS]-[MAX_NTNET_LOGS]):")) + if(ntnet_global) + ntnet_global.update_max_log_count(logcount) + if("toggle_function") + . = 1 + if(!ntnet_global) + return 1 + ntnet_global.toggle_function(text2num(href_list["id"])) + +/datum/computer_file/program/ntnetmonitor/ui_data(mob/user) + if(!ntnet_global) + return + var/list/data = get_header_data() + + data["ntnetstatus"] = ntnet_global.check_function() + data["ntnetrelays"] = ntnet_global.relays.len + data["idsstatus"] = ntnet_global.intrusion_detection_enabled + data["idsalarm"] = ntnet_global.intrusion_detection_alarm + + data["config_softwaredownload"] = ntnet_global.setting_softwaredownload + data["config_peertopeer"] = ntnet_global.setting_peertopeer + data["config_communication"] = ntnet_global.setting_communication + data["config_systemcontrol"] = ntnet_global.setting_systemcontrol + + data["ntnetlogs"] = list() + + for(var/i in ntnet_global.logs) + data["ntnetlogs"] += list(list("entry" = i)) + data["ntnetmaxlogs"] = ntnet_global.setting_maxlogcount + + return data \ No newline at end of file diff --git a/nano/templates/computer_main.tmpl b/nano/templates/computer_main.tmpl index c11be44be5c..9aad3d58609 100644 --- a/nano/templates/computer_main.tmpl +++ b/nano/templates/computer_main.tmpl @@ -3,7 +3,7 @@ {{for data.programs}}
{{:helper.link(value.desc, null, {'action' : 'PC_runprogram', 'name' : value.name})}} - {{:helper.link('', 'times', {'action' : 'PC_killprogram', 'name' : value.name}, value.running ? null : 'disabled')}} + {{:helper.link('', null, {'action' : 'PC_killprogram', 'name' : value.name}, value.running ? null : 'disabled')}} {{/for}}
\ No newline at end of file diff --git a/nano/templates/ntnet_monitor.tmpl b/nano/templates/ntnet_monitor.tmpl new file mode 100644 index 00000000000..c5b66e1102e --- /dev/null +++ b/nano/templates/ntnet_monitor.tmpl @@ -0,0 +1,98 @@ +

WIRELESS CONNECTIVITY

+
+
+ Active NTNet Relays: +
+
+ {{:data.ntnetrelays}} +
+ {{if data.ntnetrelays}} +
+ System status: +
+
+ {{:data.ntnetstatus ? "ENABLED" : "DISABLED"}} +
+
+ Control: +
+
+ {{:helper.link('TOGGLE', null, {'action' : 'toggleWireless'})}} +


+ Caution - Disabling wireless transmitters when using wireless device may prevent you from re-enabling them again! + {{else}} +

Wireless coverage unavailable, no relays are connected.

+ {{/if}} +
+ +

FIREWALL CONFIGURATION

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
PROTOCOLSTATUSCONTROL
Software Downloads{{:data.config_softwaredownload ? 'ENABLED' : 'DISABLED'}}{{:helper.link('TOGGLE', null, {'action' : 'toggle_function', 'id' : 1})}}
Peer to Peer Traffic{{:data.config_peertopeer ? 'ENABLED' : 'DISABLED'}}{{:helper.link('TOGGLE', null, {'action' : 'toggle_function', 'id' : 2})}}
Communication Systems{{:data.config_communication ? 'ENABLED' : 'DISABLED'}}{{:helper.link('TOGGLE', null, {'action' : 'toggle_function', 'id' : 3})}}
Remote System Control{{:data.config_systemcontrol ? 'ENABLED' : 'DISABLED'}}{{:helper.link('TOGGLE', null, {'action' : 'toggle_function', 'id' : 4})}}
+
+ +

SECURITY SYSTEMS

+{{if data.idsalarm}} +
+
+
+

NETWORK INCURSION DETECTED

+ An abnormal activity has been detected in the network. Please verify system logs for more information +
+
+
+{{/if}} +
+
Intrusion Detection System:
+
{{:data.idsstatus ? 'ENABLED' : 'DISABLED'}}
+
+
+
Maximal Log Count:
+
{{:data.ntnetmaxlogs}}
+
+
+
Controls:
+
+ +
{{:helper.link('RESET IDS', null, {'action' : 'resetIDS'})}} +
{{:helper.link('TOGGLE IDS', null, {'action' : 'toggleIDS'})}} +
{{:helper.link('SET LOG LIMIT', null, {'action' : 'updatemaxlogs'})}} +
{{:helper.link('PURGE LOGS', null, {'action' : 'purgelogs'})}} +
+
+
+System Logs +
+
+
+ {{for data.ntnetlogs}} + {{:value.entry}}
+ {{/for}} +
+
+
\ No newline at end of file diff --git a/nano/templates/revelation.tmpl b/nano/templates/revelation.tmpl new file mode 100644 index 00000000000..5412c440caa --- /dev/null +++ b/nano/templates/revelation.tmpl @@ -0,0 +1,23 @@ +{{:helper.syndicateMode()}} +
+
+ Payload status: +
+
+ {{if data.armed}} + ARMED + {{else}} + DISARMED + {{/if}} +
+
+ Controls: +
+
+ +
{{:helper.link('OBFUSCATE PROGRAM NAME', 'eye-slash', {'action' : 'PRG_obfuscate'})}} +
{{:helper.link(data.armed ? 'DISARM' : 'ARM', data.armed ? 'crosshairs' : 'info', {'action' : 'PRG_arm'})}} + {{:helper.link('ACTIVATE', 'exclamation-triangle', {'action' : 'PRG_activate'}, data.armed ? null : 'disabled', data.armed ? 'redButton' : null)}} +
+
+
\ No newline at end of file diff --git a/paradise.dme b/paradise.dme index 09f8366c638..996c56dedfe 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1772,9 +1772,11 @@ #include "code\modules\modular_computers\file_system\programs\configurator.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" #include "code\modules\modular_computers\file_system\programs\ntdownloader.dm" +#include "code\modules\modular_computers\file_system\programs\ntmonitor.dm" #include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm" #include "code\modules\modular_computers\file_system\programs\nttransfer.dm" #include "code\modules\modular_computers\file_system\programs\antagonist\dos.dm" +#include "code\modules\modular_computers\file_system\programs\antagonist\revelation.dm" #include "code\modules\modular_computers\hardware\_hardware.dm" #include "code\modules\modular_computers\hardware\ai_slot.dm" #include "code\modules\modular_computers\hardware\battery_module.dm"