Changes to modular computer sanitization and documentation (#20453)

Changes documentation to an md
Changes some santize on inputs to reject_bad_text
Adds handling for the downloader to abort the download if the program is killed
This commit is contained in:
Shadowlight213
2016-09-15 11:59:28 +12:00
committed by oranges
parent 5232ceee8f
commit 2c13b47b6d
5 changed files with 55 additions and 46 deletions
@@ -1,40 +0,0 @@
/*
Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to.
This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base
/datum/computer_file/program/ntnetmonitor
filename = "ntmonitor" <- This is obviously the name of the file itself. not much to be said
filedesc = "NTNet Diagnostics and Monitoring" <- This sort of the official name. it's what shows up on the main menu
program_icon_state = "comm_monitor" <- This is what the screen will look like when the program is active
extended_desc = "This program is a dummy. <- This is a sort of description, visible when looking on the ntnet
size = 12 <- size of the program. Big programs need more hard drive space. Don't make it too big though.
requires_ntnet = 1 <- if this is set, the program will not run and will close if ntnet connection is lost. mainly for primarily online programs.
required_access = access_network <- This is access required to run the program itself. ONLY SET THIS FOR SUPER SECURE SHIT. This also acts as transfer_access as well.
transfer_access = access_change_ids <- this is the access needed to download from ntnet or host on the ptp program. This is what you want to use most of the time.
available_on_ntnet = 1 <- If it's available to download on ntnet. pretty self explanatory.
available_on_syndinet = 0 <- ditto but on emagged syndie net. Use this for antag programs
usage_flags = PROGRAM_ALL // Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL
^^- The comment above sorta explains it. Use this to limit what kind of machines can run the program. For example, comms program should be limited to consoles and laptops.
var/ui_header = "downloader_finished.gif" <- this one is kinda cool. If you have the program minimized, this will show up in the header of the computer screen.
you can even have the program change what the header is based on the situation! see alarm.dm for an example.
Now. for pre-installing stuff.
Primarily done for consoles, there's an install_programs() proc in the console presets file in the machines folder.
for example, the command console one.
/obj/machinery/modular_computer/console/preset/command/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
cpu.hard_drive.store_file(new/datum/computer_file/program/card_mod())
Basically, you want to do cpu.hard_drive.store_file(new/*program path here*()) and put it in the subtype's install_programs().
Probably pretty self explanatory, but just in case.
Will probably be expanded when new features come around or I get asked to mention something.
*/
@@ -0,0 +1,45 @@
#Modular computer programs
Ok. so a quick rundown on how to make a program. This is kind of a shitty documentation, but oh well I was asked to.
## Base setup
This is how the base program is setup. the rest is mostly tgui stuff. I'll use the ntnetmonitor as a base
```DM
/datum/computer_file/program/ntnetmonitor
filename = "ntmonitor" //This is obviously the name of the file itself. not much to be said
filedesc = "NTNet Diagnostics and Monitoring" // This is sort of the official name. it's what shows up on the main menu
program_icon_state = "comm_monitor" // This is what the screen will look like when the program is active
extended_desc = "This program is a dummy. // This is a sort of a description, visible when looking on the ntnet
size = 12 // size of the program. Big programs need more hard drive space. Don't make it too big though.
requires_ntnet = 1 // If this is set, the program will not run without an ntnet connection, and will close if the connection is lost. Mainly for primarily online programs.
required_access = access_network //This is access required to run the program itself. ONLY SET THIS FOR SUPER SECURE SHIT. This also acts as transfer_access as well.
transfer_access = access_change_ids // This is the access needed to download from ntnet or host on the ptp program. This is what you want to use most of the time.
available_on_ntnet = 1 //If it's available to download on ntnet. pretty self explanatory.
available_on_syndinet = 0 // ditto but on emagged syndie net. Use this for antag programs
usage_flags = PROGRAM_ALL // Bitflags (PROGRAM_CONSOLE, PROGRAM_LAPTOP, PROGRAM_TABLET combination) or PROGRAM_ALL
//^^- The comment above sorta explains it. Use this to limit what kind of machines can run the program. For example, comms program should be limited to consoles and laptops.
var/ui_header = "downloader_finished.gif" //This one is kinda cool. If you have the program minimized, this will show up in the header of the computer screen.
//you can even have the program change what the header is based on the situation! see alarm.dm for an example.
```
##Preinstalls
Now. for pre-installing stuff.
Primarily done for consoles, there's an install_programs() proc in the console presets file in the machines folder.
for example, the command console one.
```DM
/obj/machinery/modular_computer/console/preset/command/install_programs()
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
cpu.hard_drive.store_file(new/datum/computer_file/program/card_mod())
```
Basically, you want to do cpu.hard_drive.store_file(new/*program path here*()) and put it in the subtype's install_programs().
Probably pretty self explanatory, but just in case.
Will probably be expanded when new features come around or I get asked to mention something.
@@ -160,3 +160,7 @@
data["downloadable_programs"] = all_entries
return data
/datum/computer_file/program/ntnetdownload/kill_program(forced)
abort_file_download()
return ..(forced)
@@ -28,7 +28,7 @@
if(!channel)
return 1
var/mob/living/user = usr
var/message = sanitize(input(user, "Enter message or leave blank to cancel: "))
var/message = reject_bad_text(input(user, "Enter message or leave blank to cancel: "))
if(!message || !channel)
return
channel.add_message(message, username)
@@ -51,7 +51,7 @@
if(C.password)
var/mob/living/user = usr
var/password = sanitize(input(user,"Access Denied. Enter password:"))
var/password = reject_bad_text(input(user,"Access Denied. Enter password:"))
if(C && (password == C.password))
C.add_client(src)
channel = C
@@ -66,7 +66,7 @@
if("PRG_newchannel")
. = 1
var/mob/living/user = usr
var/channel_title = sanitize(input(user,"Enter channel name or leave blank to cancel:"))
var/channel_title = reject_bad_text(input(user,"Enter channel name or leave blank to cancel:"))
if(!channel_title)
return
var/datum/ntnet_conversation/C = new/datum/ntnet_conversation()
@@ -133,7 +133,7 @@
if(!operator_mode || !channel)
return 1
var/mob/living/user = usr
var/newname = sanitize(input(user, "Enter new channel name or leave blank to cancel:"))
var/newname = reject_bad_text(input(user, "Enter new channel name or leave blank to cancel:"))
if(!newname || !channel)
return
channel.add_status_message("Channel renamed from [channel.title] to [newname] by operator.")
@@ -109,7 +109,7 @@ var/global/nttransfer_uid = 0
if(!remote || !remote.provided_file)
return
if(remote.server_password)
var/pass = sanitize(input(usr, "Code 401 Unauthorized. Please enter password:", "Password required"))
var/pass = reject_bad_text(input(usr, "Code 401 Unauthorized. Please enter password:", "Password required"))
if(pass != remote.server_password)
error = "Incorrect Password"
return
@@ -127,7 +127,7 @@ var/global/nttransfer_uid = 0
provided_file = null
return 1
if("PRG_setpassword")
var/pass = sanitize(input(usr, "Enter new server password. Leave blank to cancel, input 'none' to disable password.", "Server security", "none"))
var/pass = reject_bad_text(input(usr, "Enter new server password. Leave blank to cancel, input 'none' to disable password.", "Server security", "none"))
if(!pass)
return
if(pass == "none")