Files
CHOMPStation2/code/modules/modular_computers/NTNet/emails/email_account.dm

114 lines
3.8 KiB
Plaintext

/datum/computer_file/data/email_account/
var/list/inbox = list()
var/list/outbox = list()
var/list/spam = list()
var/list/deleted = list()
var/login = ""
var/password = ""
/// Whether you can log in with this account. Set to FALSE for system accounts.
var/can_login = TRUE
/// Whether the account is banned by the SA.
var/suspended = FALSE
var/connected_clients = list()
var/fullname = "N/A"
var/assignment = "N/A"
var/notification_mute = FALSE
var/notification_sound = "*beep*"
/datum/computer_file/data/email_account/calculate_size()
size = 1
for(var/datum/computer_file/data/email_message/stored_message in all_emails())
stored_message.calculate_size()
size += stored_message.size
/datum/computer_file/data/email_account/New()
ntnet_global.email_accounts.Add(src)
..()
/datum/computer_file/data/email_account/Destroy()
ntnet_global.email_accounts.Remove(src)
. = ..()
/datum/computer_file/data/email_account/proc/all_emails()
return (inbox | spam | deleted)
/datum/computer_file/data/email_account/proc/send_mail(var/recipient_address, var/datum/computer_file/data/email_message/message, var/relayed = 0)
var/datum/computer_file/data/email_account/recipient
for(var/datum/computer_file/data/email_account/account in ntnet_global.email_accounts)
if(account.login == recipient_address)
recipient = account
break
if(!istype(recipient))
return 0
if(!recipient.receive_mail(message, relayed))
return
ntnet_global.add_log_with_ids_check("EMAIL LOG: [login] -> [recipient.login] title: [message.title].")
return 1
/datum/computer_file/data/email_account/proc/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed)
received_message.set_timestamp()
if(!ntnet_global.intrusion_detection_enabled)
inbox.Add(received_message)
return 1
// Spam filters may occassionally let something through, or mark something as spam that isn't spam.
if(received_message.spam)
if(prob(98))
spam.Add(received_message)
else
inbox.Add(received_message)
else
if(prob(1))
spam.Add(received_message)
else
inbox.Add(received_message)
return 1
// Address namespace (@internal-services.nt) for email addresses with special purpose only!.
/datum/computer_file/data/email_account/service/
can_login = FALSE
/datum/computer_file/data/email_account/service/broadcaster/
login = EMAIL_BROADCAST
/datum/computer_file/data/email_account/service/broadcaster/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed)
if(suspended || !istype(received_message) || relayed)
return FALSE
// Possibly exploitable for user spamming so keep admins informed.
if(!received_message.spam)
log_and_message_admins("Broadcast email address used by [usr]. Message title: [received_message.title].")
spawn(0)
for(var/datum/computer_file/data/email_account/email_account in ntnet_global.email_accounts)
var/datum/computer_file/data/email_message/new_message = received_message.clone()
send_mail(email_account.login, new_message, 1)
sleep(2)
return TRUE
/datum/computer_file/data/email_account/service/document
login = EMAIL_DOCUMENTS
/datum/computer_file/data/email_account/service/sysadmin
login = EMAIL_SYSADMIN
/datum/computer_file/data/email_account/service/broadcaster/receive_mail(var/datum/computer_file/data/email_message/received_message, var/relayed)
if(!istype(received_message) || relayed)
return 0
// Possibly exploitable for user spamming so keep admins informed.
if(!received_message.spam)
log_and_message_admins("Broadcast email address used by [usr]. Message title: [received_message.title].")
spawn(0)
for(var/datum/computer_file/data/email_account/email_account in ntnet_global.email_accounts)
var/datum/computer_file/data/email_message/new_message = received_message.clone()
send_mail(email_account.login, new_message, 1)
sleep(2)
return 1