mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
114 lines
3.8 KiB
Plaintext
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
|