diff --git a/EnzevalosContact+CoreDataClass.swift b/EnzevalosContact+CoreDataClass.swift index 7ee748fd03621548dc5e459f333952c442be981c..f337d916372e5b30cf46acb48d083de83dad5f87 100644 --- a/EnzevalosContact+CoreDataClass.swift +++ b/EnzevalosContact+CoreDataClass.swift @@ -29,23 +29,23 @@ fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool { @objc(EnzevalosContact) open class EnzevalosContact: NSManagedObject, Contact, Comparable { - override open var debugDescription: String{ - get{ + override open var debugDescription: String { + get { var string = "" string = string + "Name: \(name) #Keys: \(publicKeys.count) #Addr: \(addresses.count) \n Addresses: \n" - for addr in addresses{ - if let a = addr as? Mail_Address{ + for addr in addresses { + if let a = addr as? Mail_Address { string = string + a.address + "\n" } } string = string + "public Keys: \n" - for pk in publicKeys{ + for pk in publicKeys { string = string + "\(pk.keyID) \n" } return string } } - + open var name: String { if let name = nameOptional { return name @@ -80,7 +80,7 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { open var to: [PersistentMail] { get { var mails = [PersistentMail]() - for adr in addresses{ + for adr in addresses { if let a = adr as? Mail_Address, let to = a.to { for m in to { mails.append(m as! PersistentMail) @@ -134,11 +134,11 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { return mails } } - - var publicKeys: Set<PersistentKey>{ - get{ + + var publicKeys: Set<PersistentKey> { + get { var pks = Set<PersistentKey>() - for adr in getMailAddresses(){ + for adr in getMailAddresses() { pks = pks.union(adr.publicKeys) } return pks @@ -147,16 +147,16 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { open var records: [KeyRecord] { get { - if let krecords = self.keyrecords as? Set<KeyRecord>{ + if let krecords = self.keyrecords as? Set<KeyRecord> { return Array(krecords) - } + } return [] } } open var hasKey: Bool { get { - for item in addresses{ + for item in addresses { let adr = item as! MailAddress if adr.hasKey { return true @@ -168,16 +168,16 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { open var cnContact: CNContact? { get { - if let cn = cnidentifier{ + if let cn = cnidentifier { let contacts = AddressHandler.getContactByID(cn) - if contacts.count > 0{ + if contacts.count > 0 { return contacts.first } } return nil } } - + open var newCnContact: CNContact { let con = CNMutableContact() let name = self.displayname @@ -227,10 +227,10 @@ open class EnzevalosContact: NSManagedObject, Contact, Comparable { } return adr } - - func isAddress(mailadr: String) -> Bool{ - for adr in getMailAddresses(){ - if mailadr.lowercased() == adr.mailAddress.lowercased(){ + + func isAddress(mailadr: String) -> Bool { + for adr in getMailAddresses() { + if mailadr.lowercased() == adr.mailAddress.lowercased() { return true } } diff --git a/PersistentMail +CoreDataClass.swift b/PersistentMail +CoreDataClass.swift index e5cc27f1c15c449a5456f2dd9ad35dfad462536a..1b7deeeb1de66430f3bbaf81556028402cde76cb 100644 --- a/PersistentMail +CoreDataClass.swift +++ b/PersistentMail +CoreDataClass.swift @@ -15,11 +15,11 @@ import CoreData open class PersistentMail: NSManagedObject, Mail { public var predecessor: PersistentMail? = nil - + var showMessage: Bool = false var isSecure: Bool { - return isEncrypted && isSigned && isCorrectlySigned && !unableToDecrypt && !trouble && keyID != nil + return isEncrypted && isSigned && isCorrectlySigned && !unableToDecrypt && !trouble && keyID != nil } var isRead: Bool { get { @@ -35,8 +35,8 @@ open class PersistentMail: NSManagedObject, Mail { _ = DataHandler.handler.save(during: "set read flag") } } - - var isAnwered: Bool{ + + var isAnwered: Bool { get { let value = flag.contains(MCOMessageFlag.answered) return value @@ -80,7 +80,7 @@ open class PersistentMail: NSManagedObject, Mail { guard !trouble else { return nil } - + var message: String? = "" if isEncrypted && !unableToDecrypt { message = decryptedBody diff --git a/enzevalos_iphone/About/AboutViewController.swift b/enzevalos_iphone/About/AboutViewController.swift index c8b281f1f91b28f3f2e18d69d0a3e9367066e30b..a51885239dc6333c849a8adc81fdbaf4b50cb2b8 100644 --- a/enzevalos_iphone/About/AboutViewController.swift +++ b/enzevalos_iphone/About/AboutViewController.swift @@ -55,7 +55,7 @@ class AboutTextDelegate: NSObject, UITextViewDelegate { } return true } - + @available(iOS 10.0, *) func textView(_ textView: UITextView, shouldInteractWith url: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { if url.scheme == "mailto" { diff --git a/enzevalos_iphone/AddressHandler.swift b/enzevalos_iphone/AddressHandler.swift index 546c30b8292e8b941b5fbd963c254d8a8d7d240d..6611566083bff561ad72c8ab47f73c11002ffa64 100644 --- a/enzevalos_iphone/AddressHandler.swift +++ b/enzevalos_iphone/AddressHandler.swift @@ -20,35 +20,35 @@ class AddressHandler { do { try AppDelegate.getAppDelegate().contactStore.enumerateContacts(with: CNContactFetchRequest(keysToFetch: [CNContactFormatter.descriptorForRequiredKeys(for: CNContactFormatterStyle.fullName), CNContactEmailAddressesKey as CNKeyDescriptor, CNContactImageDataKey as CNKeyDescriptor, CNContactThumbnailImageDataKey as CNKeyDescriptor]), usingBlock: { - ( c: CNContact, stop) -> Void in - for email in c.emailAddresses { - let addr = email.value as String - var type: UIImage? = nil - if c.emailAddresses.count > 1 { - if email.label == "_$!<Work>!$_" { - type = UIImage(named: "work2_white")! - } else if email.label == "_$!<Home>!$_" { + (c: CNContact, stop) -> Void in + for email in c.emailAddresses { + let addr = email.value as String + var type: UIImage? = nil + if c.emailAddresses.count > 1 { + if email.label == "_$!<Work>!$_" { + type = UIImage(named: "work2_white")! + } else if email.label == "_$!<Home>!$_" { type = UIImage(named: "home2_white")! - } else if email.label == "_$!<iCloud>!$_" { + } else if email.label == "_$!<iCloud>!$_" { //TODO: appleIcon hinzufügen + } } - } - var color = c.getColor() - if c.thumbnailImageData != nil { - color = UIColor.gray //blackColor() - } - if addr == "" { - continue - } - if !inserted.contains(addr.lowercased()) { - if let name = CNContactFormatter.string(from: c, style: .fullName) { - cons.append((c.getImageOrDefault(), name, addr, type, color)) - } else { - cons.append((c.getImageOrDefault(), "NO NAME", addr, type, color)) + var color = c.getColor() + if c.thumbnailImageData != nil { + color = UIColor.gray //blackColor() + } + if addr == "" { + continue + } + if !inserted.contains(addr.lowercased()) { + if let name = CNContactFormatter.string(from: c, style: .fullName) { + cons.append((c.getImageOrDefault(), name, addr, type, color)) + } else { + cons.append((c.getImageOrDefault(), "NO NAME", addr, type, color)) + } } } - } - }) + }) } catch { } var list: [(UIImage, String, String, UIImage?, UIColor)] = [] @@ -117,11 +117,11 @@ class AddressHandler { } } - + return list } - + static func getContact(_ name: String) -> [CNContact] { if name == "" { return [] @@ -163,7 +163,7 @@ class AddressHandler { let cons = DataHandler.handler.folderRecords(folderPath: UserManager.backendInboxFolderPath) var list: [(UIImage, String, String, UIImage?, UIColor)] = [] var localInserted = inserted - + for con: KeyRecord in cons { if list.count >= CollectionDataDelegate.maxFrequent { break @@ -180,7 +180,7 @@ class AddressHandler { } if !insertedEntry { var addrType: UIImage? = nil - + if address.label.label == "_$!<Work>!$_" { addrType = UIImage(named: "work2_white")! } @@ -193,7 +193,7 @@ class AddressHandler { color = UIColor.gray //blackColor() } let entry = (cn.getImageOrDefault(), con.ezContact.displayname!, address.mailAddress, addrType, color) - + list.append(entry) localInserted.append(address.mailAddress) } else { @@ -203,7 +203,7 @@ class AddressHandler { } } } - + return list } @@ -263,15 +263,15 @@ class AddressHandler { return contacts } - - - static func updateCNContacts(){ + + + static func updateCNContacts() { let enzContacts = DataHandler.handler.getContacts() - - for contact in enzContacts{ - if contact.cnContact == nil{ + + for contact in enzContacts { + if contact.cnContact == nil { let contacts = findContact(contact) - if contacts.count > 0{ + if contacts.count > 0 { contact.cnidentifier = contacts.first?.identifier } } diff --git a/enzevalos_iphone/ArrowView.swift b/enzevalos_iphone/ArrowView.swift index 61c634e89064f54751a90d0fb35b0da1d39d3cef..d866bdc0580823dad74a8f64c9717a28cff9d705 100755 --- a/enzevalos_iphone/ArrowView.swift +++ b/enzevalos_iphone/ArrowView.swift @@ -17,12 +17,12 @@ import UIKit class ArrowView: UIView { // MARK:- Variables - let width : CGFloat = 3.0 // change in CircleView too + let width: CGFloat = 3.0 // change in CircleView too /** Changes the Color with which the Line is drawn. Default is gray */ - var pathColor : UIColor? + var pathColor: UIColor? // MARK:- Functions @@ -32,8 +32,8 @@ class ArrowView: UIView { let path = UIBezierPath() path.lineWidth = width - path.move(to: CGPoint(x: self.frame.width/2, y: 0 )) - path.addLine(to: CGPoint(x: self.frame.width/2, y: self.frame.height )) + path.move(to: CGPoint(x: self.frame.width / 2, y: 0)) + path.addLine(to: CGPoint(x: self.frame.width / 2, y: self.frame.height)) path.close() diff --git a/enzevalos_iphone/BadgeCaseCollectionViewCell.swift b/enzevalos_iphone/BadgeCaseCollectionViewCell.swift index f52528583ac0027c98360007558d57b056a8f7c9..799bf3089b8390755488874687439559afda261e 100755 --- a/enzevalos_iphone/BadgeCaseCollectionViewCell.swift +++ b/enzevalos_iphone/BadgeCaseCollectionViewCell.swift @@ -21,5 +21,5 @@ class BadgeCaseCollectionViewCell: UICollectionViewCell { @IBOutlet weak var badgeName: UILabel! - + } diff --git a/enzevalos_iphone/Badges.swift b/enzevalos_iphone/Badges.swift index dbc7471250542d1d575a222695e52b414f5814df..065b61e0b375fabe0e5e9a51aed56a821563a3bf 100755 --- a/enzevalos_iphone/Badges.swift +++ b/enzevalos_iphone/Badges.swift @@ -14,7 +14,7 @@ import UIKit /** Enum Type for easier Recogition. */ -enum BadgeType : Int { +enum BadgeType: Int { case keyMaster case trustmaster case encMaster @@ -23,7 +23,7 @@ enum BadgeType : Int { case onBoarding case inviteAFriend case Ambassador - + case MailMaster case MailMaster1 case MailMaster10 @@ -38,13 +38,13 @@ enum BadgeType : Int { case SecureMailMaster50 case SecureMailMaster100 case SecureMailMaster1000 - case None // for SubBadge + case None // for SubBadge } /** Identifies Achievments, needed for DataStorage, mapping Achievments with Badges, Setting Conditions for Achievments */ -enum Achievment{ +enum Achievment { case Firstkey case OneFriendInvited case FiveFriendsInvited @@ -68,20 +68,20 @@ enum Achievment{ enum SegueName { case LinearBadge case inviteFriend - case None // for SubBadge + case None // for SubBadge } class Badges: NSObject { // MARK:- Variables - let type : BadgeType + let type: BadgeType // Picture Names - let offName : String - let onName : String - let segueName : SegueName - let displayName : String - let achievments : [Achievment]? + let offName: String + let onName: String + let segueName: SegueName + let displayName: String + let achievments: [Achievment]? // MARK:- Functions /** @@ -92,7 +92,7 @@ class Badges: NSObject { - Parameter displayName: Name Displayed in badge Case and elsewhere - Parameter achievmentsNeeded: Achievments needed to Complete this Badge, if nil Badge is always Completed */ - init(type : BadgeType = .None, pictureOff : String, pictureOn : String, segue : SegueName = .None , displayName : String, achievmentsNeeded : [Achievment]? = nil) { + init(type: BadgeType = .None, pictureOff: String, pictureOn: String, segue: SegueName = .None, displayName: String, achievmentsNeeded: [Achievment]? = nil) { self.type = type self.offName = pictureOff self.onName = pictureOn @@ -110,9 +110,9 @@ class Badges: NSObject { */ func badgeImage() -> UIImage { - var image : UIImage? - if (GamificationData.sharedInstance.badgeAchieved(badge: self)){ - image = UIImage.init(named: onName) + var image: UIImage? + if (GamificationData.sharedInstance.badgeAchieved(badge: self)) { + image = UIImage.init(named: onName) } else { image = UIImage.init(named: offName) } @@ -134,7 +134,7 @@ class Badges: NSObject { extension UIColor { class func badgeGreen() -> UIColor { - return UIColor(red: 37/255, green: 132/255, blue: 6/255, alpha: 1) + return UIColor(red: 37 / 255, green: 132 / 255, blue: 6 / 255, alpha: 1) } } diff --git a/enzevalos_iphone/CNMailAddressesExtension.swift b/enzevalos_iphone/CNMailAddressesExtension.swift index b788e1c7f53edec2ad30449fd9f8a3e2af33c12c..9075015ffe3b1e8bf36af7bdcd3dc97388b05a7d 100644 --- a/enzevalos_iphone/CNMailAddressesExtension.swift +++ b/enzevalos_iphone/CNMailAddressesExtension.swift @@ -9,51 +9,51 @@ import Foundation import Contacts -open class CNMailAddressExtension: MailAddress{ +open class CNMailAddressExtension: MailAddress { public var primaryKey: PersistentKey? - + public var publicKeys: Set<PersistentKey> - - open var mailAddress:String{ - get{ + + open var mailAddress: String { + get { return label.value as String } } open var label: CNLabeledValue<NSString> //FIXME: NSString hier richtig? - - open var prefEnc: EncState{ - get{ + + open var prefEnc: EncState { + get { return EncState.NOAUTOCRYPT } - set{ + set { } } - open var hasKey: Bool{ - get{ + open var hasKey: Bool { + get { return false } } - - - open var Key: PersistentKey?{ - get{ + + + open var Key: PersistentKey? { + get { return nil } } - - open var contact: EnzevalosContact?{ - get{ + + open var contact: EnzevalosContact? { + get { return nil } } - - init(addr: CNLabeledValue<NSString>){ //FIXME: NSString hier richtig? + + init(addr: CNLabeledValue<NSString>) { //FIXME: NSString hier richtig? self.label = addr self.publicKeys = Set<PersistentKey>() } - - convenience init(addr: NSString){ //FIXME: manuell: String -> NSString + + convenience init(addr: NSString) { //FIXME: manuell: String -> NSString self.init(addr: CNLabeledValue(label: CNLabelOther, value: addr)) } } diff --git a/enzevalos_iphone/CircleView.swift b/enzevalos_iphone/CircleView.swift index 23cb86f173f09c6ea9bcd385739de9a5d89f47f8..696718ce711c43f26c02e40b75b3a182f3e9da87 100755 --- a/enzevalos_iphone/CircleView.swift +++ b/enzevalos_iphone/CircleView.swift @@ -31,15 +31,15 @@ class CircleView: UIView { Default is .Down */ - var drawTop : Direction = .Down + var drawTop: Direction = .Down - let width : CGFloat = 3.0 // change in ArrowView too + let width: CGFloat = 3.0 // change in ArrowView too /** Changes the Color with which the Line is drawn. Default is gray */ - var pathColor : UIColor? + var pathColor: UIColor? // MARK:- Functions @@ -51,17 +51,17 @@ class CircleView: UIView { switch drawTop { case .Both: - path.move(to: CGPoint(x: self.frame.width/2, y: 0 )) - path.addLine(to: CGPoint(x: self.frame.width/2, y: self.frame.height )) + path.move(to: CGPoint(x: self.frame.width / 2, y: 0)) + path.addLine(to: CGPoint(x: self.frame.width / 2, y: self.frame.height)) break case .Down: - path.move(to: CGPoint(x: self.frame.width/2, y: self.frame.height/2 )) - path.addLine(to: CGPoint(x: self.frame.width/2, y: self.frame.height )) + path.move(to: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)) + path.addLine(to: CGPoint(x: self.frame.width / 2, y: self.frame.height)) break case .Up: - path.move(to: CGPoint(x: self.frame.width/2, y: 0 )) - path.addLine(to: CGPoint(x: self.frame.width/2, y: self.frame.height / 2 )) + path.move(to: CGPoint(x: self.frame.width / 2, y: 0)) + path.addLine(to: CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)) break case .None: break diff --git a/enzevalos_iphone/CollectionDataDelegate.swift b/enzevalos_iphone/CollectionDataDelegate.swift index c23b2db1eda8c3e244de629dc9b6297a4ad34319..62b5e603368478e7031a2020c29c170c4a6fb944 100644 --- a/enzevalos_iphone/CollectionDataDelegate.swift +++ b/enzevalos_iphone/CollectionDataDelegate.swift @@ -8,37 +8,37 @@ import UIKit -class CollectionDataDelegate : NSObject, UICollectionViewDataSource, UICollectionViewDelegate { - +class CollectionDataDelegate: NSObject, UICollectionViewDataSource, UICollectionViewDelegate { + var collectionView: UICollectionView? - - var suggestionFunc : (([String]) -> [(UIImage, String, String, UIImage?, UIColor)]) - //[bereits eingetragene emailadresse] -> [(Kontaktbild, Name, Emailadresse, emailTypeImage)] - var alreadyInserted : [String] = [] + + var suggestionFunc: (([String]) -> [(UIImage, String, String, UIImage?, UIColor)]) + //[bereits eingetragene emailadresse] -> [(Kontaktbild, Name, Emailadresse, emailTypeImage)] + var alreadyInserted: [String] = [] var suggestion: [(UIImage, String, String, UIImage?, UIColor)] = [] - var insertCallback : (String, String) -> Void = {(name : String, address : String) -> Void in return} - - + var insertCallback: (String, String) -> Void = { (name: String, address: String) -> Void in return } + + //used in suggestionFunc static let maxFrequent = 10 - - init(suggestionFunc: @escaping ([String]) -> [(UIImage, String, String, UIImage?, UIColor)], insertCallback : @escaping (String, String) -> Void){ + + init(suggestionFunc: @escaping ([String]) -> [(UIImage, String, String, UIImage?, UIColor)], insertCallback: @escaping (String, String) -> Void) { self.suggestionFunc = suggestionFunc self.insertCallback = insertCallback super.init() } - + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { suggestion = suggestionFunc(alreadyInserted) return suggestion.count } - + func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "frequent", for: indexPath) as! FrequentCell cell.autoresizingMask = UIViewAutoresizing.flexibleHeight cell.clipsToBounds = true let index = indexPath.row - cell.img.layer.cornerRadius = cell.img.frame.height/2 + cell.img.layer.cornerRadius = cell.img.frame.height / 2 cell.img.clipsToBounds = true cell.img.image = suggestion[index].0 cell.name.text = suggestion[index].1 @@ -53,14 +53,14 @@ class CollectionDataDelegate : NSObject, UICollectionViewDataSource, UICollectio } return cell } - + func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } - + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let tuple = suggestion[indexPath.row] insertCallback(tuple.1, tuple.2) } - + } diff --git a/enzevalos_iphone/Contact.swift b/enzevalos_iphone/Contact.swift index 1b7a04c165c490522e254210c70e7760927e0f61..8f64c4e84309bf63e4341075cbb29e3ab619a8b9 100644 --- a/enzevalos_iphone/Contact.swift +++ b/enzevalos_iphone/Contact.swift @@ -23,7 +23,7 @@ extension Contact { var tag = String() if name.count > 0 { let seperated = name.components(separatedBy: " ") - tag = seperated.map({if let a = $0.first { return "\(a)" }; return "" }).joined() + tag = seperated.map({ if let a = $0.first { return "\(a)" }; return "" }).joined() } text = NSAttributedString(string: tag.uppercased(), attributes: [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 32.2)]) @@ -73,7 +73,7 @@ extension Contact { } func getColor() -> UIColor { - + if let enzCon = self as? EnzevalosContact { if let color = enzCon.color { return color diff --git a/enzevalos_iphone/ContactCell.swift b/enzevalos_iphone/ContactCell.swift index 52fad7dc20042b7be84387369328c90edbe20d17..c763099b8cc76b86d8595c3e3203a4513d5912e3 100644 --- a/enzevalos_iphone/ContactCell.swift +++ b/enzevalos_iphone/ContactCell.swift @@ -9,10 +9,10 @@ import Foundation import UIKit -class ContactCell : UITableViewCell { - +class ContactCell: UITableViewCell { + @IBOutlet weak var name: UILabel! @IBOutlet weak var address: UILabel! @IBOutlet weak var img: UIImageView! - + } diff --git a/enzevalos_iphone/ContactViewController.swift b/enzevalos_iphone/ContactViewController.swift index d92f62482f23d43c482460224e4387bda4b09914..7ad5e0ae7ec6b926c282626e95f9ec606e7e0984 100644 --- a/enzevalos_iphone/ContactViewController.swift +++ b/enzevalos_iphone/ContactViewController.swift @@ -234,7 +234,7 @@ class ContactViewController: UIViewController { if let DestinationViewController = segue.destination as? QRScannerView { DestinationViewController.fingerprint = sender as? String DestinationViewController.callback = verifySuccessfull - DestinationViewController.keyId = self.keyRecord?.keyID + DestinationViewController.keyId = self.keyRecord?.keyID Logger.log(verify: self.keyRecord?.keyID ?? "noKeyID", open: true) } } diff --git a/enzevalos_iphone/CryptoObject.swift b/enzevalos_iphone/CryptoObject.swift index ce1cbc05748c0a5f2ac620a8fcd2400b24fc3e5b..931f0cd2a9bce3f6ec1ee93f7e2773f2df641a02 100644 --- a/enzevalos_iphone/CryptoObject.swift +++ b/enzevalos_iphone/CryptoObject.swift @@ -24,8 +24,8 @@ enum EncryptionState { public enum CryptoScheme { case PGP case UNKNOWN - - var description: String{ + + var description: String { switch self { case .PGP: return "PGP" @@ -33,8 +33,8 @@ public enum CryptoScheme { return "" } } - - static func find(i: Int) -> CryptoScheme{ + + static func find(i: Int) -> CryptoScheme { switch i { case 0: return CryptoScheme.PGP @@ -42,7 +42,7 @@ public enum CryptoScheme { return CryptoScheme.UNKNOWN } } - func asInt()-> Int16{ + func asInt() -> Int16 { switch self { case CryptoScheme.PGP: return 0 @@ -52,7 +52,7 @@ public enum CryptoScheme { } } -public class CryptoObject{ +public class CryptoObject { let chiphertext: Data? let plaintext: String? let decryptedData: Data? @@ -62,16 +62,16 @@ public class CryptoObject{ let encType: CryptoScheme let passcode: String? let signedAdrs: [String] - - var decryptedText: String?{ - if let data = decryptedData{ + + var decryptedText: String? { + if let data = decryptedData { return String.init(data: data, encoding: .utf8) } return nil } - - - init(chiphertext: Data?, plaintext: String?, decryptedData: Data?, sigState: SignatureState, encState: EncryptionState, signKey: String?, encType: CryptoScheme, signedAdrs: [String]){ + + + init(chiphertext: Data?, plaintext: String?, decryptedData: Data?, sigState: SignatureState, encState: EncryptionState, signKey: String?, encType: CryptoScheme, signedAdrs: [String]) { self.chiphertext = chiphertext self.plaintext = plaintext self.decryptedData = decryptedData @@ -82,8 +82,8 @@ public class CryptoObject{ self.passcode = nil self.signedAdrs = signedAdrs } - - - - + + + + } diff --git a/enzevalos_iphone/Cryptography.swift b/enzevalos_iphone/Cryptography.swift index ee9153c65d75c1e62e6e98197a1f9459accceb54..35a2f35793130175a3b1f414de5a89eaef3f34df 100644 --- a/enzevalos_iphone/Cryptography.swift +++ b/enzevalos_iphone/Cryptography.swift @@ -8,18 +8,18 @@ import Foundation -public protocol Encryption{ - +public protocol Encryption { + // Key handling func generateKey(adr: String, new: Bool) -> String func importKeys(key: String, pw: String?, isSecretKey: Bool, autocrypt: Bool) throws -> [String] - func importKeys(data: Data, pw: String?, secret: Bool) throws-> [String] - func importKeysFromFile(file: String, pw: String?) throws -> [String] - + func importKeys(data: Data, pw: String?, secret: Bool) throws -> [String] + func importKeysFromFile(file: String, pw: String?) throws -> [String] + func exportKey(id: String, isSecretkey: Bool, autocrypt: Bool, newPasscode: Bool) -> String? - + // operations on keys func encrypt(plaintext: String, ids: [String], myId: String) -> CryptoObject func decrypt(data: Data, decryptionIDs: [String], verifyIds: [String], fromAdr: String?) -> CryptoObject - + } diff --git a/enzevalos_iphone/DataHandler.swift b/enzevalos_iphone/DataHandler.swift index 82be1c3e91584434c74570207d9eabac8d138ecf..2b41183c75ab37705f173e72fd854f01990d94d1 100644 --- a/enzevalos_iphone/DataHandler.swift +++ b/enzevalos_iphone/DataHandler.swift @@ -34,11 +34,11 @@ fileprivate func > <T : Comparable>(lhs: T?, rhs: T?) -> Bool { } -fileprivate func ==(lhs: NSDate, rhs: NSDate) -> Bool { +fileprivate func == (lhs: NSDate, rhs: NSDate) -> Bool { return lhs === rhs || lhs.compare(rhs as Date) == .orderedSame } -fileprivate func <(lhs: NSDate, rhs: NSDate) -> Bool { +fileprivate func < (lhs: NSDate, rhs: NSDate) -> Bool { return lhs.compare(rhs as Date) == .orderedAscending } @@ -51,7 +51,7 @@ class DataHandler { private var managedObjectContext: NSManagedObjectContext private let MaxRecords = 50 private let MaxMailsPerRecord = 100 - + var allFolders: [Folder] { get { var folders = [Folder]() @@ -168,7 +168,7 @@ class DataHandler { save(during: "Terminating") } - func save(during:String) { + func save(during: String) { do { try managedObjectContext.save() } catch { @@ -232,22 +232,22 @@ class DataHandler { let name = UserManager.loadUserValue(Attribute.accountname) as? String ?? adr _ = getContact(name: name, address: adr, key: keyID, prefer_enc: true) if addPk { - newPublicKey(keyID: keyID, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false) + _ = newPublicKey(keyID: keyID, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false) } } save(during: "new sk") return sk } - - func newSecretKeys(keyIds:[String], addPKs: Bool)-> [SecretKey]{ + + func newSecretKeys(keyIds: [String], addPKs: Bool) -> [SecretKey] { var sks = [SecretKey]() - for id in keyIds{ + for id in keyIds { sks.append(newSecretKey(keyID: id, addPk: addPKs)) } return sks } - func createNewSecretKey(adr: String) -> SecretKey{ + func createNewSecretKey(adr: String) -> SecretKey { let keys = findSecretKeys() if keys.count > 0 { return findSecretKeys().first! @@ -262,34 +262,34 @@ class DataHandler { func newPublicKey(keyID: String, cryptoType: CryptoScheme, adr: String, autocrypt: Bool, firstMail: PersistentMail? = nil, newGenerated: Bool = false) -> PersistentKey { var date = Date.init() - if let mail = firstMail{ - if date.compare(mail.date).rawValue > 0{ + if let mail = firstMail { + if date.compare(mail.date).rawValue > 0 { date = mail.date } } let adr = getMailAddress(adr, temporary: false) as! Mail_Address var pk: PersistentKey if let search = findKey(keyID: keyID) { - if search.lastSeen < date{ + if search.lastSeen < date { search.lastSeen = date } if autocrypt { - if search.lastSeenAutocrypt < date{ + if search.lastSeenAutocrypt < date { search.lastSeenAutocrypt = date } search.sentOwnPublicKey = true } search.addToMailaddress(adr) pk = search - if Logger.logging { - var importChannel = "autocrypt" - if newGenerated { - importChannel = "generated" - } else if !autocrypt { - importChannel = "attachment" - } - Logger.log(discover: pk.keyID, mailAddress: adr, importChannel: importChannel, knownPrivateKey: DataHandler.handler.findSecretKeys().map{($0.keyID ?? "") == keyID}.reduce(false, {$0 || $1}), knownBefore: true) + if Logger.logging { + var importChannel = "autocrypt" + if newGenerated { + importChannel = "generated" + } else if !autocrypt { + importChannel = "attachment" } + Logger.log(discover: pk.keyID, mailAddress: adr, importChannel: importChannel, knownPrivateKey: DataHandler.handler.findSecretKeys().map { ($0.keyID ?? "") == keyID }.reduce(false, { $0 || $1 }), knownBefore: true) + } } else { pk = NSEntityDescription.insertNewObject(forEntityName: "PersistentKey", into: managedObjectContext) as! PersistentKey pk.addToMailaddress(adr) @@ -299,7 +299,7 @@ class DataHandler { pk.discoveryDate = date pk.firstMail = firstMail if autocrypt { - pk.lastSeenAutocrypt = date + pk.lastSeenAutocrypt = date pk.sentOwnPublicKey = true } var found = false @@ -312,44 +312,44 @@ class DataHandler { } } save(during: "new pk") - if Logger.logging { - var importChannel = "autocrypt" - if newGenerated { - importChannel = "generated" - } else if !autocrypt { - importChannel = "attachment" - } - Logger.log(discover: pk.keyID, mailAddress: adr, importChannel: importChannel, knownPrivateKey: DataHandler.handler.findSecretKeys().map{($0.keyID ?? "") == keyID}.reduce(false, {$0 || $1}), knownBefore: false) + if Logger.logging { + var importChannel = "autocrypt" + if newGenerated { + importChannel = "generated" + } else if !autocrypt { + importChannel = "attachment" } + Logger.log(discover: pk.keyID, mailAddress: adr, importChannel: importChannel, knownPrivateKey: DataHandler.handler.findSecretKeys().map { ($0.keyID ?? "") == keyID }.reduce(false, { $0 || $1 }), knownBefore: false) + } } - if let prim = adr.primaryKey, let last = prim.lastSeen, let currentLast = pk.lastSeen{ + if let prim = adr.primaryKey, let last = prim.lastSeen, let currentLast = pk.lastSeen { if last < currentLast { adr.primaryKeyID = pk.keyID } } - else{ + else { adr.primaryKeyID = keyID } save(during: "new PK") return pk } - - func prefSecretKey()->SecretKey{ - if let prefId = UserManager.loadUserValue(Attribute.prefSecretKeyID){ - if let id = prefId as? String{ - if let key = findSecretKey(keyID: id){ + + func prefSecretKey() -> SecretKey { + if let prefId = UserManager.loadUserValue(Attribute.prefSecretKeyID) { + if let id = prefId as? String { + if let key = findSecretKey(keyID: id) { return key } } } var allSKs = findSecretKeys() - allSKs = allSKs.sorted(by: {($0.importedDate)!<($1.importedDate)!}) - if allSKs.count > 0{ + allSKs = allSKs.sorted(by: { ($0.importedDate)! < ($1.importedDate)! }) + if allSKs.count > 0 { UserManager.storeUserValue(allSKs[0].keyID as AnyObject, attribute: Attribute.prefSecretKeyID) return allSKs[0] } - if let adr = UserManager.loadUserValue(Attribute.userAddr){ - if let adrString = adr as? String{ + if let adr = UserManager.loadUserValue(Attribute.userAddr) { + if let adrString = adr as? String { return createNewSecretKey(adr: adrString) } } @@ -447,33 +447,33 @@ class DataHandler { } return false } - - func getKeyRecord(addr: String, keyID: String?) -> KeyRecord{ - if let id = keyID{ - if let key = findKey(keyID: id){ - if let record = key.record{ + + func getKeyRecord(addr: String, keyID: String?) -> KeyRecord { + if let id = keyID { + if let key = findKey(keyID: id) { + if let record = key.record { return record } // Create KeyRecord let record = NSEntityDescription.insertNewObject(forEntityName: "KeyRecord", into: managedObjectContext) as! KeyRecord record.key = key - if let contact = getContact(keyID: id){ + if let contact = getContact(keyID: id) { record.contact = contact } - else{ + else { record.contact = getContactByAddress(addr) } save(during: "create keyRecord with key") return record } } - - if let address = findMailAddress(adr: addr){ - if let contact = address.contact{ - for record in contact.records{ - if !record.hasKey{ - for a in record.addresses{ - if a.mailAddress == addr{ + + if let address = findMailAddress(adr: addr) { + if let contact = address.contact { + for record in contact.records { + if !record.hasKey { + for a in record.addresses { + if a.mailAddress == addr { return record } } @@ -552,7 +552,7 @@ class DataHandler { if let contacts = findAll("EnzevalosContact") { for c in contacts { if case let contact as EnzevalosContact = c { - for adr in contact.addresses{ + for adr in contact.addresses { if case let mailAdr as Mail_Address = adr { if mailAdr.address == address { return contact @@ -579,18 +579,18 @@ class DataHandler { let adr = getMailAddress(lowerAdr, temporary: false) as! Mail_Address adr.contact = contact let cncontacts = AddressHandler.findContact(contact) - if cncontacts.count > 0{ + if cncontacts.count > 0 { contact.cnidentifier = cncontacts.first?.identifier } return contact } - - func getContact(keyID: String)-> EnzevalosContact?{ - if let key = findKey(keyID: keyID){ - if let adrs = key.mailaddress{ - for item in adrs{ + + func getContact(keyID: String) -> EnzevalosContact? { + if let key = findKey(keyID: keyID) { + if let adrs = key.mailaddress { + for item in adrs { let adr = item as! Mail_Address - if adr.contact != nil{ + if adr.contact != nil { return adr.contact } } @@ -602,7 +602,7 @@ class DataHandler { func getContact(name: String, address: String, key: String, prefer_enc: Bool) -> EnzevalosContact { let contact = getContactByAddress(address) contact.displayname = name - if let mykey = findKey(keyID: key){ + if let mykey = findKey(keyID: key) { contact.getAddress(address)?.addToKeys(mykey) } return contact @@ -627,7 +627,7 @@ class DataHandler { } if let contact = adr.contact { if !(contact.addresses.contains(adr)) { - contact.addToAddresses(adr) + contact.addToAddresses(adr) } } fromMail.from = adr @@ -640,10 +640,10 @@ class DataHandler { private func handleCCAddresses(_ cc: [MCOAddress], mail: PersistentMail) { mail.addToCc(NSSet(array: getMailAddressesByMCOAddresses(cc))) } - - private func findMail(msgID: String) -> PersistentMail?{ - if let result = find("PersistentMail", type: "messageID", search: msgID) as?[PersistentMail]{ - if result.count > 0{ + + private func findMail(msgID: String) -> PersistentMail? { + if let result = find("PersistentMail", type: "messageID", search: msgID) as?[PersistentMail] { + if result.count > 0 { return result[0] } } @@ -654,7 +654,7 @@ class DataHandler { func createMail(_ uid: UInt64, sender: MCOAddress?, receivers: [MCOAddress], cc: [MCOAddress], time: Date, received: Bool, subject: String, body: String?, flags: MCOMessageFlag, record: KeyRecord?, autocrypt: AutocryptContact?, decryptedData: CryptoObject?, folderPath: String, secretKey: String?, references: [String] = [], mailagent: String? = nil, messageID: String? = nil) -> PersistentMail? { let myfolder = findFolder(with: folderPath) as Folder let finding = findNum("PersistentMail", type: "uid", search: uid) - + let mail: PersistentMail var mails: [PersistentMail] = [] @@ -662,21 +662,21 @@ class DataHandler { mails = tmpMails } - if finding == nil || finding!.count == 0 || mails.filter( {$0.folder.path == folderPath && $0.uidvalidity == myfolder.uidvalidity}).count == 0 { + if finding == nil || finding!.count == 0 || mails.filter({ $0.folder.path == folderPath && $0.uidvalidity == myfolder.uidvalidity }).count == 0 { // create new mail object mail = NSEntityDescription.insertNewObject(forEntityName: "PersistentMail", into: managedObjectContext) as! PersistentMail - + mail.date = time mail.subject = subject mail.body = body - mail.secretKey = secretKey + mail.secretKey = secretKey mail.folder = myfolder mail.uidvalidity = myfolder.uidvalidity mail.uid = uid mail.messageID = messageID mail.xMailer = mailagent - + mail.flag = flags // Default values mail.isSigned = false @@ -684,17 +684,17 @@ class DataHandler { mail.trouble = false mail.unableToDecrypt = false mail.received = received - + var notStored = "" - for reference in references{ - if let ref = findMail(msgID: reference){ - // mail.addToReferenceMails(ref) + for reference in references { + if let ref = findMail(msgID: reference) { + // mail.addToReferenceMails(ref) } - else{ - notStored = notStored + " ; "+(reference) + else { + notStored = notStored + " ; " + (reference) } } - if notStored != ""{ + if notStored != "" { //mail.notLoadedMessages = notStored } @@ -744,20 +744,20 @@ class DataHandler { case SignatureState.ValidSignature: mail.isCorrectlySigned = true mail.isSigned = true - if let signedKey = findKey(keyID: decData.signKey!){ + if let signedKey = findKey(keyID: decData.signKey!) { mail.signedKey = signedKey mail.keyID = signedKey.keyID } - else{ + else { mail.signedKey = newPublicKey(keyID: decData.signKey!, cryptoType: decData.encType, adr: decData.signedAdrs.first!, autocrypt: false, firstMail: mail, newGenerated: false) } - + } } - else { - // Maybe PGPInline? - // TODO: Refactoring! - //mail.decryptIfPossible() + else { + // Maybe PGPInline? + // TODO: Refactoring! + //mail.decryptIfPossible() } } else { @@ -768,7 +768,7 @@ class DataHandler { myfolder.maxID = mail.uid } var record = getKeyRecord(addr: mail.from.mailAddress, keyID: nil) - if let signedID = mail.signedKey?.keyID{ + if let signedID = mail.signedKey?.keyID { record = getKeyRecord(addr: mail.from.mailAddress, keyID: signedID) } record.addToPersistentMails(mail) diff --git a/enzevalos_iphone/DebugSettings.swift b/enzevalos_iphone/DebugSettings.swift index 10cdfc65d2c2bb4c43014cf56b44e9088eab3995..04826da11c14fe104eb864eddcafb8a0c4e270e8 100644 --- a/enzevalos_iphone/DebugSettings.swift +++ b/enzevalos_iphone/DebugSettings.swift @@ -15,112 +15,112 @@ private let datahandler = DataHandler.handler let SUPPORT_MAIL_ADR = "letterbox@inf.fu-berlin.de" let LOGGING_MAIL_ADR = "letterbox-reports@inf.fu-berlin.de" -func setupStudyPublicKeys(){ +func setupStudyPublicKeys() { let logging_pk = "logging_pk" let support_pk = "support_pk" - let keys = ["noreply@bitcoin.de": "bitcoinde", "letterbox@zedat.fu-berlin.de": support_pk,"letterbox-hilfe@inf.fu-berlin.de": support_pk, "enzevalos@inf.fu-berlin.de": support_pk, SUPPORT_MAIL_ADR: support_pk, LOGGING_MAIL_ADR: logging_pk] + let keys = ["noreply@bitcoin.de": "bitcoinde", "letterbox@zedat.fu-berlin.de": support_pk, "letterbox-hilfe@inf.fu-berlin.de": support_pk, "enzevalos@inf.fu-berlin.de": support_pk, SUPPORT_MAIL_ADR: support_pk, LOGGING_MAIL_ADR: logging_pk] importPublicKeyDic(keys: keys, type: "asc") datahandler.save(during: "init study keys") } -func loadTestAcc(){ +func loadTestAcc() { //loadAliceEnzevalos() - //loadBobEnzevalos() + //loadBobEnzevalos() //loadAlice2005() //loadCharlieEnzevalos() //importPublicKeys() //loadBob2005() - + } -func loadUlli(){ - let user = web(name: "ullimuelle", pw: "") +func loadUlli() { + let user = web(name: "ullimuelle", pw: "") userdefaults(defaults: user) importSecretKey(file: "ullimuelle-private", type: "gpg") - + } -func loadBob2005(){ +func loadBob2005() { let user = web(name: "bob2005", pw: "") userdefaults(defaults: user) importSecretKey(file: "bob2005-private", type: "gpg") } -func loadAlice2005(){ +func loadAlice2005() { let user = web(name: "alice2005", pw: "") userdefaults(defaults: user) importSecretKey(file: "alice2005-private", type: "gpg") - + } -func loadBobEnzevalos(){ +func loadBobEnzevalos() { let user = enzevalos(name: "bob", pw: "") userdefaults(defaults: user) importSecretKey(file: "bob_enzvalos_private", type: "asc") } -func loadCharlieEnzevalos(){ +func loadCharlieEnzevalos() { let user = enzevalos(name: "charlie", pw: "") userdefaults(defaults: user) } -func loadAliceEnzevalos(){ +func loadAliceEnzevalos() { let user = enzevalos(name: "alice", pw: "") userdefaults(defaults: user) } -private func userdefaults(defaults: [Attribute: AnyObject?]){ - for (att, value) in defaults{ +private func userdefaults(defaults: [Attribute: AnyObject?]) { + for (att, value) in defaults { UserManager.storeUserValue(value, attribute: att) } } -private func web(name: String, pw: String) -> [Attribute: AnyObject?]{ - return [.accountname : name as AnyObject?, .userName : name as Optional<AnyObject>, .userAddr : name+"@web.de" as Optional<AnyObject>, .userPW : pw as Optional<AnyObject>, .smtpHostname : "smtp.web.de" as Optional<AnyObject>, .smtpPort : 587 as Optional<AnyObject>, .smtpConnectionType:MCOConnectionType.startTLS.rawValue as AnyObject?, .smtpAuthType:MCOAuthType.saslPlain.rawValue as AnyObject?, .imapHostname : "imap.web.de" as Optional<AnyObject>, .imapPort : 993 as AnyObject?, .imapConnectionType: MCOConnectionType.TLS.rawValue as AnyObject?,.imapAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?] +private func web(name: String, pw: String) -> [Attribute: AnyObject?] { + return [.accountname: name as AnyObject?, .userName: name as Optional<AnyObject>, .userAddr: name + "@web.de" as Optional<AnyObject>, .userPW: pw as Optional<AnyObject>, .smtpHostname: "smtp.web.de" as Optional<AnyObject>, .smtpPort: 587 as Optional<AnyObject>, .smtpConnectionType: MCOConnectionType.startTLS.rawValue as AnyObject?, .smtpAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?, .imapHostname: "imap.web.de" as Optional<AnyObject>, .imapPort: 993 as AnyObject?, .imapConnectionType: MCOConnectionType.TLS.rawValue as AnyObject?, .imapAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?] } -private func enzevalos(name: String, pw: String)-> [Attribute: AnyObject?]{ - return [.accountname : name as AnyObject?, .userName : name as Optional<AnyObject>, .userAddr : name+"@enzevalos.de" as Optional<AnyObject>, .userPW : pw as Optional<AnyObject>, .smtpHostname : "mail.enzevalos.de" as Optional<AnyObject>, .smtpPort : 465 as Optional<AnyObject>, .smtpConnectionType: MCOConnectionType.TLS.rawValue as AnyObject? ,.smtpAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?,.imapHostname : "mail.enzevalos.de" as Optional<AnyObject>, .imapPort : 993 as AnyObject?, .imapConnectionType:MCOConnectionType.TLS.rawValue as AnyObject?, .imapAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?] +private func enzevalos(name: String, pw: String) -> [Attribute: AnyObject?] { + return [.accountname: name as AnyObject?, .userName: name as Optional<AnyObject>, .userAddr: name + "@enzevalos.de" as Optional<AnyObject>, .userPW: pw as Optional<AnyObject>, .smtpHostname: "mail.enzevalos.de" as Optional<AnyObject>, .smtpPort: 465 as Optional<AnyObject>, .smtpConnectionType: MCOConnectionType.TLS.rawValue as AnyObject?, .smtpAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?, .imapHostname: "mail.enzevalos.de" as Optional<AnyObject>, .imapPort: 993 as AnyObject?, .imapConnectionType: MCOConnectionType.TLS.rawValue as AnyObject?, .imapAuthType: MCOAuthType.saslPlain.rawValue as AnyObject?] } -func importPublicKeys(){ - let asc = ["jakob.bode@fu-berlin.de":"JakobBode", "alice@enzevalos.de":"alice_enzevalos_public", "bob@enzevalos.de":"bob_enzevalos_public", "dave@enzevalos.de":"dave_enzevalos_public"] - let gpg = ["bob2005@web.de":"bob-public", "ullimuelle@web.de":"ullimuelle-public", "alice2005@web.de":"alice2005-public"] +func importPublicKeys() { + let asc = ["jakob.bode@fu-berlin.de": "JakobBode", "alice@enzevalos.de": "alice_enzevalos_public", "bob@enzevalos.de": "bob_enzevalos_public", "dave@enzevalos.de": "dave_enzevalos_public"] + let gpg = ["bob2005@web.de": "bob-public", "ullimuelle@web.de": "ullimuelle-public", "alice2005@web.de": "alice2005-public"] importPublicKeyDic(keys: asc, type: "asc") importPublicKeyDic(keys: gpg, type: "gpg") - + } -func importSecretKey(file: String, type: String){ - if let path = Bundle.main.path(forResource: file, ofType: type){ +func importSecretKey(file: String, type: String) { + if let path = Bundle.main.path(forResource: file, ofType: type) { let ids = try! pgp.importKeysFromFile(file: path, pw: nil) - for id in ids{ + for id in ids { _ = datahandler.newSecretKey(keyID: id, addPk: true) } } } -private func importPublicKeyDic(keys: [String:String], type: String){ - for (adr, file) in keys{ +private func importPublicKeyDic(keys: [String: String], type: String) { + for (adr, file) in keys { importPublicKey(file: file, type: type, adr: adr) } } -private func importPublicKey(file: String, type: String, adr: String){ - if let path = Bundle.main.path(forResource: file, ofType: type){ - do{ +private func importPublicKey(file: String, type: String, adr: String) { + if let path = Bundle.main.path(forResource: file, ofType: type) { + do { let ids = try pgp.importKeysFromFile(file: path, pw: nil) - for id in ids{ + for id in ids { _ = datahandler.newPublicKey(keyID: id, cryptoType: CryptoScheme.PGP, adr: adr, autocrypt: false) } } catch _ { - + } } } diff --git a/enzevalos_iphone/EnzevalosContact+CoreDataProperties.swift b/enzevalos_iphone/EnzevalosContact+CoreDataProperties.swift index c5f4d942a4543685e73eac57d31b8736a02eeb74..01ed76e6267e2cae8c096230be919ab0243de670 100644 --- a/enzevalos_iphone/EnzevalosContact+CoreDataProperties.swift +++ b/enzevalos_iphone/EnzevalosContact+CoreDataProperties.swift @@ -27,36 +27,36 @@ extension EnzevalosContact { // MARK: Generated accessors for addresses extension EnzevalosContact { - + @objc(addAddressesObject:) @NSManaged public func addToAddresses(_ value: Mail_Address) - + @objc(removeAddressesObject:) @NSManaged public func removeFromAddresses(_ value: Mail_Address) - + @objc(addAddresses:) @NSManaged public func addToAddresses(_ values: NSSet) - + @objc(removeAddresses:) @NSManaged public func removeFromAddresses(_ values: NSSet) - + } // MARK: Generated accessors for mailaddress extension EnzevalosContact { - + @objc(addKeyrecordsObject:) @NSManaged public func addToKeyrecords(_ value: KeyRecord) - + @objc(removeKeyrecordsObject:) @NSManaged public func removeFromKeyrecords(_ value: KeyRecord) - + @objc(addKeyrecords:) @NSManaged public func addToKeyrecords(_ values: NSSet) - + @objc(removeKeyrecords:) @NSManaged public func removeFromKeyrecords(_ values: NSSet) - + } diff --git a/enzevalos_iphone/EphemeralMail.swift b/enzevalos_iphone/EphemeralMail.swift index a70af7a1726c14968bc4fb0717a29b2470cdc7ff..081bf7813c6562f6a9bc4fcefdd3861ff8ec6d52 100644 --- a/enzevalos_iphone/EphemeralMail.swift +++ b/enzevalos_iphone/EphemeralMail.swift @@ -9,7 +9,7 @@ import Foundation open class EphemeralMail: Mail { - + public var cc: NSSet? public var bcc: NSSet? public var to: NSSet diff --git a/enzevalos_iphone/ExportCells.swift b/enzevalos_iphone/ExportCells.swift index f7e12c3a9936001b56fb70d6179f466720711194..a616ebd82a13a6f6e3e3ea2b29e90319e328ba12 100644 --- a/enzevalos_iphone/ExportCells.swift +++ b/enzevalos_iphone/ExportCells.swift @@ -29,7 +29,7 @@ class ExportSecretCell: UITableViewCell { @IBOutlet weak var secretRow1: UILabel! @IBOutlet weak var secretRow2: UILabel! @IBOutlet weak var secretRow3: UILabel! - + func setSecretToLabels(secret: String) { if secret.count == 44 { let cut1 = secret.index(secret.startIndex, offsetBy: 15) @@ -39,5 +39,5 @@ class ExportSecretCell: UITableViewCell { secretRow3.text = String(secret[cut2...]) } } - + } diff --git a/enzevalos_iphone/ExportInfoViewController.swift b/enzevalos_iphone/ExportInfoViewController.swift index daad6a64db8c2482c7de4ac8ef7fd85b16a29738..f2299fa907ce53adc1902d0c2c6628e056630caf 100644 --- a/enzevalos_iphone/ExportInfoViewController.swift +++ b/enzevalos_iphone/ExportInfoViewController.swift @@ -10,11 +10,11 @@ import UIKit class ExportInfoViewController: UITableViewController { let url = "userpage.fu-berlin.de/letterbox/faq.html#otherDevices" - + @IBAction func websiteButtonTouch(_ sender: Any) { - UIApplication.shared.openURL(URL(string: "https://"+url)!) + UIApplication.shared.openURL(URL(string: "https://" + url)!) } - + override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITableViewAutomaticDimension @@ -22,36 +22,36 @@ class ExportInfoViewController: UITableViewController { navigationItem.setRightBarButton(navigationItem.rightBarButtonItem, animated: false) navigationItem.rightBarButtonItem?.title = NSLocalizedString("Next", comment: "next step") } - + override func viewWillAppear(_ animated: Bool) { // Logger.queue.async(flags: .barrier) { - Logger.log(exportKeyViewOpen: 1) + Logger.log(exportKeyViewOpen: 1) // } super.viewWillAppear(animated) } - + override func viewWillDisappear(_ animated: Bool) { // Logger.queue.async(flags: .barrier) { - Logger.log(exportKeyViewClose: 1) + Logger.log(exportKeyViewClose: 1) // } super.viewWillDisappear(animated) } - + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "ExportInfoCell") as! ExportInfoCell cell.infoTextLabel.text = NSLocalizedString("ExportInfoViewText", comment: "") - let qrCodeImage = QRCode.generate(input: "https://"+url) - + let qrCodeImage = QRCode.generate(input: "https://" + url) + let scaleX = cell.qrCode.frame.size.width / qrCodeImage.extent.size.width let scaleY = cell.qrCode.frame.size.height / qrCodeImage.extent.size.height cell.qrCode.image = UIImage.init(ciImage: qrCodeImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY))) return cell } - + override func numberOfSections(in tableView: UITableView) -> Int { return 1 } - + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } diff --git a/enzevalos_iphone/ExportViewController.swift b/enzevalos_iphone/ExportViewController.swift index fdd880242ce050276b013d4f10ff8c139c056d3b..9b5e3d0141bd703d4c6dbf6f635d52f5ae3ac627 100644 --- a/enzevalos_iphone/ExportViewController.swift +++ b/enzevalos_iphone/ExportViewController.swift @@ -12,23 +12,23 @@ class ExportViewController: UITableViewController { var alreadySent = false var sentToAddress = (UserManager.loadUserValue(Attribute.userAddr) as! String) var passcode = "" - + override func viewWillDisappear(_ animated: Bool) { // Logger.queue.async(flags: .barrier) { - Logger.log(exportKeyViewClose: 2) + Logger.log(exportKeyViewClose: 2) // } super.viewWillDisappear(animated) } - + @IBAction func buttonTouched(_ sender: Any) { // Logger.queue.async(flags: .barrier) { - Logger.log(exportKeyViewButton: !alreadySent) + Logger.log(exportKeyViewButton: !alreadySent) // } - + let handler = DataHandler.handler let ids = handler.findSecretKeys() - if ids.count > 0{ + if ids.count > 0 { let id = ids[0] let pgp = SwiftPGP() if let keyId = id.keyID { @@ -39,7 +39,7 @@ class ExportViewController: UITableViewController { mailHandler.sendSecretKey(key: message, passcode: passcode, callback: mailSend) } } else { - if let message = pgp.exportKey(id: keyId, isSecretkey: true, autocrypt: true, newPasscode: false){ + if let message = pgp.exportKey(id: keyId, isSecretkey: true, autocrypt: true, newPasscode: false) { passcode = pgp.loadExportPasscode(id: keyId)! let mailHandler = AppDelegate.getAppDelegate().mailHandler mailHandler.sendSecretKey(key: message, passcode: passcode, callback: mailSend) @@ -53,19 +53,19 @@ class ExportViewController: UITableViewController { } tableView.reloadData() } - + @IBAction func doneButtonPressed(_ sender: Any) { let viewControllers: [UIViewController] = self.navigationController!.viewControllers as [UIViewController] self.navigationController!.popToViewController(viewControllers[viewControllers.count - 3], animated: true) } - + override func numberOfSections(in tableView: UITableView) -> Int { if alreadySent { return 2 } return 1 } - + override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if section == 0 { return 2 @@ -74,7 +74,7 @@ class ExportViewController: UITableViewController { } return 0 } - + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { if indexPath.section == 0 { if indexPath.row == 0 { @@ -102,14 +102,14 @@ class ExportViewController: UITableViewController { } return cell } - + } let cell = tableView.dequeueReusableCell(withIdentifier: "ExportSecretCell") as! ExportSecretCell cell.infoTextLabel.text = NSLocalizedString("codeExplanation", comment: "") cell.setSecretToLabels(secret: passcode) return cell } - + override func viewDidLoad() { super.viewDidLoad() tableView.rowHeight = UITableViewAutomaticDimension @@ -127,12 +127,12 @@ class ExportViewController: UITableViewController { } } - + // Logger.queue.async(flags: .barrier) { Logger.log(exportKeyViewOpen: 2) // } } - + func mailSend(_ error: Error?) { if (error != nil) { NSLog("Error sending email: \(String(describing: error))") diff --git a/enzevalos_iphone/FlipTransition.swift b/enzevalos_iphone/FlipTransition.swift index d1642577ace9a854ee80de3a2af6b1160d9362c7..3d6a6e2fc593743a3b3dd758831f63c04b18e32e 100644 --- a/enzevalos_iphone/FlipTransition.swift +++ b/enzevalos_iphone/FlipTransition.swift @@ -31,12 +31,12 @@ class FlipTransition: NSObject, UIViewControllerAnimatedTransitioning { toVC.view.layer.transform = CATransform3DMakeRotation(.pi / 2, 0, 1, 0) UIView.animate(withDuration: transitionDuration(using: transitionContext), delay: 0, options: .curveEaseOut, animations: { () -> Void in - fromVC!.view.layer.transform = CATransform3DMakeRotation(.pi / -2, 0, 1, 0) - }) { (finished: Bool) -> Void in + fromVC!.view.layer.transform = CATransform3DMakeRotation(.pi / -2, 0, 1, 0) + }) { (finished: Bool) -> Void in container.bringSubview(toFront: toVC.view) UIView.animate(withDuration: self.transitionDuration(using: transitionContext), delay: 0, options: .curveEaseOut, animations: { () -> Void in - toVC.view.layer.transform = CATransform3DIdentity - }) { (finished: Bool) -> Void in + toVC.view.layer.transform = CATransform3DIdentity + }) { (finished: Bool) -> Void in fromVC!.view.layer.transform = CATransform3DIdentity transitionContext.completeTransition(!transitionContext.transitionWasCancelled) diff --git a/enzevalos_iphone/Folder+CoreDataClass.swift b/enzevalos_iphone/Folder+CoreDataClass.swift index 4d8e496a0daa0c8ae6aed6be0404dd006e9cf634..2762bcf51c86f82cc6dcd7a58d704609ce147091 100644 --- a/enzevalos_iphone/Folder+CoreDataClass.swift +++ b/enzevalos_iphone/Folder+CoreDataClass.swift @@ -1,6 +1,6 @@ // // Folder+CoreDataClass.swift -// +// // // Created by Oliver Wiese on 05.07.17. // @@ -12,81 +12,81 @@ import CoreData @objc(Folder) public class Folder: NSManagedObject { - var name: String{ - get{ + var name: String { + get { if let n = path.components(separatedBy: delimiter).last { return n } return path } } - - var counterMails: Int{ - get{ - if let mails = self.mails{ + + var counterMails: Int { + get { + if let mails = self.mails { return mails.count } return 0 } } - + var frontendName: String { get { return UserManager.convertToFrontendFolderPath(from: name) } } - - var uids: MCOIndexSet{ - - get{ + + var uids: MCOIndexSet { + + get { let ids = MCOIndexSet() - for m in mailsOfFolder{ + for m in mailsOfFolder { ids.add(m.uid) } return ids } } - - - var records: [KeyRecord]{ - get{ - if let keyRecords = keyRecords as? Set<KeyRecord>{ + + + var records: [KeyRecord] { + get { + if let keyRecords = keyRecords as? Set<KeyRecord> { return Array(keyRecords).sorted() } return [] } - + } - - - var mailsOfFolder: [PersistentMail]{ - get{ + + + var mailsOfFolder: [PersistentMail] { + get { var ms = [PersistentMail]() - if let mymails = mails{ - if let m = mymails as? Set<PersistentMail>{ + if let mymails = mails { + if let m = mymails as? Set<PersistentMail> { return Array(m) } - for case let m as PersistentMail in mymails{ + for case let m as PersistentMail in mymails { ms.append(m) } } return ms } } - + var subfolders: [Folder] { get { var folders: [Folder] = [] for f in DataHandler.handler.allFolders { - if f.path.hasPrefix(path+delimiter) && f.path != path { + if f.path.hasPrefix(path + delimiter) && f.path != path { folders.append(f) } } return folders } } - + /* func updateRecords(mail: PersistentMail){ if let reccords = storedRecords{ diff --git a/enzevalos_iphone/Folder+CoreDataProperties.swift b/enzevalos_iphone/Folder+CoreDataProperties.swift index 8f90ca6261805abcd66631dedce23bac8b2d5e43..daa80f283bdcc506c9d2d4ee94099dc0cbd810c8 100644 --- a/enzevalos_iphone/Folder+CoreDataProperties.swift +++ b/enzevalos_iphone/Folder+CoreDataProperties.swift @@ -1,6 +1,6 @@ // // Folder+CoreDataProperties.swift -// +// // // Created by Oliver Wiese on 05.07.17. // @@ -25,9 +25,9 @@ extension Folder { @NSManaged public var pseudonym: String @NSManaged public var icon: String - public var uidvalidity:UInt32?{ + public var uidvalidity: UInt32? { set { - if let num = newValue{ + if let num = newValue { self.willChangeValue(forKey: "uidvalidity") self.setPrimitiveValue(NSDecimalNumber.init(value: num as UInt32), forKey: "uidvalidity") self.didChangeValue(forKey: "uidvalidity") @@ -37,23 +37,23 @@ extension Folder { self.willAccessValue(forKey: "uidvalidity") let text = (self.primitiveValue(forKey: "uidvalidity") as? NSDecimalNumber)?.uint32Value self.didAccessValue(forKey: "uidvalidity") - if let num = text{ + if let num = text { return num } return nil } } - + @NSManaged public var delimiter: String - public var flags: MCOIMAPFolderFlag{ + public var flags: MCOIMAPFolderFlag { get { self.willAccessValue(forKey: "flags") let ms = self.primitiveValue(forKey: "flags") - + self.didAccessValue(forKey: "flags") - if let num = ms{ - if case let i as Int = num{ + if let num = ms { + if case let i as Int = num { return MCOIMAPFolderFlag.init(rawValue: i) } } @@ -65,9 +65,9 @@ extension Folder { self.didChangeValue(forKey: "flags") } } - - public var maxID: UInt64{ - + + public var maxID: UInt64 { + set { self.willChangeValue(forKey: "maxID") self.setPrimitiveValue(NSDecimalNumber.init(value: newValue as UInt64), forKey: "maxID") @@ -77,7 +77,7 @@ extension Folder { self.willAccessValue(forKey: "maxID") let text = (self.primitiveValue(forKey: "maxID") as? NSDecimalNumber)?.uint64Value self.didAccessValue(forKey: "maxID") - if text == nil{ + if text == nil { return 1 } return text! @@ -93,16 +93,16 @@ extension Folder { @objc(removeMailsObject:) @NSManaged public func removeFromMails(_ value: PersistentMail) - + @objc(addSubfolderObject:) @NSManaged public func addToSubfolder(_ value: Folder) - + @objc(removeSubfolderObject:) @NSManaged public func removeFromSubfolder(_ value: Folder) - + @objc(addKeyRecordsObject:) @NSManaged public func addToKeyRecords(_ value: KeyRecord) - + @objc(removeKeyRecordsObject:) @NSManaged public func removeFromKeyRecords(_ value: KeyRecord) @@ -111,27 +111,27 @@ extension Folder { @objc(removeMails:) @NSManaged public func removeFromMails(_ values: NSSet) - + @objc(addSubfolder:) @NSManaged public func addToSubfolder(_ values: NSSet) - + @objc(removeSubfolder:) @NSManaged public func removeFromSubfolder(_ values: NSSet) - + @objc(addKeyRecords:) @NSManaged public func addToKeyRecords(_ values: NSSet) - + @objc(removeKeyRecords:) @NSManaged public func removeFromKeyRecords(_ values: NSSet) } extension Folder: Comparable { - public static func <(lhs: Folder, rhs: Folder) -> Bool { + public static func < (lhs: Folder, rhs: Folder) -> Bool { return lhs.name < rhs.name } - - public static func ==(lhs: Folder, rhs: Folder) -> Bool { + + public static func == (lhs: Folder, rhs: Folder) -> Bool { return lhs.name == rhs.name && lhs.path == rhs.path } } diff --git a/enzevalos_iphone/FolderListCell.swift b/enzevalos_iphone/FolderListCell.swift index 1dd94d8c9db372e6437e690a046ba5bf39eb0f6b..d54f32cddcf47715ad8ebdfcb6f4ee799a722f4a 100644 --- a/enzevalos_iphone/FolderListCell.swift +++ b/enzevalos_iphone/FolderListCell.swift @@ -17,5 +17,5 @@ class FolderListCell: UITableViewCell { @IBOutlet weak var markImageView: UIImageView! @IBOutlet weak var replyImageView: UIImageView! @IBOutlet weak var stackView: UIStackView! - + } diff --git a/enzevalos_iphone/FolderViewController.swift b/enzevalos_iphone/FolderViewController.swift index 747352a332da31b6d0f70106c03bf9e35c361f8a..baee58107f5d46ffc70e02121c5f2f8ff156ebb6 100644 --- a/enzevalos_iphone/FolderViewController.swift +++ b/enzevalos_iphone/FolderViewController.swift @@ -23,10 +23,10 @@ class FolderViewController: UITableViewController { lastUpdateLabel.sizeToFit() } } - + var lastUpdate: Date? = Date() let dateFormatter = DateFormatter() - + override func viewDidLoad() { self.refreshControl?.addTarget(self, action: #selector(FolderViewController.refresh), for: UIControlEvents.valueChanged) self.refreshControl?.attributedTitle = NSAttributedString(string: NSLocalizedString("PullToRefresh", comment: "Pull to refresh")) @@ -50,10 +50,10 @@ class FolderViewController: UITableViewController { self?.lastUpdate = Date() self?.tableView.reloadData() }) - + dateFormatter.locale = Locale.current dateFormatter.timeStyle = .medium - + lastUpdateLabel.sizeToFit() lastUpdateLabel.backgroundColor = UIColor.clear lastUpdateLabel.textAlignment = .center @@ -208,7 +208,7 @@ class FolderViewController: UITableViewController { refreshControl?.endRefreshing() lastUpdateText = lastUpdate != nil ? "\(NSLocalizedString("LastUpdate", comment: "When the last update occured")): \(dateFormatter.string(from: lastUpdate!))" : NSLocalizedString("NeverUpdated", comment: "No internet connection since last launch") } - + func getImage(for path: String) -> UIImage { if path == UserManager.frontendInboxFolderPath { return #imageLiteral(resourceName: "Inbox") diff --git a/enzevalos_iphone/FrequentCell.swift b/enzevalos_iphone/FrequentCell.swift index 9067ee4f6c4d3394a83fb836fa62edeab22f06b9..53a5f82e515975b664e943116e32d2d16314e629 100644 --- a/enzevalos_iphone/FrequentCell.swift +++ b/enzevalos_iphone/FrequentCell.swift @@ -8,51 +8,51 @@ import UIKit -class FrequentCell : UICollectionViewCell { +class FrequentCell: UICollectionViewCell { @IBOutlet weak var img: UIImageView! @IBOutlet weak var name: UILabel! @IBOutlet weak var type: UIImageView! @IBOutlet weak var background: UIImageView! - + var address = "" var identifier = "" - + override init(frame: CGRect) { super.init(frame: frame) self.frame = CGRect.init(x: 0, y: 0, width: 90, height: 100) } - + required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.frame = CGRect.init(x: 0, y: 33, width: 90, height: 100) } - - func drawBackgroud(_ color : UIColor){ + + func drawBackgroud(_ color: UIColor) { var myBounds = CGRect() myBounds.size.width = 70 myBounds.size.height = 70 UIGraphicsBeginImageContextWithOptions(myBounds.size, false, 2) //try 200 here - + let context = UIGraphicsGetCurrentContext() - + // // Clip context to a circle // let path = CGPath(ellipseIn: myBounds, transform: nil); context!.addPath(path); context!.clip(); - - + + // // Fill background of context // context!.setFillColor(color.cgColor) context!.fill(CGRect(x: 0, y: 0, width: myBounds.size.width, height: myBounds.size.height)); - + let snapshot = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); - + self.background.image = snapshot } - + } diff --git a/enzevalos_iphone/GamificationData.swift b/enzevalos_iphone/GamificationData.swift index 73e3340ce2e1f38b4006deaac4606499fb60ef33..458473be1fbbd1e8e2b0c746f165de00d5d21960 100755 --- a/enzevalos_iphone/GamificationData.swift +++ b/enzevalos_iphone/GamificationData.swift @@ -142,7 +142,7 @@ class GamificationData: NSObject { **Returns** the boolean Value whether the Badge is **Achieved (true)** or not (false) */ - func badgeAchieved(badge : Badges) -> Bool { + func badgeAchieved(badge: Badges) -> Bool { // Check if Subbadges are Finished let subBadges = self.subBadgesforBadge(badge: badge.type) for element in subBadges { diff --git a/enzevalos_iphone/GamificationDataUnitTest.swift b/enzevalos_iphone/GamificationDataUnitTest.swift index 44bd769b3cac4835bb47eb9f62f35b91873c04e3..c6d593b5d7e31faf171d75e8689cd986c4e58a1e 100755 --- a/enzevalos_iphone/GamificationDataUnitTest.swift +++ b/enzevalos_iphone/GamificationDataUnitTest.swift @@ -10,15 +10,15 @@ import XCTest @testable import enzevalos_iphone class GamificationDataUnitTest: XCTestCase { - var badges : [Badges]! - + var badges: [Badges]! + override func setUp() { super.setUp() badges = GamificationData.sharedInstance.badges // Put setup code here. This method is called before the invocation of each test method in the class. } - + override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() @@ -26,12 +26,12 @@ class GamificationDataUnitTest: XCTestCase { } - func testBadgePictures(){ + func testBadgePictures() { // tests if all image Names are correct and can be loaded for e in badges { // Test Main Badges let bundle = Bundle(for: type(of: self)) - + let imageOn = UIImage.init(named: e.onName, in: bundle, compatibleWith: nil) XCTAssert(imageOn != nil, "Image \(e.onName) failed") let imageOff = UIImage.init(named: e.offName, in: bundle, compatibleWith: nil) @@ -53,11 +53,11 @@ class GamificationDataUnitTest: XCTestCase { } - func testWidth(){ + func testWidth() { let arrow = ArrowView() let circle = CircleView() - XCTAssert( arrow.width == circle.width , "LineStrokes not identical") + XCTAssert(arrow.width == circle.width, "LineStrokes not identical") } /* @@ -67,5 +67,5 @@ class GamificationDataUnitTest: XCTestCase { // Put the code you want to measure the time of here. } }*/ - + } diff --git a/enzevalos_iphone/IconsStyleKit.swift b/enzevalos_iphone/IconsStyleKit.swift index 4c9e594e5557ab2ad016b0e18feb8d7f4b48e7d1..1e5f96586bd1d4efeec50c97402dc9f5d4dcbf06 100644 --- a/enzevalos_iphone/IconsStyleKit.swift +++ b/enzevalos_iphone/IconsStyleKit.swift @@ -15,7 +15,7 @@ import UIKit -open class IconsStyleKit : NSObject { +open class IconsStyleKit: NSObject { //// Cache @@ -42,7 +42,7 @@ open class IconsStyleKit : NSObject { @objc open dynamic class func drawLetter(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 50, height: 35), resizing: ResizingBehavior = .aspectFit, color: UIColor = IconsStyleKit.strokeColor, fillBackground: Bool = false) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 50, height: 35), target: targetFrame) @@ -90,7 +90,7 @@ open class IconsStyleKit : NSObject { color.setStroke() bezier3Path.lineWidth = 2 bezier3Path.stroke() - + context.restoreGState() } @@ -98,7 +98,7 @@ open class IconsStyleKit : NSObject { @objc open dynamic class func drawLetterCorrupted(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 49, height: 34), resizing: ResizingBehavior = .aspectFit, color: UIColor = IconsStyleKit.strokeColor) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 49, height: 34), target: targetFrame) @@ -198,7 +198,7 @@ open class IconsStyleKit : NSObject { color.setStroke() bezier8Path.lineWidth = 1.5 bezier8Path.stroke() - + context.restoreGState() } @@ -206,7 +206,7 @@ open class IconsStyleKit : NSObject { @objc open dynamic class func drawPostcard(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 49, height: 34), resizing: ResizingBehavior = .aspectFit, color: UIColor = IconsStyleKit.strokeColor, fillBackground: Bool = false) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 49, height: 34), target: targetFrame) @@ -330,21 +330,21 @@ open class IconsStyleKit : NSObject { bezier10Path.close() color.setFill() bezier10Path.fill() - + context.restoreGState() } - + @objc open dynamic class func drawLetterOpen(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 47, height: 43), resizing: ResizingBehavior = .aspectFit, color: UIColor = IconsStyleKit.strokeColor) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 47, height: 43), target: targetFrame) context.translateBy(x: resizedFrame.minX, y: resizedFrame.minY) context.scaleBy(x: resizedFrame.width / 47, y: resizedFrame.height / 43) - + //// Group //// Bezier Drawing let bezierPath = UIBezierPath() @@ -404,8 +404,8 @@ open class IconsStyleKit : NSObject { bezierPath.usesEvenOddFillRule = true color.setFill() bezierPath.fill() - - + + //// Bezier 2 Drawing let bezier2Path = UIBezierPath() bezier2Path.move(to: CGPoint(x: 2.96, y: 15.51)) @@ -417,8 +417,8 @@ open class IconsStyleKit : NSObject { color.setStroke() bezier2Path.lineWidth = 1.5 bezier2Path.stroke() - - + + //// Bezier 4 Drawing let bezier4Path = UIBezierPath() bezier4Path.move(to: CGPoint(x: 11.09, y: 22.41)) @@ -428,8 +428,8 @@ open class IconsStyleKit : NSObject { color.setStroke() bezier4Path.lineWidth = 1.5 bezier4Path.stroke() - - + + //// Bezier 3 Drawing let bezier3Path = UIBezierPath() bezier3Path.move(to: CGPoint(x: 6, y: 6.25)) @@ -442,7 +442,7 @@ open class IconsStyleKit : NSObject { bezier3Path.lineWidth = 1.5 bezier3Path.lineCapStyle = .round bezier3Path.stroke() - + context.restoreGState() } @@ -454,7 +454,7 @@ open class IconsStyleKit : NSObject { } UIGraphicsBeginImageContextWithOptions(CGSize(width: 50, height: 35), false, 0) - IconsStyleKit.drawLetter() + IconsStyleKit.drawLetter() Cache.imageOfLetter = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() @@ -466,23 +466,23 @@ open class IconsStyleKit : NSObject { if Cache.imageOfLetterBG != nil { return Cache.imageOfLetterBG! } - + UIGraphicsBeginImageContextWithOptions(CGSize(width: 50, height: 35), false, 0) IconsStyleKit.drawLetter(fillBackground: true) - + Cache.imageOfLetterBG = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() - + return Cache.imageOfLetterBG! } - + @objc open dynamic class var imageOfLetterCorrupted: UIImage { if Cache.imageOfLetterCorrupted != nil { return Cache.imageOfLetterCorrupted! } UIGraphicsBeginImageContextWithOptions(CGSize(width: 49, height: 34), false, 0) - IconsStyleKit.drawLetterCorrupted() + IconsStyleKit.drawLetterCorrupted() Cache.imageOfLetterCorrupted = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() @@ -496,39 +496,39 @@ open class IconsStyleKit : NSObject { } UIGraphicsBeginImageContextWithOptions(CGSize(width: 49, height: 34), false, 0) - IconsStyleKit.drawPostcard() + IconsStyleKit.drawPostcard() Cache.imageOfPostcard = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() return Cache.imageOfPostcard! } - + @objc open dynamic class var imageOfPostcardBG: UIImage { if Cache.imageOfPostcardBG != nil { return Cache.imageOfPostcardBG! } - + UIGraphicsBeginImageContextWithOptions(CGSize(width: 49, height: 34), false, 0) IconsStyleKit.drawPostcard(fillBackground: true) - + Cache.imageOfPostcardBG = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() - + return Cache.imageOfPostcardBG! } - + @objc open dynamic class var imageOfLetterOpen: UIImage { if Cache.imageOfLetterOpen != nil { return Cache.imageOfLetterOpen! } - + UIGraphicsBeginImageContextWithOptions(CGSize(width: 47, height: 43), false, 0) IconsStyleKit.drawLetterOpen() - + Cache.imageOfLetterOpen = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() - + return Cache.imageOfLetterOpen! } @@ -591,17 +591,17 @@ open class IconsStyleKit : NSObject { scales.height = abs(target.height / rect.height) switch self { - case .aspectFit: - scales.width = min(scales.width, scales.height) - scales.height = scales.width - case .aspectFill: - scales.width = max(scales.width, scales.height) - scales.height = scales.width - case .stretch: - break - case .center: - scales.width = 1 - scales.height = 1 + case .aspectFit: + scales.width = min(scales.width, scales.height) + scales.height = scales.width + case .aspectFill: + scales.width = max(scales.width, scales.height) + scales.height = scales.width + case .stretch: + break + case .center: + scales.width = 1 + scales.height = 1 } var result = rect.standardized diff --git a/enzevalos_iphone/InboxCellDelegator.swift b/enzevalos_iphone/InboxCellDelegator.swift index 0ec7ed55460b99a6e8e36f3e82dfdd22cba0d0b9..c1a46cfef6019456e1899d2ea87d708b4487b291 100644 --- a/enzevalos_iphone/InboxCellDelegator.swift +++ b/enzevalos_iphone/InboxCellDelegator.swift @@ -7,7 +7,7 @@ // protocol InboxCellDelegator: class { - + func callSegueFromCell(_ mail: PersistentMail?) func callSegueFromCell2(_ contact: KeyRecord?) func callSegueToContact(_ contact: KeyRecord?) diff --git a/enzevalos_iphone/InboxViewController.swift b/enzevalos_iphone/InboxViewController.swift index 37f7ecd2dd233551caae79dfd05ae85e0e92d07f..704893d64e07a5147eb76888b36d6d63bbc4030c 100644 --- a/enzevalos_iphone/InboxViewController.swift +++ b/enzevalos_iphone/InboxViewController.swift @@ -224,12 +224,12 @@ class InboxViewController: UITableViewController, InboxCellDelegator { func filterContentForSearchText(_ searchText: String, scope: Int = 0) { var records = [KeyRecord]() if scope == 0 || scope == 3 { - records += folder.records.filter({ ( record: KeyRecord) -> Bool in + records += folder.records.filter({ (record: KeyRecord) -> Bool in return record.name.lowercased().contains(searchText.lowercased()) }) } if scope == 1 || scope == 3 { - records += folder.records.filter({ ( record: KeyRecord) -> Bool in + records += folder.records.filter({ (record: KeyRecord) -> Bool in let mails = record.inboxMails return mails.filter({ (mail: PersistentMail) -> Bool in mail.subject?.lowercased().contains(searchText.lowercased()) ?? false @@ -237,7 +237,7 @@ class InboxViewController: UITableViewController, InboxCellDelegator { }) } if scope == 2 || scope == 3 { - records += folder.records.filter({ ( record: KeyRecord) -> Bool in + records += folder.records.filter({ (record: KeyRecord) -> Bool in let mails = record.inboxMails return mails.filter({ (mail: PersistentMail) -> Bool in if let decryptedBody = mail.decryptedBody { diff --git a/enzevalos_iphone/Invitation/InvitationHelper.swift b/enzevalos_iphone/Invitation/InvitationHelper.swift index 14571d03a7cc94529e31cd096986c62171a6a1f3..ebdfea3424998d9416cee4974bd60d1f5f053b27 100644 --- a/enzevalos_iphone/Invitation/InvitationHelper.swift +++ b/enzevalos_iphone/Invitation/InvitationHelper.swift @@ -10,94 +10,94 @@ import UIKit // MARK: - UserDefaults -enum InvitationUserDefaults : String { +enum InvitationUserDefaults: String { - case shouldNotShowFirstDialog = "Invitation_shouldNotShowFirstDialog" - case shouldNotShowSecondDialog = "Invitation_shouldNotShowSecondDialog" + case shouldNotShowFirstDialog = "Invitation_shouldNotShowFirstDialog" + case shouldNotShowSecondDialog = "Invitation_shouldNotShowSecondDialog" - var bool: Bool { - return UserDefaults.standard.bool(forKey: self.rawValue) - } + var bool: Bool { + return UserDefaults.standard.bool(forKey: self.rawValue) + } - func set(_ value: Bool) { - UserDefaults.standard.set(value, forKey: self.rawValue) - UserDefaults.standard.synchronize() - } + func set(_ value: Bool) { + UserDefaults.standard.set(value, forKey: self.rawValue) + UserDefaults.standard.synchronize() + } } // MARK: - Extensions extension String { - func words(inRange range: NSRange) -> (words: String, extendedRange: NSRange)? { + func words(inRange range: NSRange) -> (words: String, extendedRange: NSRange)? { - let strings = self.components(separatedBy: .whitespacesAndNewlines) - var result = [(word: String, index: Int)]() + let strings = self.components(separatedBy: .whitespacesAndNewlines) + var result = [(word: String, index: Int)]() - var index = 0 - let start = range.location - let length = range.length + var index = 0 + let start = range.location + let length = range.length - for string in strings { + for string in strings { - guard (index < start + length) else { - break - } + guard (index < start + length) else { + break + } - guard (index + string.count >= start) else { - index += (1 + string.count) - continue - } + guard (index + string.count >= start) else { + index += (1 + string.count) + continue + } - result.append((word: string, index: index)) - index += (1 + string.count) - } + result.append((word: string, index: index)) + index += (1 + string.count) + } - let string = result - .map { (word, index) -> String in - return word - }.joined(separator: " ") + let string = result + .map { (word, index) -> String in + return word + }.joined(separator: " ") - guard let startIndex = result.first?.index else { - return nil - } + guard let startIndex = result.first?.index else { + return nil + } - let wordsRange = NSRange(location: startIndex, length: string.count) - let words = (self as NSString).substring(with: wordsRange) + let wordsRange = NSRange(location: startIndex, length: string.count) + let words = (self as NSString).substring(with: wordsRange) - return (words, wordsRange) - } + return (words, wordsRange) + } - var urlString: String? { - return self.addingPercentEncoding(withAllowedCharacters: .alphanumerics) - } + var urlString: String? { + return self.addingPercentEncoding(withAllowedCharacters: .alphanumerics) + } } extension NSRange { - func isInRange(of range: NSRange) -> Bool { + func isInRange(of range: NSRange) -> Bool { - return self.contains(range.location) || range.contains(self.location) - } + return self.contains(range.location) || range.contains(self.location) + } } extension UIView { - func roundRect(_ radius: CGFloat) { - self.layer.cornerRadius = radius - self.layer.masksToBounds = true - } + func roundRect(_ radius: CGFloat) { + self.layer.cornerRadius = radius + self.layer.masksToBounds = true + } - func roundRect() { - self.roundRect(self.frame.height / 2) - } + func roundRect() { + self.roundRect(self.frame.height / 2) + } } extension UIColor { - struct Invitation { + struct Invitation { - static let gray = #colorLiteral(red: 0.2392156863, green: 0.2392156863, blue: 0.2392156863, alpha: 1) - static let orange = #colorLiteral(red: 1, green: 0.7058823529, blue: 0.2549019608, alpha: 1) - } + static let gray = #colorLiteral(red: 0.2392156863, green: 0.2392156863, blue: 0.2392156863, alpha: 1) + static let orange = #colorLiteral(red: 1, green: 0.7058823529, blue: 0.2549019608, alpha: 1) + } } diff --git a/enzevalos_iphone/KeyRecord+CoreDataClass.swift b/enzevalos_iphone/KeyRecord+CoreDataClass.swift index 5410b9e465d75655fd2e4c7ff68423b2c1d2b815..701494267901a83f06014bf3051f1b6977558def 100644 --- a/enzevalos_iphone/KeyRecord+CoreDataClass.swift +++ b/enzevalos_iphone/KeyRecord+CoreDataClass.swift @@ -15,57 +15,57 @@ import UIKit @objc(KeyRecord) public class KeyRecord: NSManagedObject, Record { - - public var name: String{ - get{ + + public var name: String { + get { return self.ezContact.name } } - - public var hasKey: Bool{ - get{ + + public var hasKey: Bool { + get { return key != nil } } - - public var isSecure: Bool{ - get{ + + public var isSecure: Bool { + get { return hasKey } } - - public var isVerified: Bool{ - get{ - if let k = key{ + + public var isVerified: Bool { + get { + if let k = key { return k.isVerified() } return false } } - - public var keyID: String?{ - if let k = key{ + + public var keyID: String? { + if let k = key { return k.keyID } return nil } - - public var cryptoscheme: CryptoScheme{ - get{ - if let k = key{ + + public var cryptoscheme: CryptoScheme { + get { + if let k = key { return k.encryptionType } return CryptoScheme.UNKNOWN } } - - public var fingerprint: String?{ - get{ - if let k = pgpKey{ - if let pk = k.publicKey{ + + public var fingerprint: String? { + get { + if let k = pgpKey { + if let pk = k.publicKey { return pk.fingerprint.description() } - else if let sk = k.secretKey{ + else if let sk = k.secretKey { return sk.fingerprint.description() } return k.keyID.longIdentifier @@ -73,95 +73,95 @@ public class KeyRecord: NSManagedObject, Record { return nil } } - - private var pgpKey: Key?{ - get{ - if let id = key?.keyID{ + + private var pgpKey: Key? { + get { + if let id = key?.keyID { let pgp = SwiftPGP() return pgp.loadKey(id: id) } return nil } } - - public var ezContact: EnzevalosContact{ - get{ + + public var ezContact: EnzevalosContact { + get { return contact } } - - public var mails: [PersistentMail]{ - get{ - if let m = persistentMails as? Set<PersistentMail>{ + + public var mails: [PersistentMail] { + get { + if let m = persistentMails as? Set<PersistentMail> { return Array(m).sorted() } return [] } } - - public var cnContact: CNContact?{ - get{ + + public var cnContact: CNContact? { + get { return contact.cnContact } } - - public var color: UIColor{ - get{ + + public var color: UIColor { + get { return contact.getColor() } } - - public var image: UIImage{ - get{ + + public var image: UIImage { + get { return contact.getImageOrDefault() } } - - public var addresses: [MailAddress]{ - get{ - if let k = key{ - if let addrs = k.mailaddress as? Set<Mail_Address>{ + + public var addresses: [MailAddress] { + get { + if let k = key { + if let addrs = k.mailaddress as? Set<Mail_Address> { return Array(addrs) } return [] } - if let addrs = contact.addresses as? Set<Mail_Address>{ + if let addrs = contact.addresses as? Set<Mail_Address> { return Array(addrs) } return [] } } - - var addressNames:[String]{ - get{ + + var addressNames: [String] { + get { let adrs = addresses var names = [String]() - for adr in adrs{ + for adr in adrs { names.append(adr.mailAddress) } return names } } - - public func verify(){ - if let k = key{ + + public func verify() { + if let k = key { k.verify() } } - - public func match(mail: PersistentMail) -> Bool{ - if mail.folder == folder{ - if let recordFingerprint = fingerprint, let signedKey = mail.signedKey{ + + public func match(mail: PersistentMail) -> Bool { + if mail.folder == folder { + if let recordFingerprint = fingerprint, let signedKey = mail.signedKey { let pgp = SwiftPGP() - if let key = pgp.loadKey(id: signedKey.keyID)?.publicKey{ + if let key = pgp.loadKey(id: signedKey.keyID)?.publicKey { return key.fingerprint.description() == recordFingerprint } return false } - if !hasKey && !mail.isSigned{ - for addr in addresses{ - if mail.from.mailAddress == addr.mailAddress{ + if !hasKey && !mail.isSigned { + for addr in addresses { + if mail.from.mailAddress == addr.mailAddress { return true } } @@ -170,24 +170,24 @@ public class KeyRecord: NSManagedObject, Record { } return false } - - public func mailsInFolder(folder: Folder) -> [PersistentMail]{ + + public func mailsInFolder(folder: Folder) -> [PersistentMail] { let folderMails = DataHandler.handler.allMailsInFolder(key: keyID, contact: ezContact, folder: folder, isSecure: isSecure) - if folderMails.count == 0{ + if folderMails.count == 0 { folder.removeFromKeyRecords(self) } let set = Set<PersistentMail>(folderMails) return Array(set).sorted() } - - - public var inboxMails: [PersistentMail]{ - get{ + + + public var inboxMails: [PersistentMail] { + get { let inbox = DataHandler.handler.findFolder(with: UserManager.backendInboxFolderPath) return mailsInFolder(folder: inbox) } } - + } @@ -198,12 +198,12 @@ private func isEmpty(_ contact: KeyRecord) -> Bool { public func == (lhs: KeyRecord, rhs: KeyRecord) -> Bool { - if lhs.hasKey && rhs.hasKey{ - if let keyLHS = lhs.key, let keyRHS = rhs.key{ + if lhs.hasKey && rhs.hasKey { + if let keyLHS = lhs.key, let keyRHS = rhs.key { return keyLHS.keyID == keyRHS.keyID } } - if lhs.hasKey != rhs.hasKey{ + if lhs.hasKey != rhs.hasKey { return false } return lhs.contact == rhs.contact diff --git a/enzevalos_iphone/KeyViewController.swift b/enzevalos_iphone/KeyViewController.swift index 74b6a94019b015084961888546e9ed817ff02c80..662edef0e7d3435c3cd632cae515ce154802cc37 100644 --- a/enzevalos_iphone/KeyViewController.swift +++ b/enzevalos_iphone/KeyViewController.swift @@ -12,7 +12,7 @@ class KeyViewController: UIViewController { @IBOutlet var tableView: UITableView! @IBOutlet weak var copyButton: UIButton! - + var openDate: Date = Date() //used for logging issues [see Logger.log(keyViewClose keyID:String, timevisited: Date)] var record: KeyRecord? @@ -24,9 +24,9 @@ class KeyViewController: UIViewController { tableView.estimatedRowHeight = 100 openDate = Date() // Logger.queue.async(flags: .barrier) { - if let record = self.record, let keyID = record.keyID { - Logger.log(keyViewOpen: keyID) - } + if let record = self.record, let keyID = record.keyID { + Logger.log(keyViewOpen: keyID) + } // } copyButton.setTitle(NSLocalizedString("copyKey", comment: ""), for: .normal) copyButton.setTitle(NSLocalizedString("copied", comment: "the key has been copied to the clipboard"), for: .disabled) @@ -48,9 +48,9 @@ class KeyViewController: UIViewController { override func viewDidDisappear(_ animated: Bool) { // Logger.queue.async(flags: .barrier) { - if let record = self.record, let keyID = record.keyID { - Logger.log(keyViewClose: keyID, secondsOpened: Int(Date().timeIntervalSince(self.openDate))) - } + if let record = self.record, let keyID = record.keyID { + Logger.log(keyViewClose: keyID, secondsOpened: Int(Date().timeIntervalSince(self.openDate))) + } // } super.viewDidDisappear(animated) } @@ -89,9 +89,9 @@ extension KeyViewController: UITableViewDataSource { let characters = Array((record?.fingerprint ?? "")) var i = 0 stride(from: 0, to: characters.count, by: 4).forEach { - result += String(characters[$0..<min($0+4, characters.count)]) - if $0+4 < characters.count { - i = (i+1) % 3 + result += String(characters[$0..<min($0 + 4, characters.count)]) + if $0 + 4 < characters.count { + i = (i + 1) % 3 if i == 0 { result += "\n" } @@ -118,10 +118,10 @@ extension KeyViewController: UITableViewDataSource { formatter.locale = Locale.current formatter.dateStyle = .medium formatter.timeStyle = .medium - if let discoveryDate = record?.key?.discoveryDate{ - cell.detailTextLabel?.text = formatter.string(from: discoveryDate as Date) + if let discoveryDate = record?.key?.discoveryDate { + cell.detailTextLabel?.text = formatter.string(from: discoveryDate as Date) } - + return cell } else if toRowType(indexPath) == .discoveryMail { @@ -159,7 +159,7 @@ extension KeyViewController: UITableViewDataSource { cell.textLabel?.text = NSLocalizedString("KeyNotFound", comment: "there was no key found. Contact developers") return cell } - + func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { if section == 1 { return NSLocalizedString("Checkmarks", comment: "Checkmarks") @@ -170,7 +170,7 @@ extension KeyViewController: UITableViewDataSource { func numberOfSections(in tableView: UITableView) -> Int { if let key = record?.key { var sections = 1 - if key.mailaddress != nil{ + if key.mailaddress != nil { sections += 1 } return sections @@ -187,7 +187,7 @@ extension KeyViewController: UITableViewDataSource { } return nil } - + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { if toSectionType(indexPath.section) == .keyDetails { if toRowType(indexPath) == .fingerprint { @@ -196,7 +196,7 @@ extension KeyViewController: UITableViewDataSource { } return UITableViewAutomaticDimension } - + func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { return 150 } diff --git a/enzevalos_iphone/LabelStyleKit.swift b/enzevalos_iphone/LabelStyleKit.swift index 77620595cc49cacae35263c8434a45da22694d03..f1757a4485a3af9ac52147ba9d69d411813aaca9 100644 --- a/enzevalos_iphone/LabelStyleKit.swift +++ b/enzevalos_iphone/LabelStyleKit.swift @@ -15,7 +15,7 @@ import UIKit -open class LabelStyleKit : NSObject { +open class LabelStyleKit: NSObject { //// Cache @@ -38,7 +38,7 @@ open class LabelStyleKit : NSObject { @objc open dynamic class func drawHome(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 28, height: 28), resizing: ResizingBehavior = .aspectFit, color: UIColor = LabelStyleKit.black) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 28, height: 28), target: targetFrame) @@ -91,7 +91,7 @@ open class LabelStyleKit : NSObject { bezier3Path.close() color.setFill() bezier3Path.fill() - + context.restoreGState() } @@ -99,7 +99,7 @@ open class LabelStyleKit : NSObject { @objc open dynamic class func drawWork(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 148, height: 134), resizing: ResizingBehavior = .aspectFit, color: UIColor = LabelStyleKit.black) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 148, height: 134), target: targetFrame) @@ -159,7 +159,7 @@ open class LabelStyleKit : NSObject { bezier4Path.close() color.setFill() bezier4Path.fill() - + context.restoreGState() } @@ -167,7 +167,7 @@ open class LabelStyleKit : NSObject { @objc open dynamic class func drawOther(frame targetFrame: CGRect = CGRect(x: 0, y: 0, width: 86, height: 82), resizing: ResizingBehavior = .aspectFit, color: UIColor = LabelStyleKit.black) { //// General Declarations let context = UIGraphicsGetCurrentContext()! - + //// Resize to Target Frame context.saveGState() let resizedFrame: CGRect = resizing.apply(rect: CGRect(x: 0, y: 0, width: 86, height: 82), target: targetFrame) @@ -190,7 +190,7 @@ open class LabelStyleKit : NSObject { starPath.close() color.setFill() starPath.fill() - + context.restoreGState() } @@ -203,7 +203,7 @@ open class LabelStyleKit : NSObject { } UIGraphicsBeginImageContextWithOptions(CGSize(width: 28, height: 28), false, 0) - LabelStyleKit.drawHome() + LabelStyleKit.drawHome() Cache.imageOfHome = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() @@ -217,7 +217,7 @@ open class LabelStyleKit : NSObject { } UIGraphicsBeginImageContextWithOptions(CGSize(width: 148, height: 134), false, 0) - LabelStyleKit.drawWork() + LabelStyleKit.drawWork() Cache.imageOfWork = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() @@ -231,7 +231,7 @@ open class LabelStyleKit : NSObject { } UIGraphicsBeginImageContextWithOptions(CGSize(width: 86, height: 82), false, 0) - LabelStyleKit.drawOther() + LabelStyleKit.drawOther() Cache.imageOfOther = UIGraphicsGetImageFromCurrentImageContext()! UIGraphicsEndImageContext() @@ -290,17 +290,17 @@ open class LabelStyleKit : NSObject { scales.height = abs(target.height / rect.height) switch self { - case .aspectFit: - scales.width = min(scales.width, scales.height) - scales.height = scales.width - case .aspectFill: - scales.width = max(scales.width, scales.height) - scales.height = scales.width - case .stretch: - break - case .center: - scales.width = 1 - scales.height = 1 + case .aspectFit: + scales.width = min(scales.width, scales.height) + scales.height = scales.width + case .aspectFill: + scales.width = max(scales.width, scales.height) + scales.height = scales.width + case .stretch: + break + case .center: + scales.width = 1 + scales.height = 1 } var result = rect.standardized diff --git a/enzevalos_iphone/ListViewCell.swift b/enzevalos_iphone/ListViewCell.swift index c9cb23d2f50f7637a9e0cb3e3245e3989327bc2b..3e53f6d0e6c0447b5e1e7e8d7a70553d6091c13f 100644 --- a/enzevalos_iphone/ListViewCell.swift +++ b/enzevalos_iphone/ListViewCell.swift @@ -17,7 +17,7 @@ class ListViewCell: UITableViewCell { class LoadingCell: UITableViewCell { @IBOutlet weak var activityIndicator: UIActivityIndicatorView! - + override func layoutSubviews() { super.layoutSubviews() activityIndicator.startAnimating() diff --git a/enzevalos_iphone/Logger.swift b/enzevalos_iphone/Logger.swift index 46607b3f72a9649a4d2ae4f3349dbc5fd6e94554..62c4ab5fdd1fcf988662433e16824cc8e3e536d3 100644 --- a/enzevalos_iphone/Logger.swift +++ b/enzevalos_iphone/Logger.swift @@ -16,11 +16,11 @@ class Logger { static let defaultFileName = "log.json" static let loggingInterval = 21600 //60*60*6 seconds - static let resendInterval = 5*60 + static let resendInterval = 5 * 60 static let logReceiver = LOGGING_MAIL_ADR static var nextDeadline = (UserManager.loadUserValue(Attribute.nextDeadline) as? Date) ?? Date() - + static var studyID = StudySettings.studyID //identifies the participant in the study static fileprivate func sendCheck() { @@ -29,7 +29,7 @@ class Logger { let tmpNextDeadline = Date(timeIntervalSinceNow: TimeInterval(resendInterval)) nextDeadline = tmpNextDeadline UserManager.storeUserValue(nextDeadline as AnyObject?, attribute: Attribute.nextDeadline) - + sendLog() } } @@ -53,20 +53,20 @@ class Logger { } } - static func log(setupStudy studypara: [StudyParamter:Int], alreadyRegistered: Bool) { + static func log(setupStudy studypara: [StudyParamter: Int], alreadyRegistered: Bool) { if !logging { return } var event = plainLogDict() event["type"] = LoggingEventType.setupStudy.rawValue - for (para,value) in studypara{ + for (para, value) in studypara { event[para.name] = value } event["alreadyRegistered"] = alreadyRegistered saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(startApp onboarding: Bool) { if !logging { return @@ -99,24 +99,24 @@ class Logger { saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(onboardingState onboardingSection: String) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.onboardingState.rawValue event["onboardingSection"] = onboardingSection saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(onboardingPageTransition from: Int, to: Int, onboardingSection: String) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.onboardingPageTransition.rawValue event["from"] = from @@ -258,38 +258,38 @@ class Logger { saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(exportKeyViewOpen view: Int) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.exportKeyViewOpen.rawValue event["view"] = view - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(exportKeyViewClose view: Int) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.exportKeyViewClose.rawValue event["view"] = view - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(exportKeyViewButton send: Bool) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.exportKeyViewClose.rawValue if send { @@ -297,98 +297,98 @@ class Logger { } else { event["case"] = "deletePasscode" } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(importPrivateKeyPopupOpen mail: PersistentMail?) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.importPrivateKeyPopupOpen.rawValue if let mail = mail { event = extract(from: mail, event: event) } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(importPrivateKeyPopupClose mail: PersistentMail?, doImport: Bool) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.importPrivateKeyPopupClose.rawValue event["doImport"] = doImport if let mail = mail { event = extract(from: mail, event: event) } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(importPrivateKey mail: PersistentMail?, success: Bool) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.importPrivateKey.rawValue event["success"] = success if let mail = mail { event = extract(from: mail, event: event) } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(sendViewOpen mail: EphemeralMail?) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.sendViewOpen.rawValue if let mail = mail { event = extract(from: mail, event: event) } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(sendViewClose mail: EphemeralMail?) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.sendViewClose.rawValue if let mail = mail { event = extract(from: mail, event: event) } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(createDraft to: [Mail_Address?], cc: [Mail_Address?], bcc: [Mail_Address?], subject: String, bodyLength: Int, isEncrypted: Bool, isSigned: Bool, myKeyID: String) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.createDraft.rawValue - - - + + + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } @@ -429,22 +429,22 @@ class Logger { else { sendCheck() } - - + + } - + static func log(readViewOpen mail: PersistentMail, message: String, draft: Bool = false) { if !logging { return } - + var event = plainLogDict() - + event["type"] = LoggingEventType.readViewOpen.rawValue event = extract(from: mail, event: event) event["messagePresented"] = message event["draft"] = draft - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } @@ -453,13 +453,13 @@ class Logger { if !logging { return } - + var event = plainLogDict() - + event["type"] = LoggingEventType.readViewClose.rawValue event["messagePresented"] = message event["draft"] = draft - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } @@ -477,20 +477,20 @@ class Logger { saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(bitcoinMail gotIt: Bool) { if !logging { return } - + var event = plainLogDict() - + event["type"] = LoggingEventType.gotBitcoinMail.rawValue - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(delete mail: PersistentMail, toTrash: Bool) { if !logging { @@ -503,7 +503,7 @@ class Logger { } else { event["type"] = LoggingEventType.mailDeletedPersistent.rawValue } - // event = extract(from: mail, event: event) + // event = extract(from: mail, event: event) event["operation"] = "DeleteMail" saveToDisk(json: dictToJSON(fields: event)) @@ -577,18 +577,18 @@ class Logger { saveToDisk(json: dictToJSON(fields: event)) sendCheck() } - + static func log(reactTo mail: PersistentMail?) { if !logging { return } - + var event = plainLogDict() event["type"] = LoggingEventType.reactButtonTapped.rawValue if let mail = mail { event = extract(from: mail, event: event) } - + saveToDisk(json: dictToJSON(fields: event)) sendCheck() } @@ -690,7 +690,7 @@ class Logger { return event } - + static fileprivate func extract(from mail: EphemeralMail, event: [String: Any]) -> [String: Any] { var event = event event["to"] = Logger.resolve(mailAddresses: mail.to) @@ -702,12 +702,12 @@ class Logger { //TODO: //event["signingKeyID"] = Logger.resolve(keyID: signingKeyID) //event["myKeyID"] = Logger.resolve(keyID: myKeyID) - - - + + + //event["secureAddresses"] = secureAddresses //could mean the addresses, in this mail we have a key for //event["encryptedForKeyIDs"] = Logger.resolve(keyIDs: encryptedForKeyIDs) - + return event } @@ -736,7 +736,7 @@ class Logger { return newSubject } - + static func specialMail(subject: String) -> String { if subject.contains(NSLocalizedString("inviteSubject", comment: "subject of invitation email")) { return "invitation" @@ -883,7 +883,7 @@ class Logger { do { let currentContent = try String(contentsOf: fileURL, encoding: .utf8) if !currentContent.isEmpty { - AppDelegate.getAppDelegate().mailHandler.send([logMailAddress], ccEntrys: [], bccEntrys: [], subject: "[Enzevalos] Log", message: "{\"studyID\":\""+studyID+"\",\"data\":" + "[" + currentContent.dropLast() + "\n]" + "}", callback: sendCallback, loggingMail: true) + AppDelegate.getAppDelegate().mailHandler.send([logMailAddress], ccEntrys: [], bccEntrys: [], subject: "[Enzevalos] Log", message: "{\"studyID\":\"" + studyID + "\",\"data\":" + "[" + currentContent.dropLast() + "\n]" + "}", callback: sendCallback, loggingMail: true) } } catch { diff --git a/enzevalos_iphone/LoggingEventType.swift b/enzevalos_iphone/LoggingEventType.swift index 6def1cc05fbdde1ffb10a39f1ab7fbc4a1a035ba..279c284ebe015c439860e0b6469cd012405ba122 100644 --- a/enzevalos_iphone/LoggingEventType.swift +++ b/enzevalos_iphone/LoggingEventType.swift @@ -11,43 +11,43 @@ import Foundation enum LoggingEventType: String { case unknown = "unknown", - mailSent = "mailSent", - mailDeletedPersistent = "mailDeletedPersistent", - mailDeletedToTrash = "mailDeletedToTrash", - mailArchived = "mailArchived", - mailReceived = "mailReceived", - setupStudy = "setupStudy", - appStart = "appStart", - appTerminate = "appTerminate", - appBackground = "appBackground", - overviewInbox = "overviewInbox", - overviewGeneral = "overviewGeneral", - readViewOpen = "readViewOpen", - readViewClose = "readViewClose", - keyViewOpen = "keyViewOpen", - keyViewClose = "keyViewClose", - sendViewOpen = "sendViewOpen", - sendViewClose = "sendViewClose", - contactViewOpen = "contactViewOpen", - contactViewClose = "contactViewClose", - badgeCaseViewOpen = "badgeCaseViewOpen", - badgeCaseViewClose = "badgeCaseViewClose", - pubKeyDiscoveryNewKey = "pubKeyDiscoveryNewKey", - pubKeyDiscoveryKnownKey = "pubKeyDiscoveryKnownKey", - pubKeyVerification = "pubKeyVerification", - indicatorButtonOpen = "indicatorButtonOpen", - indicatorButtonClose = "indicatorButtonClose", - showBrokenMail = "showBrokenMail", - reactButtonTapped = "reactButtonTapped", - createDraft = "createDraft", - exportKeyViewOpen = "exportKeyViewOpen", - exportKeyViewButtonTap = "exportKeyViewButtonTap", - exportKeyViewClose = "exportKeyViewClose", - importPrivateKeyPopupOpen = "importPrivateKeyPopupOpen", - importPrivateKeyPopupClose = "importPrivateKeyPopupClose", - importPrivateKey = "importPrivateKey", - search = "search", - gotBitcoinMail = "gotBitcoinMail", - onboardingPageTransition = "onboardingPageTransition", - onboardingState = "onboardingState" + mailSent = "mailSent", + mailDeletedPersistent = "mailDeletedPersistent", + mailDeletedToTrash = "mailDeletedToTrash", + mailArchived = "mailArchived", + mailReceived = "mailReceived", + setupStudy = "setupStudy", + appStart = "appStart", + appTerminate = "appTerminate", + appBackground = "appBackground", + overviewInbox = "overviewInbox", + overviewGeneral = "overviewGeneral", + readViewOpen = "readViewOpen", + readViewClose = "readViewClose", + keyViewOpen = "keyViewOpen", + keyViewClose = "keyViewClose", + sendViewOpen = "sendViewOpen", + sendViewClose = "sendViewClose", + contactViewOpen = "contactViewOpen", + contactViewClose = "contactViewClose", + badgeCaseViewOpen = "badgeCaseViewOpen", + badgeCaseViewClose = "badgeCaseViewClose", + pubKeyDiscoveryNewKey = "pubKeyDiscoveryNewKey", + pubKeyDiscoveryKnownKey = "pubKeyDiscoveryKnownKey", + pubKeyVerification = "pubKeyVerification", + indicatorButtonOpen = "indicatorButtonOpen", + indicatorButtonClose = "indicatorButtonClose", + showBrokenMail = "showBrokenMail", + reactButtonTapped = "reactButtonTapped", + createDraft = "createDraft", + exportKeyViewOpen = "exportKeyViewOpen", + exportKeyViewButtonTap = "exportKeyViewButtonTap", + exportKeyViewClose = "exportKeyViewClose", + importPrivateKeyPopupOpen = "importPrivateKeyPopupOpen", + importPrivateKeyPopupClose = "importPrivateKeyPopupClose", + importPrivateKey = "importPrivateKey", + search = "search", + gotBitcoinMail = "gotBitcoinMail", + onboardingPageTransition = "onboardingPageTransition", + onboardingState = "onboardingState" } diff --git a/enzevalos_iphone/Mail.swift b/enzevalos_iphone/Mail.swift index 6a8b57ccd0a91b9afaab5f0ec8be4035c87636af..b119001a2880a021e1febba68c72cd62774e7d75 100644 --- a/enzevalos_iphone/Mail.swift +++ b/enzevalos_iphone/Mail.swift @@ -18,7 +18,7 @@ public protocol Mail: Comparable { var subject: String? { get } var body: String? { get } var uid: UInt64 { get } - var predecessor: PersistentMail?{get} + var predecessor: PersistentMail? { get } } public func == <T: Mail> (lhs: T, rhs: T) -> Bool { diff --git a/enzevalos_iphone/MailAddress.swift b/enzevalos_iphone/MailAddress.swift index 7e82185023d3d544eab43bd27d151726ec14918c..b389dfdc7d6ed6cec4df973b0ff828e6bc81c1a5 100644 --- a/enzevalos_iphone/MailAddress.swift +++ b/enzevalos_iphone/MailAddress.swift @@ -15,9 +15,9 @@ public enum EncState { case NOPREFERENCE case RESET case NOAUTOCRYPT - - - static func find(i: Int) -> EncState{ + + + static func find(i: Int) -> EncState { switch i { case 0: return EncState.MUTAL @@ -33,9 +33,9 @@ public enum EncState { return EncState.NOAUTOCRYPT } } - - func canEnc() -> Bool{ - + + func canEnc() -> Bool { + switch self { case EncState.MUTAL: return true @@ -47,7 +47,7 @@ public enum EncState { return false } } - func asInt()-> Int16{ + func asInt() -> Int16 { switch self { case EncState.MUTAL: return 0 @@ -65,13 +65,13 @@ public enum EncState { } public protocol MailAddress { - var mailAddress:String{get} - var label: CNLabeledValue<NSString>{get} //FIXME: ist der NSString hier wirklich richtig? (http://stackoverflow.com/questions/39648830/how-to-add-new-email-to-cnmutablecontact-in-swift-3) - // var prefEnc: EncState{get set} - var hasKey: Bool{get} - - var primaryKey: PersistentKey?{get} - var publicKeys: Set<PersistentKey>{get} - var contact: EnzevalosContact?{get} + var mailAddress: String { get } + var label: CNLabeledValue<NSString> { get } //FIXME: ist der NSString hier wirklich richtig? (http://stackoverflow.com/questions/39648830/how-to-add-new-email-to-cnmutablecontact-in-swift-3) + // var prefEnc: EncState{get set} + var hasKey: Bool { get } + + var primaryKey: PersistentKey? { get } + var publicKeys: Set<PersistentKey> { get } + var contact: EnzevalosContact? { get } } diff --git a/enzevalos_iphone/MailHandlerDelegator.swift b/enzevalos_iphone/MailHandlerDelegator.swift index 2d920f9dcb7ed886803c7503e19fac92ed642054..6be14b3baf54a8e2354fcd1a39cf1e071b3c38bd 100644 --- a/enzevalos_iphone/MailHandlerDelegator.swift +++ b/enzevalos_iphone/MailHandlerDelegator.swift @@ -9,7 +9,7 @@ import Foundation protocol MailHandlerDelegator { - + func addNewMail(_ mail: PersistentMail) func getMailCompleted() } diff --git a/enzevalos_iphone/Mail_Address+CoreDataClass.swift b/enzevalos_iphone/Mail_Address+CoreDataClass.swift index 841e70691bd18b24ec2c07484d0e0444d9e7915d..49df958e639d9b12687744b7ac32c3399ca54b5e 100644 --- a/enzevalos_iphone/Mail_Address+CoreDataClass.swift +++ b/enzevalos_iphone/Mail_Address+CoreDataClass.swift @@ -13,11 +13,11 @@ import Contacts @objc(Mail_Address) open class Mail_Address: NSManagedObject, MailAddress { - - public var primaryKey: PersistentKey?{ - get{ - if hasKey{ - for key in publicKeys{ + + public var primaryKey: PersistentKey? { + get { + if hasKey { + for key in publicKeys { if key.keyID == primaryKeyID { return key } @@ -26,25 +26,25 @@ open class Mail_Address: NSManagedObject, MailAddress { return nil } } - - open var publicKeys: Set<PersistentKey>{ - get{ - if let pks = keys{ - if let publicKeys = pks as? Set<PersistentKey>{ + + open var publicKeys: Set<PersistentKey> { + get { + if let pks = keys { + if let publicKeys = pks as? Set<PersistentKey> { return publicKeys } } return Set<PersistentKey>() } } - - + + open var mailAddress: String { return address.lowercased() } - open var label: CNLabeledValue<NSString> { + open var label: CNLabeledValue<NSString> { if let cnc = self.contact?.cnContact { for adr in cnc.emailAddresses { if adr.value as String == address { @@ -56,9 +56,9 @@ open class Mail_Address: NSManagedObject, MailAddress { } - + open var hasKey: Bool { - if publicKeys.count > 0{ + if publicKeys.count > 0 { return true } return false diff --git a/enzevalos_iphone/Mail_Address+CoreDataProperties.swift b/enzevalos_iphone/Mail_Address+CoreDataProperties.swift index 19fe2dcb991e8bcd1d82c20003483fb412e75a52..8d74a89a15896d67c9151554ffed0243cd18e09c 100644 --- a/enzevalos_iphone/Mail_Address+CoreDataProperties.swift +++ b/enzevalos_iphone/Mail_Address+CoreDataProperties.swift @@ -17,7 +17,7 @@ extension Mail_Address { } @NSManaged public var address: String - @NSManaged public var contact: EnzevalosContact? + @NSManaged public var contact: EnzevalosContact? @NSManaged public var bcc: NSSet? @NSManaged public var cc: NSSet? @NSManaged public var from: NSSet? @@ -34,68 +34,68 @@ extension Mail_Address { // MARK: Generated accessors for bcc extension Mail_Address { - + @objc(addBccObject:) @NSManaged public func addToBcc(_ value: PersistentMail) - + @objc(removeBccObject:) @NSManaged public func removeFromBcc(_ value: PersistentMail) - + @objc(addBcc:) @NSManaged public func addToBcc(_ values: NSSet) - + @objc(removeBcc:) @NSManaged public func removeFromBcc(_ values: NSSet) - + } // MARK: Generated accessors for cc extension Mail_Address { - + @objc(addCcObject:) @NSManaged public func addToCc(_ value: PersistentMail) - + @objc(removeCcObject:) @NSManaged public func removeFromCc(_ value: PersistentMail) - + @objc(addCc:) @NSManaged public func addToCc(_ values: NSSet) - + @objc(removeCc:) @NSManaged public func removeFromCc(_ values: NSSet) - + } // MARK: Generated accessors for to extension Mail_Address { - + @objc(addToObject:) @NSManaged public func addToTo(_ value: PersistentMail) - + @objc(removeToObject:) @NSManaged public func removeFromTo(_ value: PersistentMail) - + @objc(addTo:) @NSManaged public func addToTo(_ values: NSSet) - + @objc(removeTo:) @NSManaged public func removeFromTo(_ values: NSSet) - + } // MARK: Generated accessors for key extension Mail_Address { - + @objc(addKeysObject:) @NSManaged public func addToKeys(_ value: PersistentKey) - + @objc(removeKeysObject:) @NSManaged public func removeFromKeys(_ value: PersistentKey) - + @objc(addKeys:) @NSManaged public func addToKeys(_ values: NSSet) - + @objc(removeKeys:) @NSManaged public func removeFromKeys(_ values: NSSet) - + } diff --git a/enzevalos_iphone/PersistentKey+CoreDataClass.swift b/enzevalos_iphone/PersistentKey+CoreDataClass.swift index 0bc7eadb61fab350d46ac5a34e66ce5acff9acf0..fe2293514c39403aa22632561ed1b1f284cda493 100644 --- a/enzevalos_iphone/PersistentKey+CoreDataClass.swift +++ b/enzevalos_iphone/PersistentKey+CoreDataClass.swift @@ -1,6 +1,6 @@ // // PersistentKey+CoreDataClass.swift -// +// // // Created by Oliver Wiese on 27.09.17. // @@ -11,41 +11,41 @@ import CoreData @objc(PersistentKey) public class PersistentKey: NSManagedObject { - + open var prefEnc: EncState { - get{ + get { return prefer_encryption } - set{ + set { prefer_encryption = newValue } } - - var counterSignedMails: Int{ - if let signedMails = self.signedMails{ + + var counterSignedMails: Int { + if let signedMails = self.signedMails { return signedMails.count } return 0 } - - func verify(){ + + func verify() { self.verifiedDate = Date.init() } - - func isVerified() -> Bool{ + + func isVerified() -> Bool { return self.verifiedDate != nil } - - func isExpired()-> Bool{ + + func isExpired() -> Bool { let pgp = SwiftPGP() - if let key = pgp.loadKey(id: self.keyID){ - if let expire = key.expirationDate{ + if let key = pgp.loadKey(id: self.keyID) { + if let expire = key.expirationDate { return expire < Date.init() } - return false + return false } return true } - - + + } diff --git a/enzevalos_iphone/PersistentMail +CoreDataProperties.swift b/enzevalos_iphone/PersistentMail +CoreDataProperties.swift index 4636ab69d4e577c95223f408025e0cb6dcfcbc1e..2c16b0debdde4b9901a9a3ff3618d5144a8a2669 100644 --- a/enzevalos_iphone/PersistentMail +CoreDataProperties.swift +++ b/enzevalos_iphone/PersistentMail +CoreDataProperties.swift @@ -23,21 +23,21 @@ extension PersistentMail { @NSManaged public var secretKey: String? @NSManaged public var record: KeyRecord? - public var flag: MCOMessageFlag{ + public var flag: MCOMessageFlag { set { - if newValue != flag{ + if newValue != flag { AppDelegate.getAppDelegate().mailHandler.addFlag(self.uid, flags: newValue, folder: folder.name) self.willChangeValue(forKey: "flag") self.setPrimitiveValue(newValue.rawValue, forKey: "flag") self.didChangeValue(forKey: "flag") - + } - + } get { self.willAccessValue(forKey: "flag") var value = MCOMessageFlag().rawValue - if let flagInt = self.primitiveValue(forKey: "flag"){ + if let flagInt = self.primitiveValue(forKey: "flag") { value = flagInt as! Int } let text = MCOMessageFlag(rawValue: value) @@ -55,32 +55,32 @@ extension PersistentMail { @NSManaged public var firstKey: PersistentKey? @NSManaged public var signedKey: PersistentKey? @NSManaged public var received: Bool - + @NSManaged public var gmailMessageID: NSNumber? @NSManaged public var gmailThreadID: NSNumber? @NSManaged public var messageID: String? @NSManaged public var notLoadedMessages: String? - + @NSManaged public var xMailer: String? - - public var keyID: String?{ + + public var keyID: String? { set { self.willChangeValue(forKey: "keyID") self.setPrimitiveValue(newValue, forKey: "keyID") self.didChangeValue(forKey: "keyID") } get { - var signKeyID: String? - if let k = self.signedKey{ + var signKeyID: String? + if let k = self.signedKey { signKeyID = k.keyID } self.willAccessValue(forKey: "keyID") - if let text = self.primitiveValue(forKey: "keyID"){ + if let text = self.primitiveValue(forKey: "keyID") { signKeyID = text as? String } - else{ - if let id = signKeyID{ + else { + if let id = signKeyID { self.setPrimitiveValue(id, forKey: "keyID") } } @@ -88,9 +88,9 @@ extension PersistentMail { return signKeyID } } - - - public var trouble: Bool{ + + + public var trouble: Bool { set { self.willChangeValue(forKey: "trouble") self.setPrimitiveValue(newValue, forKey: "trouble") @@ -102,9 +102,9 @@ extension PersistentMail { self.didAccessValue(forKey: "trouble") return text } - + } - public var uid: UInt64{ + public var uid: UInt64 { set { self.willChangeValue(forKey: "uid") self.setPrimitiveValue(NSDecimalNumber.init(value: newValue as UInt64), forKey: "uid") @@ -117,9 +117,9 @@ extension PersistentMail { return text! } } - public var uidvalidity: UInt32?{ + public var uidvalidity: UInt32? { set { - if let num = newValue{ + if let num = newValue { self.willChangeValue(forKey: "uidvalidity") self.setPrimitiveValue(NSDecimalNumber.init(value: num as UInt32), forKey: "uidvalidity") self.didChangeValue(forKey: "uidvalidity") @@ -132,12 +132,12 @@ extension PersistentMail { return text } } - public var from: MailAddress{ + public var from: MailAddress { set { - if newValue is Mail_Address{ + if newValue is Mail_Address { let adr = newValue as! Mail_Address self.willChangeValue(forKey: "from") - self.setValue(adr, forKey: "from" ) + self.setValue(adr, forKey: "from") self.didChangeValue(forKey: "from") } } @@ -151,43 +151,43 @@ extension PersistentMail { return Mail_Address() } } - public var containsSecretKey: Bool{ - get{ + public var containsSecretKey: Bool { + get { return secretKey != nil } } - - private func extractPassword(body: String)-> String?{ + + private func extractPassword(body: String) -> String? { var pw: String? = nil var keyword: String? = nil - if body.contains("PW:"){ + if body.contains("PW:") { keyword = "PW:" } - else if body.contains("pw:"){ + else if body.contains("pw:") { keyword = "pw:" } - else if body.contains("password:"){ + else if body.contains("password:") { keyword = "password:" } - if let key = keyword{ - if let range = (body.range(of: key)?.upperBound){ + if let key = keyword { + if let range = (body.range(of: key)?.upperBound) { pw = String(body[range...]) - if let split = pw?.components(separatedBy: CharacterSet.whitespacesAndNewlines){ - if split.count > 0 && split[0].count > 0{ + if let split = pw?.components(separatedBy: CharacterSet.whitespacesAndNewlines) { + if split.count > 0 && split[0].count > 0 { pw = split[0] } - else if split.count > 1{ + else if split.count > 1 { pw = split[1] } } } } return pw - + } - - public func processSecretKey(pw: String?) throws -> Bool{ - if let sk = secretKey{ + + public func processSecretKey(pw: String?) throws -> Bool { + if let sk = secretKey { let pgp = SwiftPGP() let keyIDs = try pgp.importKeys(key: sk, pw: pw, isSecretKey: true, autocrypt: false) let sks = DataHandler.handler.newSecretKeys(keyIds: keyIDs, addPKs: true) @@ -195,7 +195,7 @@ extension PersistentMail { } return false } - + @NSManaged public var bcc: NSSet? @NSManaged public var cc: NSSet? @NSManaged public var to: NSSet @@ -257,34 +257,34 @@ extension PersistentMail { // MARK: Generated accessors for attachments extension PersistentMail { - + @objc(addAttachmentsObject:) @NSManaged public func addToAttachments(_ value: Attachment) - + @objc(removeAttachmentsObject:) @NSManaged public func removeFromAttachments(_ value: Attachment) - + @objc(addAttachments:) @NSManaged public func addToAttachments(_ values: NSSet) - + @objc(removeAttachments:) @NSManaged public func removeFromAttachments(_ values: NSSet) - + } // MARK: Generated accessors for attachments extension PersistentMail { - + @objc(addReferenceMailsObject:) @NSManaged public func addToReferenceMails(_ value: PersistentMail) - + @objc(removeReferenceMailsObject:) @NSManaged public func removeFromReferenceMails(_ value: PersistentMail) - + @objc(addReferenceMails:) @NSManaged public func addToReferenceMails(_ values: NSSet) - + @objc(removeReferenceMails:) @NSManaged public func removeFromReferenceMails(_ values: NSSet) - + } diff --git a/enzevalos_iphone/QRCodeGenerator.swift b/enzevalos_iphone/QRCodeGenerator.swift index 385d667746cb550b4e7789516d8e29645022c9b3..aa5a2291a506a261efefded6c19a31aef3dc86fd 100644 --- a/enzevalos_iphone/QRCodeGenerator.swift +++ b/enzevalos_iphone/QRCodeGenerator.swift @@ -10,18 +10,18 @@ import Foundation class QRCode { - + static func generate(input: String) -> CIImage { var qrCode: CIImage - + let data = input.data(using: String.Encoding.isoLatin1) let filter = CIFilter(name: "CIQRCodeGenerator")! - + filter.setValue(data, forKey: "inputMessage") filter.setValue("M", forKey: "inputCorrectionLevel") - + qrCode = filter.outputImage! - + return qrCode } } diff --git a/enzevalos_iphone/QRScannerView.swift b/enzevalos_iphone/QRScannerView.swift index 3970df3704a4d06963638c33957ba5c41c768101..8bc7e05dc0da063c357646020aa84b8b10e0806b 100644 --- a/enzevalos_iphone/QRScannerView.swift +++ b/enzevalos_iphone/QRScannerView.swift @@ -114,7 +114,7 @@ class QRScannerView: ViewControllerPannable, AVCaptureMetadataOutputObjectsDeleg @IBAction func close(_ sender: Any) { // Logger.queue.async(flags: .barrier) { - Logger.log(verify: self.keyId ?? "noKeyID", open: false, success: false) + Logger.log(verify: self.keyId ?? "noKeyID", open: false, success: false) // } dismiss(animated: true, completion: nil) } @@ -165,15 +165,15 @@ class QRScannerView: ViewControllerPannable, AVCaptureMetadataOutputObjectsDeleg DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.5) { let alert = UIAlertController(title: NSLocalizedString("fingerprintMissmatchShort", comment: "Found fingerprint does not match"), message: NSLocalizedString("fingerprintMissmatchText", comment: "Found fingerprint does not match"), preferredStyle: .alert) alert.addAction(UIAlertAction(title: NSLocalizedString("MoreInformation", comment: "More Information"), style: .default, handler: { - (action: UIAlertAction!) -> Void in - UIApplication.shared.openURL(URL(string: "https://userpage.fu-berlin.de/letterbox/faq.html#headingWrongFingerprint")!) - self.dismiss(animated: false, completion: nil) - })) + (action: UIAlertAction!) -> Void in + UIApplication.shared.openURL(URL(string: "https://userpage.fu-berlin.de/letterbox/faq.html#headingWrongFingerprint")!) + self.dismiss(animated: false, completion: nil) + })) alert.addAction(UIAlertAction(title: NSLocalizedString("scanDifferentCode", comment: ""), style: .default, handler: { - (action: UIAlertAction!) -> Void in - self.qrCodeFrameView?.path = nil - self.captureSession?.startRunning() - })) + (action: UIAlertAction!) -> Void in + self.qrCodeFrameView?.path = nil + self.captureSession?.startRunning() + })) alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "Cancel"), style: .cancel, handler: { (action: UIAlertAction!) -> Void in self.dismiss(animated: true, completion: nil) })) self.present(alert, animated: true, completion: nil) } diff --git a/enzevalos_iphone/ReadViewController.swift b/enzevalos_iphone/ReadViewController.swift index 3b49cd96035db8a46b87413bef4ef5f26e3d6c77..51f1c63ffb1c04b0b913ba75ceb26c0239094187 100644 --- a/enzevalos_iphone/ReadViewController.swift +++ b/enzevalos_iphone/ReadViewController.swift @@ -131,7 +131,7 @@ class ReadViewController: UITableViewController { } textDelegate = ReadTextDelegate() - textDelegate?.callback = {[weak self] (address: String) in self?.newMailCallback(Address: address)} + textDelegate?.callback = { [weak self] (address: String) in self?.newMailCallback(Address: address) } messageBody.delegate = textDelegate diff --git a/enzevalos_iphone/Record.swift b/enzevalos_iphone/Record.swift index 8484dfbf50290c9b5d26e202b3278f6a478a0a98..77a4305498fd7d64fd0ccb4ed522cf625cf554b4 100644 --- a/enzevalos_iphone/Record.swift +++ b/enzevalos_iphone/Record.swift @@ -12,7 +12,7 @@ import UIKit public protocol Record: Comparable { - + var name: String { get } var hasKey: Bool { get } var isVerified: Bool { get } diff --git a/enzevalos_iphone/SendViewController+Invitation.swift b/enzevalos_iphone/SendViewController+Invitation.swift index 02031a883ff0f88c5dfdbec69630f8fed8c37a29..8bc8d22915f8459593154f5d580bf787fd4d63fc 100644 --- a/enzevalos_iphone/SendViewController+Invitation.swift +++ b/enzevalos_iphone/SendViewController+Invitation.swift @@ -20,12 +20,12 @@ struct InvitationSelection { extension SendViewController { - var isCensored: Bool{ - get{ + var isCensored: Bool { + get { return StudySettings.invitationsmode == InvitationMode.Censorship } } - + func htmlMessage() -> (html: String?, textparts: Int, plaintext: String?) { var htmlName = "invitationText" if isCensored { @@ -49,8 +49,8 @@ extension SendViewController { let cipherText = SwiftPGP().symmetricEncrypt(textToEncrypt: [textsToEncrypt.joined(separator: "\n")], armored: true, password: nil) let texts = textsToEncrypt.map { _ -> String in // Change text in mail body - if isCensored{ - return String(repeating: "█" as String as String, count: (Int(arc4random_uniform(7)+3))) + if isCensored { + return String(repeating: "█" as String as String, count: (Int(arc4random_uniform(7) + 3))) } return String.random(length: 10) } @@ -62,7 +62,7 @@ extension SendViewController { } var link = "http://letterbox.imp.fu-berlin.de?text=\(urlTexts)&cipher=\(cipher)&id=\(StudySettings.studyID)&invitation=Enc" - if isCensored{ + if isCensored { link = "http://letterbox.imp.fu-berlin.de?id=\(StudySettings.studyID)&invitation=Censor" } @@ -71,41 +71,41 @@ extension SendViewController { } for (index, range) in locations.enumerated() { - if isCensored{ + if isCensored { let t = text as NSString text = t.replacingCharacters(in: range, with: texts[index]) plainText = (plainText as NSString).replacingCharacters(in: range, with: texts[index]) } - else{ + 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 } var previousText = "" - - if let range = text.range(of: NSLocalizedString("Mail.Signature", comment: "")){ + + 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){ + + 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) } - + plainText = plainText + plainFooter + "\n\n" + previousText - + return (String(format: htmlString, text, link, link, previousText), texts.count, nil) } @@ -129,19 +129,19 @@ extension SendViewController { guard selectedRange != nil else { let labelTitel: String switch StudySettings.invitationsmode { - case .Censorship : labelTitel = NSLocalizedString("Invitation.Encrypt.Censor", comment: "") - case .PasswordEnc : labelTitel = NSLocalizedString("Invitation.Encrypt", comment: "") - case .FreeText, - .InviteMail : return nil + case .Censorship: labelTitel = NSLocalizedString("Invitation.Encrypt.Censor", comment: "") + case .PasswordEnc: labelTitel = NSLocalizedString("Invitation.Encrypt", comment: "") + case .FreeText, + .InviteMail: return nil } return [UIMenuItem(title: labelTitel, action: #selector(self.markSelectedText))] } let labelTitel: String switch StudySettings.invitationsmode { - case .Censorship : labelTitel = NSLocalizedString("Invitation.Decrypt.Censor", comment: "") - case .PasswordEnc : labelTitel = NSLocalizedString("Invitation.Decrypt", comment: "") + case .Censorship: labelTitel = NSLocalizedString("Invitation.Decrypt.Censor", comment: "") + case .PasswordEnc: labelTitel = NSLocalizedString("Invitation.Decrypt", comment: "") case .FreeText, - .InviteMail : return nil + .InviteMail: return nil } return [UIMenuItem(title: labelTitel, action: #selector(self.unmarkSelectedText))] } @@ -216,12 +216,12 @@ extension SendViewController { controller?.ctaAction = { controller?.hideDialog(completion: nil) switch StudySettings.invitationsmode { - case .FreeText: - self.performSegue(withIdentifier: "inviteSegueStudy", sender: nil) - return - case .InviteMail: - self.performSegue(withIdentifier: "inviteSegue", sender: nil) - return + case .FreeText: + self.performSegue(withIdentifier: "inviteSegueStudy", sender: nil) + return + case .InviteMail: + self.performSegue(withIdentifier: "inviteSegue", sender: nil) + return case .Censorship, .PasswordEnc: return } @@ -367,7 +367,7 @@ extension SendViewController: UITextViewDelegate { func textViewDidBeginEditing(_ textView: UITextView) { self.updateMarkedText(for: textView) } - + func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { self.textChanged(inRange: range, with: text) diff --git a/enzevalos_iphone/SendViewState.swift b/enzevalos_iphone/SendViewState.swift index 324412be06cd6999f6dca7af00dcba6cc15f53c4..945a103325e87d3bb6b758a431ed0b25197ae09c 100644 --- a/enzevalos_iphone/SendViewState.swift +++ b/enzevalos_iphone/SendViewState.swift @@ -14,18 +14,18 @@ enum SendViewContactSecurityState { enum SendViewMailSecurityState: Equatable { case letter, postcard, extendedPostcard(SendViewSpecialMailState) - + var rawValue: Int { get { switch self { - case .letter: return 0 - case .postcard: return 1 - case .extendedPostcard(_): return 2 + case .letter: return 0 + case .postcard: return 1 + case .extendedPostcard(_): return 2 } } } - - static func ==(lhs:SendViewMailSecurityState, rhs:SendViewMailSecurityState) -> Bool { + + static func == (lhs: SendViewMailSecurityState, rhs: SendViewMailSecurityState) -> Bool { return lhs.rawValue == rhs.rawValue } } diff --git a/enzevalos_iphone/StringExtension.swift b/enzevalos_iphone/StringExtension.swift index 8786773bdd1bb3f1bb80620292beee60fbba6961..079eff15d84f58d989b466ebd41e1979527d2c3b 100644 --- a/enzevalos_iphone/StringExtension.swift +++ b/enzevalos_iphone/StringExtension.swift @@ -8,10 +8,10 @@ import Foundation extension String { - + static func random(length: Int = 20) -> String { var randomBytes = Data(count: length) - + let result = randomBytes.withUnsafeMutableBytes { SecRandomCopyBytes(kSecRandomDefault, length, $0) } diff --git a/enzevalos_iphone/StudySettings.swift b/enzevalos_iphone/StudySettings.swift index 5cda1753bc6df3d9117c92968577779adfe2f7a9..5f7f06edfa637d7791fc4de7f634f43791dd97b9 100644 --- a/enzevalos_iphone/StudySettings.swift +++ b/enzevalos_iphone/StudySettings.swift @@ -12,9 +12,9 @@ import KeychainAccess enum StudyParamter: Int { case Warning = 0 case Invitation = 1 - - var name: String{ - get{ + + var name: String { + get { switch self { case .Warning: return "warning" @@ -23,10 +23,10 @@ enum StudyParamter: Int { } } } - + var keyName: String { - get{ - switch self { + get { + switch self { case .Warning: return "hideWarnings" case .Invitation: @@ -35,7 +35,7 @@ enum StudyParamter: Int { } } var numberOfTreatments: UInt32 { - get{ + get { switch self { case .Warning: return 2 @@ -57,8 +57,8 @@ class StudySettings { static var studyMode = true static var presentFirstQuestionaireMail = false static let parameters = [StudyParamter.Invitation] - - public static var invitationEnabled: Bool{ + + public static var invitationEnabled: Bool { get { return true } @@ -93,39 +93,39 @@ class StudySettings { keychain["bitcoin"] = "true" UserDefaults.standard.set(true, forKey: "bitcoin") // Logger.queue.async(flags: .barrier) { - Logger.log(bitcoinMail: true) + Logger.log(bitcoinMail: true) // } } } } - - static var invitationsmode: InvitationMode{ - get{ + + static var invitationsmode: InvitationMode { + get { return UserManager.loadInvitationMode() let value = UserDefaults.standard.integer(forKey: StudyParamter.Invitation.keyName) - if let mode = InvitationMode.init(rawValue: value){ + if let mode = InvitationMode.init(rawValue: value) { return mode } return InvitationMode.InviteMail } } - - - private static var studyParameters: [StudyParamter:Int]{ - get{ + + + private static var studyParameters: [StudyParamter: Int] { + get { let keychain = Keychain(service: "Enzevalos/Study") var studyParamters = [StudyParamter: Int]() - for parameter in parameters{ + for parameter in parameters { var value: Int? if let state = keychain[parameter.keyName], let num = Int(state) { value = num } else { value = Int(arc4random_uniform(parameter.numberOfTreatments)) - if let value = value{ + if let value = value { keychain[parameter.keyName] = String(value) } } - if let v = value{ + if let v = value { UserDefaults.standard.set(v, forKey: parameter.keyName) studyParamters[parameter] = v } @@ -133,8 +133,8 @@ class StudySettings { return studyParamters } } - - + + static func setupStudy() { if !studyMode { //Logger.logging = false @@ -154,7 +154,7 @@ class StudySettings { keychain["studyID"] = studyID UserDefaults.standard.set(studyID, forKey: "studyID") } - + if let bitcoin = keychain["bitcoin"] { //do we received a mail from bitcoin.de? UserDefaults.standard.set(Bool(bitcoin) ?? false, forKey: "bitcoin") } else { @@ -162,12 +162,12 @@ class StudySettings { UserDefaults.standard.set(false, forKey: "bitcoin") } let parameters = studyParameters - - + + // Logger.queue.async(flags: .barrier) { Logger.log(setupStudy: parameters, alreadyRegistered: !presentFirstQuestionaireMail) // } - + } //create local mail for first interview here static func firstMail() { @@ -176,7 +176,7 @@ class StudySettings { } let subject = "Herzlich Willkommen in Letterbox" let body = - """ + """ Liebe Teilnehmerin, lieber Teilnehmer, Herzlichen Glückwunsch! Sie haben Letterbox erfolgreich installiert. @@ -200,14 +200,14 @@ class StudySettings { """ mailToParticipat(subject: subject, body: body) } - + static func givecards() { if !studyMode || !presentFirstQuestionaireMail { return } let subject = "Teilnahmeentschädigung: Verlosung von Amazon-Gutscheinen" let body = - """ + """ Liebe Teilnehmerin, lieber Teilnehmer, unter den teilnehmenden Personen werden 20 Amazon-Gutscheine im Wert von jeweils 50 Euro verlost. @@ -225,31 +225,31 @@ class StudySettings { PS: Diese Nachricht wurde automatisch in Letterbox erzeugt und ist nur hier gespeichert. """ - + mailToParticipat(subject: subject, body: body) } - - - private static func mailToParticipat(subject: String, body: String){ + + + private static func mailToParticipat(subject: String, body: String) { let senderAdr = SUPPORT_MAIL_ADR let sender = MCOAddress.init(displayName: "Letterbox-Team", mailbox: senderAdr) var keyID: String? - if let addr = DataHandler.handler.findMailAddress(adr: senderAdr){ - if let pk = addr.primaryKey{ + if let addr = DataHandler.handler.findMailAddress(adr: senderAdr) { + if let pk = addr.primaryKey { keyID = pk.keyID } } let cryptoObject = CryptoObject(chiphertext: nil, plaintext: body, decryptedData: body.data(using: .utf8), sigState: SignatureState.ValidSignature, encState: EncryptionState.ValidedEncryptedWithCurrentKey, signKey: keyID, encType: CryptoScheme.PGP, signedAdrs: [senderAdr]) - + _ = DataHandler.handler.createMail(0, sender: sender, receivers: [], cc: [], time: Date(), received: false, subject: subject, body: body, flags: MCOMessageFlag.init(rawValue: 0), record: nil, autocrypt: nil, decryptedData: cryptoObject, folderPath: UserManager.backendInboxFolderPath, secretKey: nil) } - - - + + + public static func setupStudyKeys() { if studyMode || Logger.logging { setupStudyPublicKeys() } } - + } diff --git a/enzevalos_iphone/SubBadgeTableViewCell.swift b/enzevalos_iphone/SubBadgeTableViewCell.swift index c21d1128cc45319e0dbbcfdb45c2f71620fa19ec..34fd8861b985ef9c6fb4524b2386458d10cf6de1 100755 --- a/enzevalos_iphone/SubBadgeTableViewCell.swift +++ b/enzevalos_iphone/SubBadgeTableViewCell.swift @@ -25,7 +25,7 @@ class SubBadgeTableViewCell: UITableViewCell { Displayed Badge */ @IBOutlet weak var badgeImage: UIImageView! - + // override func awakeFromNib() { diff --git a/enzevalos_iphone/SwiftPGP.swift b/enzevalos_iphone/SwiftPGP.swift index 2e98e1d1f48cb86b570520ba2286622232d0d74c..4fb88689c21efbc2275dca2f670dd0464a091a2c 100644 --- a/enzevalos_iphone/SwiftPGP.swift +++ b/enzevalos_iphone/SwiftPGP.swift @@ -10,7 +10,7 @@ import Foundation import Security import KeychainAccess -class SwiftPGP: Encryption{ +class SwiftPGP: Encryption { let cryptoScheme = CryptoScheme.PGP diff --git a/enzevalos_iphone/TableViewDataDelegate.swift b/enzevalos_iphone/TableViewDataDelegate.swift index 4732960d0663a0e1cefa0f6196d97fe73ffc2c0f..c5ab2fd5f6f1e5cebf4eeeda804c803b51e991e7 100644 --- a/enzevalos_iphone/TableViewDataDelegate.swift +++ b/enzevalos_iphone/TableViewDataDelegate.swift @@ -7,33 +7,33 @@ // -class TableViewDataDelegate : NSObject, UITableViewDelegate, UITableViewDataSource { - - var contacts : [String] = [] - var addresses : [String] = [] - var pictures : [UIImage?] = [] - var insertCallback : (String, String) -> Void = {(name : String, address : String) -> Void in return} - - init(insertCallback : @escaping (String, String) -> Void){ +class TableViewDataDelegate: NSObject, UITableViewDelegate, UITableViewDataSource { + + var contacts: [String] = [] + var addresses: [String] = [] + var pictures: [UIImage?] = [] + var insertCallback: (String, String) -> Void = { (name: String, address: String) -> Void in return } + + init(insertCallback: @escaping (String, String) -> Void) { self.insertCallback = insertCallback super.init() } - + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return contacts.count } - + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "contacts") as! ContactCell cell.name.text = contacts[indexPath.row] cell.address.text = addresses[indexPath.row] - cell.img.layer.cornerRadius = cell.img.frame.height/2 + cell.img.layer.cornerRadius = cell.img.frame.height / 2 cell.img.clipsToBounds = true cell.img.image = pictures[indexPath.row] if let img = pictures[indexPath.row] { cell.img.image = img } - + if !DataHandler.handler.hasKey(adr: cell.address.text!) { cell.name.textColor! = UIColor.orange cell.address.textColor! = UIColor.orange @@ -44,9 +44,9 @@ class TableViewDataDelegate : NSObject, UITableViewDelegate, UITableViewDataSour } return cell } - + func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.insertCallback(contacts[indexPath.row], addresses[indexPath.row]) } - + } diff --git a/enzevalos_iphone/TextFormatter.swift b/enzevalos_iphone/TextFormatter.swift index a638b3a5030c1f25e7d07b3a26aa4a0716481711..c51b050b226bdd4722c9bcdceba142bdbc0a1f1e 100644 --- a/enzevalos_iphone/TextFormatter.swift +++ b/enzevalos_iphone/TextFormatter.swift @@ -9,7 +9,7 @@ import Foundation class TextFormatter { - static func insertBeforeEveryLine(_ insertion: String, text: String) -> String{ + static func insertBeforeEveryLine(_ insertion: String, text: String) -> String { let textSep = text.components(separatedBy: "\n") var ret = "" for t in textSep { diff --git a/enzevalos_iphone/Theme.swift b/enzevalos_iphone/Theme.swift index 41babe37a2b6f9869731be3f6d7a9844f9792dd5..1470eb09d624a885a22197b823f375c0690a072c 100644 --- a/enzevalos_iphone/Theme.swift +++ b/enzevalos_iphone/Theme.swift @@ -12,7 +12,7 @@ let SelectedThemeKey = "security_indicator" //var defaultColor = UIColor.groupTableViewBackgroundColor() let defaultColor = ThemeManager.defaultColor -enum Theme: Int{ +enum Theme: Int { /* Our themes: No security indicators -> no different colors, symbols @@ -20,25 +20,25 @@ enum Theme: Int{ Strong security indicators -> weak + different colors Very strong security indicators -> strong + animation */ - case no_security_indicator, weak_security_indicator, strong_security_indicator, very_strong_security_indicator - - - var unencryptedMessageColor: UIColor{ - switch self { + case no_security_indicator, weak_security_indicator, strong_security_indicator, very_strong_security_indicator + + + var unencryptedMessageColor: UIColor { + switch self { case .no_security_indicator: return defaultColor case .weak_security_indicator: - return defaultColor + return defaultColor default: // orange // return UIColor(red: 247/255, green: 185/255, blue: 0/255, alpha: 1.0) - return UIColor(red: 255/255, green: 204/255, blue: 0/255, alpha: 1.0) + return UIColor(red: 255 / 255, green: 204 / 255, blue: 0 / 255, alpha: 1.0) } } - - var encryptedMessageColor: UIColor{ - switch self { + + var encryptedMessageColor: UIColor { + switch self { case .no_security_indicator: return defaultColor case .weak_security_indicator: @@ -46,24 +46,24 @@ enum Theme: Int{ default: // green // return UIColor(red: 115/255, green: 229/255, blue: 105/255, alpha: 1.0) - return UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1.0) + return UIColor(red: 76 / 255, green: 217 / 255, blue: 100 / 255, alpha: 1.0) } } - - var encryptedVerifiedMessageColor: UIColor{ - switch self { + + var encryptedVerifiedMessageColor: UIColor { + switch self { case .no_security_indicator: return defaultColor case .weak_security_indicator: return defaultColor default: // green - return UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1.0) + return UIColor(red: 76 / 255, green: 217 / 255, blue: 100 / 255, alpha: 1.0) } } - - var troubleMessageColor: UIColor{ - switch self { + + var troubleMessageColor: UIColor { + switch self { case .no_security_indicator: return defaultColor case .weak_security_indicator: @@ -71,14 +71,14 @@ enum Theme: Int{ default: // red // return UIColor(red: 255/255, green: 99/255, blue: 99/255, alpha: 1.0) - return UIColor(red: 255/255, green: 59/255, blue: 48/255, alpha: 1.0) - + return UIColor(red: 255 / 255, green: 59 / 255, blue: 48 / 255, alpha: 1.0) + } } } -struct ThemeManager{ +struct ThemeManager { static func currentTheme() -> Theme { if let storedTheme = (UserDefaults.standard.value(forKey: SelectedThemeKey) as? Int) { return Theme(rawValue: storedTheme)! @@ -86,32 +86,32 @@ struct ThemeManager{ return .very_strong_security_indicator } } - - static func unencryptedMessageColor() -> UIColor{ + + static func unencryptedMessageColor() -> UIColor { return currentTheme().unencryptedMessageColor - + } - static func encryptedMessageColor() -> UIColor{ + static func encryptedMessageColor() -> UIColor { return currentTheme().encryptedMessageColor } - - static func encryptedVerifiedMessageColor() -> UIColor{ + + static func encryptedVerifiedMessageColor() -> UIColor { return currentTheme().encryptedVerifiedMessageColor } - - static func troubleMessageColor() -> UIColor{ + + static func troubleMessageColor() -> UIColor { return currentTheme().troubleMessageColor } - + static func animation() -> Bool { - return currentTheme() == .very_strong_security_indicator + return currentTheme() == .very_strong_security_indicator } - + static func applyTheme(_ theme: Theme) { UserDefaults.standard.setValue(theme.rawValue, forKey: SelectedThemeKey) UserDefaults.standard.synchronize() } - - static var defaultColor: UIColor = UIColor(red: 249/255, green: 249/255, blue: 249/255, alpha: 1.0) + + static var defaultColor: UIColor = UIColor(red: 249 / 255, green: 249 / 255, blue: 249 / 255, alpha: 1.0) } diff --git a/enzevalos_iphone/UIViewResolver.swift b/enzevalos_iphone/UIViewResolver.swift index 3c5a7aeb7885d4c6f75ba3035eb1fd24413420ec..7572a175d1ca20bb9a9b2c5d869d1c42699c863c 100644 --- a/enzevalos_iphone/UIViewResolver.swift +++ b/enzevalos_iphone/UIViewResolver.swift @@ -8,10 +8,10 @@ import UIKit -enum UIViewResolver : Int { - case unknown=0, cancel, imageView, send, toText, toCollectionview, ccText, ccCollectionview, subjectText, textView, tableview, scrollview - - internal static func resolve(_ tag : Int) -> String{ +enum UIViewResolver: Int { + case unknown = 0, cancel, imageView, send, toText, toCollectionview, ccText, ccCollectionview, subjectText, textView, tableview, scrollview + + internal static func resolve(_ tag: Int) -> String { if let ui = UIViewResolver(rawValue: tag) { return String(describing: ui) } diff --git a/enzevalos_iphone/UserData.swift b/enzevalos_iphone/UserData.swift index c596df8cf958d2c3354fed9bf70a2a1aea082ef8..33849dbe7a73f5425cce617cadd9288e4a8a398c 100644 --- a/enzevalos_iphone/UserData.swift +++ b/enzevalos_iphone/UserData.swift @@ -171,7 +171,7 @@ struct UserManager { } } - static func loadImapAuthType() -> MCOAuthType{ + static func loadImapAuthType() -> MCOAuthType { if let auth = UserManager.loadUserValue(Attribute.imapAuthType) as? Int, auth != 0 { return MCOAuthType.init(rawValue: auth) } @@ -187,15 +187,15 @@ struct UserManager { static func loadUserSignature() -> String { if UserDefaults.standard.bool(forKey: "Signature.Switch"), let sig = UserDefaults.standard.string(forKey: "Signature.Text") { - return "\n\n______________________________\n\n\(sig.trimmingCharacters(in: .whitespacesAndNewlines))\n\n" + return "\n\n______________________________\n\n\(sig.trimmingCharacters(in: .whitespacesAndNewlines))\n\n" } return "" } - - static func loadInvitationMode()-> InvitationMode{ + + static func loadInvitationMode() -> InvitationMode { let mode = UserDefaults.standard.integer(forKey: "Invitation.Mode") - if let invitationmode = InvitationMode(rawValue: mode){ + if let invitationmode = InvitationMode(rawValue: mode) { return invitationmode } return InvitationMode.Censorship diff --git a/enzevalos_iphone/UserNameGamificationTableViewCell.swift b/enzevalos_iphone/UserNameGamificationTableViewCell.swift index 3129698095f95aeff9360e12d41b18299809738a..e6b83e5c66f781714d8d90e5f6bb2a75355e2471 100755 --- a/enzevalos_iphone/UserNameGamificationTableViewCell.swift +++ b/enzevalos_iphone/UserNameGamificationTableViewCell.swift @@ -16,7 +16,7 @@ class UserNameGamificationTableViewCell: UITableViewCell { @IBOutlet weak var mailLabel: UILabel! - + override func awakeFromNib() { super.awakeFromNib() // Initialization code diff --git a/enzevalos_iphone/VENDataDelegate.swift b/enzevalos_iphone/VENDataDelegate.swift index 12d070ead0d060dd242fbca798b467a630ee0ec2..bac44c20322558e7fcbf40b7cb37e9586eff5299 100644 --- a/enzevalos_iphone/VENDataDelegate.swift +++ b/enzevalos_iphone/VENDataDelegate.swift @@ -8,25 +8,25 @@ import VENTokenField -class VENDataDelegate : NSObject, VENTokenFieldDataSource , VENTokenFieldDelegate { - - var changeFunc: ((VENTokenField) -> Void) = {(_ : VENTokenField) -> Void in } - - var beginFunc: ((VENTokenField) -> Void) = {(_ : VENTokenField) -> Void in } - - var endFunc: ((VENTokenField) -> Void) = {(_ : VENTokenField) -> Void in } - - var deleteFunc: (() -> Void) = {() -> Void in } - +class VENDataDelegate: NSObject, VENTokenFieldDataSource, VENTokenFieldDelegate { + + var changeFunc: ((VENTokenField) -> Void) = { (_: VENTokenField) -> Void in } + + var beginFunc: ((VENTokenField) -> Void) = { (_: VENTokenField) -> Void in } + + var endFunc: ((VENTokenField) -> Void) = { (_: VENTokenField) -> Void in } + + var deleteFunc: (() -> Void) = { () -> Void in } + var tappedWhenSelectedFunc: ((String) -> Void)? = nil - + var editing = false - + override init() { super.init() } - - init(changeFunc: @escaping ((VENTokenField) -> Void), tappedWhenSelectedFunc: ((String) -> Void)?, beginFunc: @escaping ((VENTokenField) -> Void), endFunc: @escaping ((VENTokenField) -> Void), deleteFunc: @escaping (() -> Void)){ + + init(changeFunc: @escaping ((VENTokenField) -> Void), tappedWhenSelectedFunc: ((String) -> Void)?, beginFunc: @escaping ((VENTokenField) -> Void), endFunc: @escaping ((VENTokenField) -> Void), deleteFunc: @escaping (() -> Void)) { self.changeFunc = changeFunc self.tappedWhenSelectedFunc = tappedWhenSelectedFunc self.deleteFunc = deleteFunc @@ -34,30 +34,30 @@ class VENDataDelegate : NSObject, VENTokenFieldDataSource , VENTokenFieldDelegat self.endFunc = endFunc super.init() } - + func tokenField(_ tokenField: VENTokenField, didChangeText text: String?) { changeFunc(tokenField) } - + func tokenField(_ tokenField: VENTokenField, colorSchemeForTokenAt index: UInt) -> UIColor { let adr = tokenField.mailTokens[Int(index)] as! String var hasKey = false - if let madr = DataHandler.handler.findMailAddress(adr: adr){ + if let madr = DataHandler.handler.findMailAddress(adr: adr) { hasKey = madr.hasKey } if hasKey { - return UIColor.init(red: 0, green: 122.0/255.0, blue: 1, alpha: 1) + return UIColor.init(red: 0, green: 122.0 / 255.0, blue: 1, alpha: 1) } return UIColor.orange } - + func tokenFieldDidBeginEditing(_ tokenField: VENTokenField) { if !editing { editing = true beginFunc(tokenField) } } - + func tokenField(_ tokenField: VENTokenField, didEnterText text: String) { let text = text.lowercased() tokenField.textTokens.add(text) @@ -66,7 +66,7 @@ class VENDataDelegate : NSObject, VENTokenFieldDataSource , VENTokenFieldDelegat changeFunc(tokenField) tokenField.sendActions(for: UIControlEvents.editingDidEnd) } - + func tokenField(_ tokenField: VENTokenField, didEnterText text: String, mail email: String) { let email = email.lowercased() tokenField.textTokens.add(text) @@ -75,7 +75,7 @@ class VENDataDelegate : NSObject, VENTokenFieldDataSource , VENTokenFieldDelegat changeFunc(tokenField) tokenField.sendActions(for: UIControlEvents.editingDidEnd) } - + func tokenField(_ tokenField: VENTokenField, didDeleteTokenAt index: UInt) { tokenField.textTokens.removeObject(at: Int(index)) tokenField.mailTokens.removeObject(at: Int(index)) @@ -83,30 +83,30 @@ class VENDataDelegate : NSObject, VENTokenFieldDataSource , VENTokenFieldDelegat deleteFunc() tokenField.sendActions(for: UIControlEvents.editingDidEnd) } - + func tokenField(_ tokenField: VENTokenField, titleForTokenAt index: UInt) -> String { return tokenField.textTokens[Int(index)] as! String } - + func numberOfTokens(in tokenField: VENTokenField) -> UInt { return UInt((tokenField.textTokens.count)) } - + func tokenFieldCollapsedText(_ tokenField: VENTokenField) -> String { - var text : String = "names: " + var text: String = "names: " text.append(String(describing: tokenField.dataSource?.numberOfTokens!(in: tokenField))) return text } - + func tokenField(_ tokenField: VENTokenField, didChangeContentHeight height: CGFloat) { for c in tokenField.constraints { - if (c.identifier == "tokenFieldHeight"){ + if (c.identifier == "tokenFieldHeight") { c.constant = height } } } - - func tokenFieldDidEndEditing(_ tokenF: VENTokenField){ + + func tokenFieldDidEndEditing(_ tokenF: VENTokenField) { editing = false if let last = tokenF.inputText() { if last.replacingOccurrences(of: " ", with: "") != "" { @@ -116,7 +116,7 @@ class VENDataDelegate : NSObject, VENTokenFieldDataSource , VENTokenFieldDelegat endFunc(tokenF) } - func tokenField(_ tokenField: VENTokenField, didTappedTokenTwice index: UInt){ + func tokenField(_ tokenField: VENTokenField, didTappedTokenTwice index: UInt) { if let fun = tappedWhenSelectedFunc { fun(tokenField.mailTokens[Int(index)] as! String) } diff --git a/enzevalos_iphone/ViewControllerPannable.swift b/enzevalos_iphone/ViewControllerPannable.swift index ab516293f6aa3fe354c610b3321286d03f1b3e00..05caeb442e7f0a305adf08b6a748b41ee89f3cf5 100644 --- a/enzevalos_iphone/ViewControllerPannable.swift +++ b/enzevalos_iphone/ViewControllerPannable.swift @@ -25,7 +25,7 @@ class ViewControllerPannable: UIViewController { if panGesture.state == .began { originalPosition = view.center currentPositionTouched = panGesture.location(in: view) - + } else if panGesture.state == .changed { view.frame.origin = CGPoint( x: 0, @@ -36,16 +36,16 @@ class ViewControllerPannable: UIViewController { if velocity.y >= 1500 || translation.y >= 300 { UIView.animate(withDuration: 0.2 - , animations: { - self.view.frame.origin = CGPoint( - x: self.view.frame.origin.x, - y: self.view.frame.size.height - ) - }, completion: { (isCompleted) in - if isCompleted { - self.dismiss(animated: false, completion: nil) - } - }) + , animations: { + self.view.frame.origin = CGPoint( + x: self.view.frame.origin.x, + y: self.view.frame.size.height + ) + }, completion: { (isCompleted) in + if isCompleted { + self.dismiss(animated: false, completion: nil) + } + }) } else { UIView.animate(withDuration: 0.2, animations: { self.view.center = self.originalPosition! diff --git a/enzevalos_iphoneTests/CoreDataTests.swift b/enzevalos_iphoneTests/CoreDataTests.swift index 897f3f5506015d1270c7a650beeebdbb674f2bad..af0aa81a236c54a3f7e5a218b2d1790e6389d117 100644 --- a/enzevalos_iphoneTests/CoreDataTests.swift +++ b/enzevalos_iphoneTests/CoreDataTests.swift @@ -32,12 +32,12 @@ import XCTest class CoraDataTests: XCTestCase { let datahandler = DataHandler.handler let pgp = SwiftPGP() - + let userAdr = "alice@example.com" let userName = "alice" var user: MCOAddress = MCOAddress.init(mailbox: "alice@example.com") var userKeyID: String = "" - + override func setUp() { super.setUp() datahandler.reset() @@ -48,63 +48,63 @@ class CoraDataTests: XCTestCase { XCTAssertEqual(datahandler.getAddresses().count, 0) (user, userKeyID) = owner() } - + override func tearDown() { datahandler.reset() pgp.resetKeychains() super.tearDown() } - - func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress{ + + func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress { return MCOAddress.init(displayName: name, mailbox: adr.lowercased()) } - - func createPGPUser(adr: String = String.random().lowercased(), name: String = String.random()) -> (MCOAddress, String){ + + func createPGPUser(adr: String = String.random().lowercased(), name: String = String.random()) -> (MCOAddress, String) { let user = createUser(adr: adr, name: name) let id = pgp.generateKey(adr: user.mailbox) return (user, id) } - - func owner() -> (MCOAddress, String){ + + func owner() -> (MCOAddress, String) { Logger.logging = false let (user, userid) = createPGPUser(adr: userAdr, name: userName) UserManager.storeUserValue(userAdr as AnyObject, attribute: Attribute.userAddr) UserManager.storeUserValue(userid as AnyObject, attribute: Attribute.prefSecretKeyID) return (user, userid) } - - func testArrivingMail(){ + + func testArrivingMail() { let sender = createUser() let folder = "INBOX" XCTAssertNil(datahandler.findMailAddress(adr: sender.mailbox)) - - if let mail = testMail(from: sender, to: [user], cc: [user], bcc: [], folder: folder){ + + if let mail = testMail(from: sender, to: [user], cc: [user], bcc: [], folder: folder) { XCTAssertFalse(mail.isSecure) XCTAssertFalse(mail.isEncrypted) XCTAssertFalse(mail.isSigned) XCTAssertFalse(mail.trouble) XCTAssertFalse(mail.isCorrectlySigned) - + XCTAssert(mail.getCCs().count == 1) XCTAssert(mail.getCCs()[0].mailAddress == user.mailbox) XCTAssert(mail.getReceivers().count == 1) XCTAssert(mail.getReceivers()[0].mailAddress == user.mailbox) - + XCTAssertNotNil(datahandler.findMailAddress(adr: sender.mailbox)) let f = datahandler.findFolder(with: folder) XCTAssertEqual(f.mailsOfFolder.count, 1) XCTAssertEqual(f.records.count, 1) var containsMail = false - for m in f.mailsOfFolder{ - if m == mail{ + for m in f.mailsOfFolder { + if m == mail { containsMail = true } } XCTAssertTrue(containsMail) var containsAddr = false - for r in f.records{ - for a in r.addresses{ + for r in f.records { + for a in r.addresses { if a.mailAddress == sender.mailbox { containsAddr = true } @@ -116,7 +116,7 @@ class CoraDataTests: XCTestCase { XCTFail("No mail") } } - + func testMultiplePlainMailsFromOne() { let sender = createUser() let n = 100 @@ -130,8 +130,8 @@ class CoraDataTests: XCTestCase { XCTAssertEqual(folder.mailsOfFolder.count, n) XCTAssertTrue(checkOrderingOfRecord(record: folder.records.first!)) } - - + + func testMultiplePlainMails() { let n = 10 let m = 10 @@ -154,7 +154,7 @@ class CoraDataTests: XCTestCase { prev = record } } - + func testMixedMails() { let (sender, keyID) = createPGPUser() let n = 10 @@ -162,7 +162,7 @@ class CoraDataTests: XCTestCase { let body = "mixed mails" let folderName = "INBOX" for _ in 1...n { - let cryptoObject = senderPGP.encrypt(plaintext: body , ids: [userKeyID], myId: keyID) + let cryptoObject = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID) if let encMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject), let plainMail = testMail(from: sender, to: [user], cc: [], bcc: []) { XCTAssertTrue(encMail.isSecure && encMail.isSigned && encMail.isCorrectlySigned && encMail.isEncrypted && encMail.signedKey?.keyID == keyID) @@ -190,18 +190,18 @@ class CoraDataTests: XCTestCase { XCTAssertTrue(secureRecord) XCTAssertTrue(insecureRecord) } - + func testNewKey() { let (sender, keyID1) = createPGPUser() let senderPGP = SwiftPGP() let body = "mixed mails" let folderName = "INBOX" - - let cryptoObject1 = senderPGP.encrypt(plaintext: body , ids: [userKeyID], myId: keyID1) + + let cryptoObject1 = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID1) _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject1) - + let keyID2 = pgp.generateKey(adr: sender.mailbox, new: true) - let cryptoObject2 = senderPGP.encrypt(plaintext: body , ids: [userKeyID], myId: keyID2) + let cryptoObject2 = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID2) _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject2) let folder = datahandler.findFolder(with: folderName) @@ -211,66 +211,66 @@ class CoraDataTests: XCTestCase { XCTAssertTrue(record.isSecure) XCTAssertTrue(record.keyID == keyID1 || record.keyID == keyID2) } - - let cryptoObject3 = senderPGP.encrypt(plaintext: body , ids: [userKeyID], myId: keyID1) - if let oldKeyMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject3){ + + let cryptoObject3 = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: keyID1) + if let oldKeyMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject3) { XCTAssertTrue(oldKeyMail.isSecure) } } - - func testOwnRecord(){ + + func testOwnRecord() { let (sender, keyID) = createPGPUser() let body = "enc with old key" let folderName = "INBOX" let oldID = userKeyID - + var myrecord = datahandler.getKeyRecord(addr: userAdr, keyID: datahandler.prefSecretKey().keyID) XCTAssertEqual(myrecord.keyID, userKeyID) XCTAssertEqual(myrecord.ezContact.records.count, 1) - - let cryptoObject1 = pgp.encrypt(plaintext: body , ids: [oldID], myId: keyID) + + let cryptoObject1 = pgp.encrypt(plaintext: body, ids: [oldID], myId: keyID) _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: cryptoObject1) let myContact = datahandler.getContactByAddress(userAdr) - + if let newKeyIDs = try? pgp.importKeys(key: CryptoTests.importKey, pw: CryptoTests.importPW, isSecretKey: true, autocrypt: false), let newKeyId = newKeyIDs.first { _ = datahandler.newSecretKey(keyID: newKeyId, addPk: true) XCTAssertTrue(newKeyId == datahandler.prefSecretKey().keyID) XCTAssertTrue(userKeyID != newKeyId) - + let key = datahandler.findSecretKey(keyID: datahandler.prefSecretKey().keyID!) XCTAssertNotNil(key) XCTAssertTrue(key?.keyID == newKeyId) - + myrecord = datahandler.getKeyRecord(addr: userAdr, keyID: datahandler.prefSecretKey().keyID) - - + + XCTAssertEqual(myrecord.keyID, newKeyId) XCTAssertEqual(myrecord.ezContact.records.count, 2) XCTAssertTrue(myrecord.isSecure) XCTAssertEqual(myContact.publicKeys.count, 2) - let cryptoObject2 = pgp.encrypt(plaintext: body , ids: [newKeyId], myId: keyID ) + let cryptoObject2 = pgp.encrypt(plaintext: body, ids: [newKeyId], myId: keyID) let decryptObject2 = pgp.decrypt(data: cryptoObject2.chiphertext!, decryptionIDs: [newKeyId], verifyIds: [keyID], fromAdr: sender.mailbox) _ = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: decryptObject2) - - let cryptoObject3 = pgp.encrypt(plaintext: body , ids: [oldID], myId: keyID) + + let cryptoObject3 = pgp.encrypt(plaintext: body, ids: [oldID], myId: keyID) let decryptObject3 = pgp.decrypt(data: cryptoObject3.chiphertext!, decryptionIDs: [oldID], verifyIds: [keyID], fromAdr: sender.mailbox) let oldMail = testMail(from: sender, to: [user], cc: [], bcc: [], folder: folderName, cryptoObject: decryptObject3) - + XCTAssertTrue((oldMail?.decryptedWithOldPrivateKey)!) - - + + } else { XCTFail("No new key") return } } - - - func checkOrderingOfRecord(record: KeyRecord) -> Bool{ + + + func checkOrderingOfRecord(record: KeyRecord) -> Bool { var prev: PersistentMail? - for m in record.mails{ + for m in record.mails { if let prev = prev { if prev.date < m.date { return false @@ -280,13 +280,13 @@ class CoraDataTests: XCTestCase { } return true } - - func testMail(from: MCOAddress, to: [MCOAddress], cc: [MCOAddress], bcc: [MCOAddress], flags: MCOMessageFlag = MCOMessageFlag.init(rawValue: 0), folder: String = "INBOX" , date: Date = Date(timeIntervalSince1970: TimeInterval(arc4random())), cryptoObject: CryptoObject? = nil, body: String = String.random(length: 20)) -> PersistentMail?{ - + + func testMail(from: MCOAddress, to: [MCOAddress], cc: [MCOAddress], bcc: [MCOAddress], flags: MCOMessageFlag = MCOMessageFlag.init(rawValue: 0), folder: String = "INBOX", date: Date = Date(timeIntervalSince1970: TimeInterval(arc4random())), cryptoObject: CryptoObject? = nil, body: String = String.random(length: 20)) -> PersistentMail? { + let subject = String.random(length: 20) let id = UInt64(arc4random()) var body = body - + if let decryptedBody = cryptoObject?.decryptedText { body = decryptedBody } @@ -296,7 +296,7 @@ class CoraDataTests: XCTestCase { XCTAssertEqual(mail?.body, body) XCTAssertEqual(mail?.subject, subject) XCTAssertEqual(mail?.folder.name.lowercased(), folder.lowercased()) - + return mail } } diff --git a/enzevalos_iphoneTests/CryptoTests.swift b/enzevalos_iphoneTests/CryptoTests.swift index c5cb6fad349b8f03d9022a77becbf0c965c52e7e..48e0d6c407b9b158b03cfac94084b87d0c3aa60d 100644 --- a/enzevalos_iphoneTests/CryptoTests.swift +++ b/enzevalos_iphoneTests/CryptoTests.swift @@ -10,19 +10,19 @@ import XCTest @testable import enzevalos_iphone class CryptoTests: XCTestCase { - + //TODO: test importkey: public, autocrypt // test export key: public, secret // implement signature check - + let datahandler = DataHandler.handler let pgp = SwiftPGP() - + let userAdr = "alice@example.com" let userName = "alice" var user: MCOAddress = MCOAddress.init(mailbox: "alice@example.com") var userKeyID: String = "" - + static let importPW = "alice" static let importKey = """ -----BEGIN PGP PUBLIC KEY BLOCK----- @@ -185,7 +185,7 @@ class CryptoTests: XCTestCase { =U2bk -----END PGP PRIVATE KEY BLOCK----- """ - + let keyForSignedMessage = """ -----BEGIN PGP PUBLIC KEY BLOCK----- @@ -345,7 +345,7 @@ class CryptoTests: XCTestCase { -----END PGP PRIVATE KEY BLOCK----- """ - + let signedMessage = """ -----BEGIN PGP SIGNATURE----- @@ -362,7 +362,7 @@ class CryptoTests: XCTestCase { =OmRP -----END PGP SIGNATURE----- """ - + let manipulatedSignedMail = """ -----BEGIN PGP SIGNATURE----- @@ -379,52 +379,52 @@ class CryptoTests: XCTestCase { =OmRP -----END PGP SIGNATURE----- """ - - + + override func setUp() { super.setUp() datahandler.reset() pgp.resetKeychains() (user, userKeyID) = owner() } - + override func tearDown() { datahandler.reset() super.tearDown() } - - func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress{ + + func createUser(adr: String = String.random().lowercased(), name: String = String.random()) -> MCOAddress { return MCOAddress.init(displayName: name, mailbox: adr.lowercased()) } - - func createPGPUser(adr: String = String.random().lowercased(), name: String = String.random()) -> (address: MCOAddress, keyID: String){ + + func createPGPUser(adr: String = String.random().lowercased(), name: String = String.random()) -> (address: MCOAddress, keyID: String) { let user = createUser(adr: adr, name: name) let id = pgp.generateKey(adr: user.mailbox) return (user, id) } - - func owner() -> (MCOAddress, String){ + + func owner() -> (MCOAddress, String) { Logger.logging = false let (user, userid) = createPGPUser(adr: userAdr, name: userName) UserManager.storeUserValue(userAdr as AnyObject, attribute: Attribute.userAddr) UserManager.storeUserValue(userid as AnyObject, attribute: Attribute.prefSecretKeyID) return (user, userid) } - - func createSender(n: Int)-> [MCOAddress:String]{ - var result = [MCOAddress:String]() - - for _ in 1...n{ + + func createSender(n: Int) -> [MCOAddress: String] { + var result = [MCOAddress: String]() + + for _ in 1...n { let adr = String.random() let name = String.random() - - let (mcoaddr, id) = createPGPUser(adr: adr, name: name) + + let (mcoaddr, id) = createPGPUser(adr: adr, name: name) result[mcoaddr] = id } return result } - - func testKeyGen(){ + + func testKeyGen() { guard let key = pgp.loadKey(id: userKeyID) else { XCTFail("No key") return @@ -436,17 +436,17 @@ class CryptoTests: XCTestCase { XCTAssertTrue(key.isPublic && key.isSecret) var containsAddr = false for user in pk.users { - if user.userID.contains(userAdr){ + if user.userID.contains(userAdr) { containsAddr = true } - else{ + else { XCTFail("userID does not contain userAddr") } } XCTAssertTrue(containsAddr) } - - func testimportSecretKey(){ + + func testimportSecretKey() { XCTAssert(datahandler.prefSecretKey().keyID == userKeyID) XCTAssertEqual(datahandler.findSecretKeys().count, 1) guard let keys = try? pgp.importKeys(key: CryptoTests.importKey, pw: CryptoTests.importPW, isSecretKey: true, autocrypt: false) else { @@ -459,7 +459,7 @@ class CryptoTests: XCTestCase { } XCTAssert(keys.count == 1) XCTAssert(key == "008933003B986364") - + // Test storing a key _ = datahandler.newSecretKey(keyID: key, addPk: true) XCTAssert(datahandler.prefSecretKey().keyID == key) @@ -467,12 +467,12 @@ class CryptoTests: XCTestCase { XCTAssertEqual(datahandler.findSecretKeys().count, 2) } - - func testPlainMail(){ + + func testPlainMail() { let body = "plain message" guard let data = body.data(using: .utf8) else { XCTFail("No data") - return + return } let cryptoObject = pgp.decrypt(data: data, decryptionId: userKeyID, verifyIds: [], fromAdr: nil) XCTAssert(cryptoObject.encryptionState == .NoEncryption) @@ -480,54 +480,54 @@ class CryptoTests: XCTestCase { XCTAssert(cryptoObject.decryptedData == nil && cryptoObject.decryptedText == nil && cryptoObject.signKey == nil) XCTAssert(cryptoObject.plaintext == body) } - - func testEncMail(){ + + func testEncMail() { let body = "encrypted text" let senderPGP = SwiftPGP() let encryptedObject = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: "") XCTAssert(encryptedObject.encryptionState == .ValidedEncryptedWithCurrentKey && encryptedObject.signatureState == .NoSignature) - + guard let data = encryptedObject.chiphertext else { XCTFail("No chipher data") return - } + } let cryptoObject = pgp.decrypt(data: data, decryptionId: userKeyID, verifyIds: [], fromAdr: nil) XCTAssert(cryptoObject.encryptionState == .ValidedEncryptedWithCurrentKey) XCTAssert(cryptoObject.signatureState == .NoSignature) XCTAssert(cryptoObject.plaintext == body && cryptoObject.plaintext == cryptoObject.decryptedText) } - - func testSignedMail(){ + + func testSignedMail() { // import keys and data for signature test guard let keys = try? pgp.importKeys(key: keyForSignedMessage, pw: nil, isSecretKey: true, autocrypt: false), keys.count > 0 else { XCTFail("Can not import key") return } - guard let signedData = signedMessage.data(using: .utf8), let manipulatedDate = manipulatedSignedMail.data(using: .utf8) else{ + guard let signedData = signedMessage.data(using: .utf8), let manipulatedDate = manipulatedSignedMail.data(using: .utf8) else { XCTFail("No signed data") return } - + // 1. case: correct signed mail var cryptoObject = pgp.decrypt(data: signedData, decryptionId: keys.first, verifyIds: keys, fromAdr: nil) XCTAssert(cryptoObject.encryptionState == .NoEncryption && cryptoObject.signatureState == .ValidSignature) XCTAssert(cryptoObject.decryptedText == "only a signed mail!") - + // 2. case: manipulated mail cryptoObject = pgp.decrypt(data: manipulatedDate, decryptionId: keys.first, verifyIds: keys, fromAdr: nil) XCTAssert(cryptoObject.encryptionState == .NoEncryption && cryptoObject.signatureState == .InvalidSignature) } - - func testEncSignedMail(){ + + func testEncSignedMail() { let body = "signed text" let (senderAddress, senderID) = createPGPUser() let (_, id2) = createPGPUser() let senderPGP = SwiftPGP() let encObject = senderPGP.encrypt(plaintext: body, ids: [userKeyID], myId: senderID) - XCTAssert(encObject.encryptionState == .ValidedEncryptedWithCurrentKey && encObject.signatureState == SignatureState.ValidSignature ) + XCTAssert(encObject.encryptionState == .ValidedEncryptedWithCurrentKey && encObject.signatureState == SignatureState.ValidSignature) let falseEncObject = senderPGP.encrypt(plaintext: body, ids: [], myId: senderID) - + guard let data = encObject.chiphertext, let data2 = falseEncObject.chiphertext else { XCTFail("no chipher data") return @@ -537,17 +537,17 @@ class CryptoTests: XCTestCase { XCTAssert(cryptoObject.encryptionState == .ValidedEncryptedWithCurrentKey) XCTAssert(cryptoObject.signatureState == .NoPublicKey) XCTAssert(cryptoObject.plaintext == body && cryptoObject.plaintext == cryptoObject.decryptedText) - + // 2. case: signed and public key available cryptoObject = pgp.decrypt(data: data, decryptionId: userKeyID, verifyIds: [senderID, id2], fromAdr: nil) XCTAssert(cryptoObject.signatureState == .ValidSignature) XCTAssert(cryptoObject.signKey == senderID) XCTAssert(cryptoObject.signedAdrs.contains(senderAddress.mailbox) && cryptoObject.signedAdrs.count == 1) - + // 3. case: signed and check with wrong key cryptoObject = pgp.decrypt(data: data, decryptionId: userKeyID, verifyIds: [id2], fromAdr: nil) XCTAssert(cryptoObject.signatureState == .NoPublicKey) - + // 4. case: can not decrypt (wrong/missing decryption/encryption key) cryptoObject = pgp.decrypt(data: data2, decryptionId: userKeyID, verifyIds: [senderID], fromAdr: nil) XCTAssert(cryptoObject.encryptionState == .UnableToDecrypt && cryptoObject.signatureState == .NoSignature) @@ -556,7 +556,7 @@ class CryptoTests: XCTestCase { // Import a new secret key -> previous key is now an old key guard let keys = try? pgp.importKeys(key: CryptoTests.importKey, pw: CryptoTests.importPW, isSecretKey: true, autocrypt: false), keys.count > 0 else { XCTFail("Can not import key") - return + return } XCTAssertEqual(keys.count, 1) _ = datahandler.newSecretKeys(keyIds: keys, addPKs: true) @@ -567,5 +567,5 @@ class CryptoTests: XCTestCase { XCTAssert(cryptoObject.decryptedText == body) } - + } diff --git a/enzevalos_iphoneTests/InvitationTests.swift b/enzevalos_iphoneTests/InvitationTests.swift index abbf3e3bc351b2cd693e7be49998a19ac2716501..228e42c8fedd7ffd5099e325498281be2c45f137 100644 --- a/enzevalos_iphoneTests/InvitationTests.swift +++ b/enzevalos_iphoneTests/InvitationTests.swift @@ -12,34 +12,34 @@ import XCTest class InvitationTests: XCTestCase { - func testWordsInString() { + func testWordsInString() { - let string = "Diese App hat viele Vorteile" - let firstStringRange = NSRange(location: 0, length: 5) - let secondStringRange = NSRange(location: 7, length: 9) + let string = "Diese App hat viele Vorteile" + let firstStringRange = NSRange(location: 0, length: 5) + let secondStringRange = NSRange(location: 7, length: 9) - let firstResult = string.words(inRange: firstStringRange) - let secondResult = string.words(inRange: secondStringRange) + let firstResult = string.words(inRange: firstStringRange) + let secondResult = string.words(inRange: secondStringRange) - XCTAssertEqual(firstResult?.words, "Diese") - XCTAssertEqual(firstResult?.extendedRange, firstStringRange) + XCTAssertEqual(firstResult?.words, "Diese") + XCTAssertEqual(firstResult?.extendedRange, firstStringRange) - XCTAssertEqual(secondResult?.words, "App hat viele") - XCTAssertEqual(secondResult?.extendedRange, NSRange(location: 6, length: 13)) - } + XCTAssertEqual(secondResult?.words, "App hat viele") + XCTAssertEqual(secondResult?.extendedRange, NSRange(location: 6, length: 13)) + } - func testEncryptAndDecryptStrings() { + func testEncryptAndDecryptStrings() { - let texts = ["Kontonummer", "DE 12345 625636 23", "Alice und Bob", "@~> ™", "12207", "🤨", "🤨 ABC123", "Hallo,\nwie geht es dir?🤨\n\nich bin hier und mir geht es gut"] - let pgp = SwiftPGP() + let texts = ["Kontonummer", "DE 12345 625636 23", "Alice und Bob", "@~> ™", "12207", "🤨", "🤨 ABC123", "Hallo,\nwie geht es dir?🤨\n\nich bin hier und mir geht es gut"] + let pgp = SwiftPGP() let encryption = pgp.symmetricEncrypt(textToEncrypt: texts, armored: true, password: nil) - XCTAssertEqual(encryption.chiphers.count, texts.count) - XCTAssertEqual(encryption.password.count, 9) + XCTAssertEqual(encryption.chiphers.count, texts.count) + XCTAssertEqual(encryption.password.count, 9) - let decryption = pgp.symmetricDecrypt(chipherTexts: encryption.chiphers, password: encryption.password) + let decryption = pgp.symmetricDecrypt(chipherTexts: encryption.chiphers, password: encryption.password) - XCTAssertEqual(decryption, texts) - } + XCTAssertEqual(decryption, texts) + } } diff --git a/enzevalos_iphoneUITests/enzevalos_iphoneUITests.swift b/enzevalos_iphoneUITests/enzevalos_iphoneUITests.swift index 41c9ff23ebbbad816cfdc2356b15983361a48216..2972af180548f49fea0702ea310ed3b28e69bee5 100644 --- a/enzevalos_iphoneUITests/enzevalos_iphoneUITests.swift +++ b/enzevalos_iphoneUITests/enzevalos_iphoneUITests.swift @@ -9,12 +9,12 @@ import XCTest class enzevalos_iphoneUITests: XCTestCase { - + override func setUp() { super.setUp() - + // Put setup code here. This method is called before the invocation of each test method in the class. - + // In UI tests it is usually best to stop immediately when a failure occurs. continueAfterFailure = false // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. @@ -22,15 +22,15 @@ class enzevalos_iphoneUITests: XCTestCase { // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. } - + override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } - + func testExample() { // Use recording to get started writing UI tests. // Use XCTAssert and related functions to verify your tests produce the correct results. } - + }