From 76ab3bcce3b6d05820fcaf4a1a1369beb88ffc22 Mon Sep 17 00:00:00 2001
From: Oliver Wiese <oliver.wiese@fu-berlin.de>
Date: Tue, 6 Mar 2018 18:20:19 +0100
Subject: [PATCH] update invitation

---
 .../Invitation/invitationText.html            |  4 ++
 .../Invitation/invitationTextCensor.html      |  4 ++
 enzevalos_iphone/MailHandler.swift            | 23 ++++-----
 .../SendViewController+Invitation.swift       | 48 ++++++++++++-------
 enzevalos_iphone/SendViewController.swift     | 10 ++--
 enzevalos_iphone/StudySettings.swift          |  1 -
 enzevalos_iphone/de.lproj/Localizable.strings |  3 +-
 enzevalos_iphone/en.lproj/Localizable.strings |  6 +--
 8 files changed, 62 insertions(+), 37 deletions(-)

diff --git a/enzevalos_iphone/Invitation/invitationText.html b/enzevalos_iphone/Invitation/invitationText.html
index 5527b918..6d889174 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 f925d505..35118781 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 830626c4..0e51f6ef 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 e35766ca..176ce12f 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 80076815..feb8ff3b 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 2407bff5..05f79b80 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 14d5df53..f148c0c3 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 ab86bba3..ac8a0d17 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";
-
-- 
GitLab