diff --git a/enzevalos_iphone/Invitation/invitationText.html b/enzevalos_iphone/Invitation/invitationText.html index 5527b918a0b213d489427117e1c789b35cb615ed..6d889174447e87c833f3d1159b364c8db872df79 100644 --- a/enzevalos_iphone/Invitation/invitationText.html +++ b/enzevalos_iphone/Invitation/invitationText.html @@ -59,6 +59,10 @@ <hr> <a href="%@"><div class="alert-container"><div class="alert-icon"><svg fill="#ffffff" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/></svg></div><div class="alert-text">Teile dieser E-Mail sind verschlüsselt!</div></div></a> Eine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.<br>Dein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.<br>Du kannst die verschlüsselten Wörter jederzeit <a href="%@">hier</a> entschlüsseln. + <br> + <div class="body-text"> + %@ + </div> </body> </html> diff --git a/enzevalos_iphone/Invitation/invitationTextCensor.html b/enzevalos_iphone/Invitation/invitationTextCensor.html index f925d50586972a0f10a4ef4f85e4f101e58e5fb9..35118781e0cae08600049eac03ff6912d23baf57 100644 --- a/enzevalos_iphone/Invitation/invitationTextCensor.html +++ b/enzevalos_iphone/Invitation/invitationTextCensor.html @@ -57,6 +57,10 @@ <hr> <a href="%@"><div class="alert-container"><div class="alert-icon"><svg fill="#ffffff" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" fill="none"/><path d="M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"/></svg></div><div class="alert-text">Warum ist nicht alles lesbar?</div></div></a> Eine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.<br>Dein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.<br>Mehr Informationen finden sich <a href="%@">hier</a>. + <br> + <div class="body-text"> + %@ + </div> </body> </html> diff --git a/enzevalos_iphone/MailHandler.swift b/enzevalos_iphone/MailHandler.swift index 830626c41a3456097fbbf0bd2aa02c061b316407..0e51f6ef2588159746e969a25c47a80a7533547d 100644 --- a/enzevalos_iphone/MailHandler.swift +++ b/enzevalos_iphone/MailHandler.swift @@ -268,7 +268,7 @@ class MailHandler { } //logMail should be false, if called from Logger, otherwise - func send(_ toEntrys: [String], ccEntrys: [String], bccEntrys: [String], subject: String, message: String, sendEncryptedIfPossible: Bool = true, callback: @escaping (Error?) -> Void, loggingMail: Bool = false, isHTMLContent: Bool = false, warningReact: Bool = false, inviteMail: Bool = false, textparts: Int = 0) { + func send(_ toEntrys: [String], ccEntrys: [String], bccEntrys: [String], subject: String, message: String, sendEncryptedIfPossible: Bool = true, callback: @escaping (Error?) -> Void, loggingMail: Bool = false, htmlContent: String? = nil, warningReact: Bool = false, inviteMail: Bool = false, textparts: Int = 0) { if let useraddr = (UserManager.loadUserValue(Attribute.userAddr) as? String) { let session = createSMTPSession() @@ -379,11 +379,12 @@ class MailHandler { createLoggingSendCopy(sendData: builder.openPGPEncryptedMessageData(withEncryptedData: sendData)) } - if (isHTMLContent == true) { - builder.htmlBody = message - } else { - builder.textBody = message - } + if let html = htmlContent { + builder.htmlBody = html + } else { + builder.textBody = message + } + } else { //TODO do it better callback(NSError(domain: NSCocoaErrorDomain, code: NSPropertyListReadCorruptError, userInfo: nil)) @@ -392,11 +393,11 @@ class MailHandler { if let unenc = ordered[CryptoScheme.UNKNOWN], !loggingMail { if unenc.count > 0 { - if (isHTMLContent == true) { - builder.htmlBody = message - } else { - builder.textBody = message - } + if let html = htmlContent { + builder.htmlBody = html + } else { + builder.textBody = message + } sendData = builder.data() sendOperation = session.sendOperation(with: sendData, from: userID, recipients: unenc) diff --git a/enzevalos_iphone/SendViewController+Invitation.swift b/enzevalos_iphone/SendViewController+Invitation.swift index e35766caae4415cdf60cc33ce1db9415e87f520e..176ce12fa1ec6114433d30c3d32cde497fa3044a 100644 --- a/enzevalos_iphone/SendViewController+Invitation.swift +++ b/enzevalos_iphone/SendViewController+Invitation.swift @@ -10,14 +10,6 @@ import UIKit // MARK: - InvitationSelection - -/* - TODO: - Code speichern (pro Kontakt) - Erklärung was genau passiert? - InviteMode == Enc || InviteMode == Censor -> Einladebutton wird zu Infobutton - FreiText -> Popup -> leere E-Mail -*/ struct InvitationSelection { var selectedWords = Set<NSRange>() @@ -35,7 +27,7 @@ extension SendViewController { } } - func htmlMessage() -> (String?, Int) { + func htmlMessage() -> (html: String?, textparts: Int, plaintext: String?) { var htmlName = "invitationText" if isCensored { htmlName = "invitationTextCensor" @@ -44,10 +36,12 @@ extension SendViewController { let resource = Bundle.main.url(forResource: htmlName, withExtension: "html"), let data = try? Data(contentsOf: resource), let htmlString = String(data: data, encoding: .utf8), (self.isEligibleForInvitation() == true && self.invitationSelection.selectedWords.isEmpty == false) else { - return (nil, 0) + return (nil, 0, nil) } var text: String = self.textView.text + var plainText: String = self.textView.text + let textsToEncrypt = self.invitationSelection.selectedWords.sorted { (lhs, rhs) -> Bool in return lhs.location < rhs.location }.map { (range) -> String in @@ -74,12 +68,12 @@ extension SendViewController { guard let urlTexts = texts.joined(separator: ",").urlString, let cipher = cipherText.chiphers.first?.urlString else { - return (nil, 0) + return (nil, 0, nil) } - var link = "letterbox.imp.fu-berlin.de?text=\(urlTexts)&cipher=\(cipher)&id=\(StudySettings.studyID)" + var link = "http://letterbox.imp.fu-berlin.de?text=\(urlTexts)&cipher=\(cipher)&id=\(StudySettings.studyID)" if isCensored{ - link = "letterbox.imp.fu-berlin.de?id=\(StudySettings.studyID)" + link = "http://letterbox.imp.fu-berlin.de?id=\(StudySettings.studyID)" } let locations = self.invitationSelection.selectedWords.sorted { (lhs, rhs) -> Bool in @@ -90,21 +84,39 @@ extension SendViewController { if isCensored{ let t = text as NSString text = t.replacingCharacters(in: range, with: texts[index]) - //text = text + NSLocalizedString("Invitation.CensorFooter", comment: "") + plainText = (plainText as NSString).replacingCharacters(in: range, with: texts[index]) } else{ text = (text as NSString).replacingCharacters(in: range, with: "<a class=\"encrypted-text\">\(texts[index])</a>") + plainText = (plainText as NSString).replacingCharacters(in: range, with: texts[index]) + } } if (self.invitationSelection.code == nil && StudySettings.invitationsmode == InvitationMode.PasswordEnc) { self.invitationSelection.code = cipherText.password } - if StudySettings.invitationsmode == InvitationMode.Censorship{ - print(text) - + var previousText = "" + + if let range = text.range(of: NSLocalizedString("Mail.Signature", comment: "")){ + text.removeSubrange(range) + } + + if let preMail = prefilledMail, let previousBody = preMail.body{ + if let range = text.range(of: previousBody){ + previousText = previousBody + text.removeSubrange(range) + } + } + + var plainFooter = String(format: NSLocalizedString("Invitation.EncryptionFooter", comment: ""), link, link) + if isCensored { + plainFooter = String(format: NSLocalizedString("Invitation.CensorFooter", comment: ""), link, link) } - return (String(format: htmlString, text, link, link), texts.count) + + plainText = plainText + plainFooter + "\n\n" + previousText + + return (String(format: htmlString, text, link, link, previousText), texts.count, nil) } fileprivate func removeAllInvitationMarks() { diff --git a/enzevalos_iphone/SendViewController.swift b/enzevalos_iphone/SendViewController.swift index 80076815de72969dbfb4f38af3502d62f0721ca7..feb8ff3b50eebc567a8b9aff1ffd11b27bfaa4b6 100644 --- a/enzevalos_iphone/SendViewController.swift +++ b/enzevalos_iphone/SendViewController.swift @@ -743,9 +743,13 @@ class SendViewController: UIViewController { let toEntrys = toText.mailTokens let ccEntrys = ccText.mailTokens let subject = subjectText.inputText()! - let (hmtlmessage, counterTextparts) = self.htmlMessage() - let message: String = (hmtlmessage ?? self.textView.text) + let (hmtlmessage, counterTextparts, plaintext) = self.htmlMessage() + let message: String = (plaintext ?? self.textView.text) + if isCensoredMail || isPartialEncryptedMail{ + invite = true + } + if invite { for addr in toEntrys { if let mailAddr = DataHandler.handler.findMailAddress(adr: addr as! String) { @@ -759,7 +763,7 @@ class SendViewController: UIViewController { } DataHandler.handler.save(during: "invite") } - mailHandler.send(toEntrys as NSArray as! [String], ccEntrys: ccEntrys as NSArray as! [String], bccEntrys: [], subject: subject, message: message, sendEncryptedIfPossible: sendEncryptedIfPossible, callback: self.mailSend, isHTMLContent: (hmtlmessage != nil), inviteMail: invite, textparts: counterTextparts) + mailHandler.send(toEntrys as NSArray as! [String], ccEntrys: ccEntrys as NSArray as! [String], bccEntrys: [], subject: subject, message: message, sendEncryptedIfPossible: sendEncryptedIfPossible, callback: self.mailSend, htmlContent: hmtlmessage, inviteMail: invite, textparts: counterTextparts) sendButton.isEnabled = false } } diff --git a/enzevalos_iphone/StudySettings.swift b/enzevalos_iphone/StudySettings.swift index 2407bff5be972b5c86c3ccf9104656e789e96900..05f79b8080530e36b424b3a75f6535a8eb0d6759 100644 --- a/enzevalos_iphone/StudySettings.swift +++ b/enzevalos_iphone/StudySettings.swift @@ -100,7 +100,6 @@ class StudySettings { static var invitationsmode: InvitationMode{ get{ - return InvitationMode.PasswordEnc let value = UserDefaults.standard.integer(forKey: StudyParamter.Invitation.keyName) if let mode = InvitationMode.init(rawValue: value){ return mode diff --git a/enzevalos_iphone/de.lproj/Localizable.strings b/enzevalos_iphone/de.lproj/Localizable.strings index 14d5df5363185e9753572022e73aa0e71bb82341..f148c0c30cf3611f9501f24b9748339614a4323e 100644 --- a/enzevalos_iphone/de.lproj/Localizable.strings +++ b/enzevalos_iphone/de.lproj/Localizable.strings @@ -200,6 +200,7 @@ "Invitation.Encrypt.Censor" = "Verbergen"; "Invitation.Decrypt" = "Entschlüsseln"; "Invitation.Decrypt.Censor" = "Offenlegen"; -"Invitation.CensorFooter" = "\n\n____________________________\nWarum ist nicht alles lesbar?\n Eine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.\nDein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.\nMehr Informationen finden sich auf letterbox.imp.fu-berlin.de "; +"Invitation.CensorFooter" = "\n\n____________________________\n\nWarum ist nicht alles lesbar?\n\nEine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.\n\nDein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.\n\nMehr Informationen finden sich unter: %@\n\n"; +"Invitation.EncryptionFooter" = "\n\n____________________________\n\nTeile dieser E-Mail sind verschlüsselt!\n\nEine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.\n\nDein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.\n\nDu kannst die verschlüsselten Wörter jederzeit unter %@ entschlüsseln.\n\n"; "Invitation.ComposeMail" = "Die E-Mail kannst du nach deinen Wünschen anpassen. Zur wissenschaftlichen Untersuchung wird der Inhalt dieser E-Mail auch gespeichert."; "Mail.Signature" = "\n\n____________________________\n\nVerfasst mit Letterbox. Mehr Informationen: http://letterbox.imp.fu-berlin.de\n\n"; diff --git a/enzevalos_iphone/en.lproj/Localizable.strings b/enzevalos_iphone/en.lproj/Localizable.strings index ab86bba3e71f7ef1c6b159d68d8b861bd74ee24a..ac8a0d174224987c1b0eaf58239b73333bbaf56a 100644 --- a/enzevalos_iphone/en.lproj/Localizable.strings +++ b/enzevalos_iphone/en.lproj/Localizable.strings @@ -151,7 +151,7 @@ "inviteContacts" = "Unsichere Kontakte einladen"; "inviteContacts.Censor" = "Unsichere Kontakte einladen"; "inviteSubject" = "Lass uns unsere E-Mails verschlüsseln!"; -"inviteText" = "Hallo, \n\nbisher waren unsere E-Mails immer wie Postkarten und die E-Mail-Provider konnten immer mitlesen. Davor schützt Ende-Zu-Ende-Verschlüsselung. Ich probiere gerade Letterbox aus, aber es gibt auch andere Programme. Letterbox ist besonders einfach und unkompliziert. Wollen wir es mal gemeinsam ausprobieren? \n\n Eine Übersicht über andere Programme und weitere Erklärungen finden sich hier: \n\n http://letterbox.imp.fu-berlin.de?id=%@\ \n\nViele Grüße!";//"Hallo!\n\nEs gibt eine neue App die es super einfach macht verschlüsselt über E-Mail zu kommunizieren. Sie heißt Letterbox und wird aktuell in einer wissenschaftlichen Studie getestet.\n\nEs wäre toll wenn du sie mal ausprobieren würdest!\n\nGehe einfach auf https://userpage.fu-berlin.de/letterbox um mitzumachen.\n\nViele Grüße!"; +"inviteText" = "Hallo, \n\nbisher waren unsere E-Mails immer wie Postkarten und die E-Mail-Provider konnten immer mitlesen. Davor schützt Ende-Zu-Ende-Verschlüsselung. Ich probiere gerade Letterbox aus, aber es gibt auch andere Programme. Letterbox ist besonders einfach und unkompliziert. Wollen wir es mal gemeinsam ausprobieren? \n\n Eine Übersicht über andere Programme und weitere Erklärungen finden sich hier: \n\n http://letterbox.imp.fu-berlin.de?id=%@ \n\nViele Grüße!";//"Hallo!\n\nEs gibt eine neue App die es super einfach macht verschlüsselt über E-Mail zu kommunizieren. Sie heißt Letterbox und wird aktuell in einer wissenschaftlichen Studie getestet.\n\nEs wäre toll wenn du sie mal ausprobieren würdest!\n\nGehe einfach auf https://userpage.fu-berlin.de/letterbox um mitzumachen.\n\nViele Grüße!"; "noName" = "OHNE NAME"; "you" = "Deine Ablage"; "thisIsYou" = "Hier werden E-Mails, die du dir selber schickst, gesammelt"; @@ -200,7 +200,7 @@ "Invitation.Encrypt.Censor" = "Verbergen"; "Invitation.Decrypt" = "Entschlüsseln"; "Invitation.Decrypt.Censor" = "Offenlegen"; -"Invitation.CensorFooter" = "\n\n____________________________\nWarum ist nicht alles lesbar?\n Eine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.\nDein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.\nMehr Informationen finden sich auf letterbox.imp.fu-berlin.de "; +"Invitation.CensorFooter" = "\n\n____________________________\n\nWarum ist nicht alles lesbar?\n\nEine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.\n\nDein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.\n\nMehr Informationen finden sich unter: %@\n\n"; +"Invitation.EncryptionFooter" = "\n\n____________________________\n\nTeile dieser E-Mail sind verschlüsselt!\n\nEine unverschlüsselte E-Mail ist wie eine Postkarte; der E-Mail-Provider und möglicherweise auch Andere können mitlesen. Einige Teile dieser Nachricht sind privat oder pikant. Sie sollen vor Mitlesern verborgen bleiben und wurden darum geschwärzt.\n\nDein Gegenüber nutzt mit Letterbox bereits ein Programm um die Kommunikation vor den neugierigen Augen Anderer zu schützen. Wenn Du auch mitmachst, erreicht ihr beide gemeinsam das Ziel.\n\nDu kannst die verschlüsselten Wörter jederzeit unter %@ entschlüsseln.\n\n"; "Invitation.ComposeMail" = "Die E-Mail kannst du nach deinen Wünschen anpassen. Zur wissenschaftlichen Untersuchung wird der Inhalt dieser E-Mail auch gespeichert."; "Mail.Signature" = "\n\n____________________________\n\nVerfasst mit Letterbox. Mehr Informationen: http://letterbox.imp.fu-berlin.de\n\n"; -