From 9f2705dd6bcfb6319a198722b2ac3af75efceb1c Mon Sep 17 00:00:00 2001 From: Dedhia Date: Mon, 1 Oct 2018 08:44:34 -0700 Subject: [PATCH 1/5] Adds password protected files to modular computers. --- .../file_system/computer_file.dm | 16 +++++++-- .../programs/generic/file_browser.dm | 35 ++++++++++++++++--- nano/templates/file_manager.tmpl | 7 ++++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 25ca387a78e..8adb5f98770 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -4,10 +4,11 @@ var/global/file_uid = 0 var/filename = "NewFile" // Placeholder. No spacebars var/filetype = "XXX" // File full names are [filename].[filetype] so like NewFile.XXX in this case var/size = 1 // File size in GQ. Integers only! - var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file. + var/obj/item/computer_hardware/hard_drive/holder // Holder that contains this file. var/unsendable = 0 // Whether the file may be sent to someone via NTNet transfer or other means. var/undeletable = 0 // Whether the file may be deleted. Setting to 1 prevents deletion/renaming/etc. var/uid // UID of this file + var/password = "" // Placeholder for password. /datum/computer_file/New() ..() @@ -36,4 +37,15 @@ var/global/file_uid = 0 else temp.filename = filename temp.filetype = filetype - return temp \ No newline at end of file + temp.password = password + return temp + +/datum/computer_file/proc/can_access_file(var/mob/user, input_password = "") + if(!password) + return TRUE + else if(!input_password) + input_password = sanitize(input(user, "Please enter a password to access file '[filename]':")) + if (input_password == password) + return TRUE + else + return FALSE \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm index 89fea156510..0c99bd0a997 100644 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm @@ -55,7 +55,8 @@ "name" = F.filename, "type" = F.filetype, "size" = F.size, - "undeletable" = F.undeletable + "undeletable" = F.undeletable, + "encrypted" = !!F.password ))) data["files"] = files if(RHDD) @@ -66,7 +67,8 @@ "name" = F.filename, "type" = F.filetype, "size" = F.size, - "undeletable" = F.undeletable + "undeletable" = F.undeletable, + "encrypted" = !!F.password ))) data["usbfiles"] = usbfiles @@ -83,7 +85,13 @@ switch(href_list["action"]) if("PRG_openfile") . = 1 - open_file = href_list["name"] + var/datum/computer_file/F = HDD.find_file_by_name(href_list["PRG_openfile"]) + if (!F) + return + if (F.can_access_file(usr)) + open_file = href_list["PRG_openfile"] + else + return if("PRG_newtextfile") . = 1 var/newname = stripped_input(usr, "Enter file name or leave blank to cancel:", "File rename", max_length=50) @@ -197,4 +205,23 @@ if(!F || !istype(F)) return 1 var/datum/computer_file/C = F.clone(0) - HDD.store_file(C) \ No newline at end of file + HDD.store_file(C) + if("PRG_encrypt") + . = 1 + if(!HDD) + return 1 + var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"]) + if(!F || F.undeletable) + return 1 + if(F.password) + return + F.password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File")) + if("PRG_decrypt") + . = 1 + if(!HDD) + return 1 + var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"]) + if(!F || F.undeletable) + return 1 + if(F.can_access_file(usr)) + F.password = "" \ No newline at end of file diff --git a/nano/templates/file_manager.tmpl b/nano/templates/file_manager.tmpl index 1bdb0cd95c4..3743c6db7d0 100644 --- a/nano/templates/file_manager.tmpl +++ b/nano/templates/file_manager.tmpl @@ -32,6 +32,13 @@ {{:helper.link('DELETE', 'trash', {'action' : 'PRG_deletefile', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{:helper.link('RENAME', 'pencil', {'action' : 'PRG_rename', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{:helper.link('CLONE', 'files-o', {'action' : 'PRG_clone', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} + {{if data.usbconnected}} + {{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} + {{if !value.encrypted}} + {{:helper.link('ENCRYPT', null, { "PRG_encrypt" : value.name }, (value.undeletable) ? 'disabled' : null)}} + {{else}} + {{:helper.link('DECRYPT', null, { "PRG_decrypt" : value.name }, (value.undeletable) ? 'disabled' : null)}} + {{/if}} {{if data.usbconnected}} {{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{/if}} From 0d1ee8c64f571f6a81fc0883ae908d69330c920f Mon Sep 17 00:00:00 2001 From: Dedhia Date: Tue, 2 Oct 2018 07:43:38 -0700 Subject: [PATCH 2/5] Changes all instances of if ( to if( --- code/modules/modular_computers/file_system/computer_file.dm | 2 +- .../file_system/programs/generic/file_browser.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 8adb5f98770..5baf7a73a40 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -45,7 +45,7 @@ var/global/file_uid = 0 return TRUE else if(!input_password) input_password = sanitize(input(user, "Please enter a password to access file '[filename]':")) - if (input_password == password) + if(input_password == password) return TRUE else return FALSE \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm index 0c99bd0a997..deda1b48e43 100644 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm @@ -86,9 +86,9 @@ if("PRG_openfile") . = 1 var/datum/computer_file/F = HDD.find_file_by_name(href_list["PRG_openfile"]) - if (!F) + if(!F) return - if (F.can_access_file(usr)) + if(F.can_access_file(usr)) open_file = href_list["PRG_openfile"] else return From 7ccb5b3ded4ed227b34e62d28bcfe52b140e468f Mon Sep 17 00:00:00 2001 From: Dedhia Date: Sun, 7 Oct 2018 06:50:50 -0700 Subject: [PATCH 3/5] tigercat requested changes. --- .../modular_computers/file_system/computer_file.dm | 7 +++---- .../file_system/programs/generic/file_browser.dm | 13 +++++++------ nano/templates/file_manager.tmpl | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/modules/modular_computers/file_system/computer_file.dm b/code/modules/modular_computers/file_system/computer_file.dm index 5baf7a73a40..f3b5a9659b2 100644 --- a/code/modules/modular_computers/file_system/computer_file.dm +++ b/code/modules/modular_computers/file_system/computer_file.dm @@ -40,12 +40,11 @@ var/global/file_uid = 0 temp.password = password return temp -/datum/computer_file/proc/can_access_file(var/mob/user, input_password = "") +/datum/computer_file/proc/can_access_file(mob/user, input_password = "") if(!password) return TRUE - else if(!input_password) + if(!input_password) input_password = sanitize(input(user, "Please enter a password to access file '[filename]':")) if(input_password == password) return TRUE - else - return FALSE \ No newline at end of file + return FALSE \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm index deda1b48e43..373660438c8 100644 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm @@ -86,12 +86,9 @@ if("PRG_openfile") . = 1 var/datum/computer_file/F = HDD.find_file_by_name(href_list["PRG_openfile"]) - if(!F) - return - if(F.can_access_file(usr)) - open_file = href_list["PRG_openfile"] - else + if(!F.can_access_file(usr)) return + open_file = href_list["PRG_openfile"] if("PRG_newtextfile") . = 1 var/newname = stripped_input(usr, "Enter file name or leave blank to cancel:", "File rename", max_length=50) @@ -215,7 +212,11 @@ return 1 if(F.password) return - F.password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File")) + var/new_password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File")) + if(!new_password) + to_chat(usr, "File not encrypted.") + return + F.password=new_password if("PRG_decrypt") . = 1 if(!HDD) diff --git a/nano/templates/file_manager.tmpl b/nano/templates/file_manager.tmpl index 3743c6db7d0..5e51c221bb2 100644 --- a/nano/templates/file_manager.tmpl +++ b/nano/templates/file_manager.tmpl @@ -35,9 +35,9 @@ {{if data.usbconnected}} {{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{if !value.encrypted}} - {{:helper.link('ENCRYPT', null, { "PRG_encrypt" : value.name }, (value.undeletable) ? 'disabled' : null)}} + {{:helper.link('ENCRYPT', null, { 'PRG_encrypt' : value.name }, (value.undeletable) ? 'disabled' : null)}} {{else}} - {{:helper.link('DECRYPT', null, { "PRG_decrypt" : value.name }, (value.undeletable) ? 'disabled' : null)}} + {{:helper.link('DECRYPT', null, { 'PRG_decrypt' : value.name }, (value.undeletable) ? 'disabled' : null)}} {{/if}} {{if data.usbconnected}} {{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} From ef7ce638da724bb41fcf4b8da67f2ba0fbf5cf54 Mon Sep 17 00:00:00 2001 From: Dedhia Date: Mon, 8 Oct 2018 12:23:53 -0700 Subject: [PATCH 4/5] Fixes, testing when I get home --- nano/templates/file_manager.tmpl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nano/templates/file_manager.tmpl b/nano/templates/file_manager.tmpl index 5e51c221bb2..51d40b84475 100644 --- a/nano/templates/file_manager.tmpl +++ b/nano/templates/file_manager.tmpl @@ -32,12 +32,10 @@ {{:helper.link('DELETE', 'trash', {'action' : 'PRG_deletefile', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{:helper.link('RENAME', 'pencil', {'action' : 'PRG_rename', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{:helper.link('CLONE', 'files-o', {'action' : 'PRG_clone', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} - {{if data.usbconnected}} - {{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{if !value.encrypted}} - {{:helper.link('ENCRYPT', null, { 'PRG_encrypt' : value.name }, (value.undeletable) ? 'disabled' : null)}} + {{:helper.link('ENCRYPT', null, {'action' : 'PRG_encrypt', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{else}} - {{:helper.link('DECRYPT', null, { 'PRG_decrypt' : value.name }, (value.undeletable) ? 'disabled' : null)}} + {{:helper.link('DECRYPT', null, {'action' : 'PRG_decrypt', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} {{/if}} {{if data.usbconnected}} {{:helper.link('EXPORT', 'upload', {'action' : 'PRG_copytousb', 'name' : value.name}, value.undeletable ? 'disabled' : null)}} From 98d37fd9a095214ca0695a86d6c757f78a41d32a Mon Sep 17 00:00:00 2001 From: dapocalypse Date: Sat, 13 Oct 2018 16:10:26 -0700 Subject: [PATCH 5/5] putting name in the hrefs --- .../file_system/programs/generic/file_browser.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm index 373660438c8..23b2cdab7ab 100644 --- a/code/modules/modular_computers/file_system/programs/generic/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/file_browser.dm @@ -85,10 +85,10 @@ switch(href_list["action"]) if("PRG_openfile") . = 1 - var/datum/computer_file/F = HDD.find_file_by_name(href_list["PRG_openfile"]) + var/datum/computer_file/F = HDD.find_file_by_name(href_list["name"]) if(!F.can_access_file(usr)) return - open_file = href_list["PRG_openfile"] + open_file = href_list["name"] if("PRG_newtextfile") . = 1 var/newname = stripped_input(usr, "Enter file name or leave blank to cancel:", "File rename", max_length=50)