Files
bundesmessenger-ios/bwi/Security/JailbreakCheck.swift
2022-09-19 11:53:45 +02:00

91 lines
3.2 KiB
Swift

//
/*
* Copyright (c) 2021 BWI GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Foundation
import DTTJailbreakDetection
@objcMembers class JailbreakCheck : NSObject, SecurityCheck {
func isBreached() -> Bool {
if BwiBuildSettings.forcedNoneJailbroken {
return DTTJailbreakDetection.isJailbroken()
}
return false
}
func breachAlert() -> UIAlertController {
self.dismissAnyAlertControllerIfPresent()
self.logoutAndCleanUp()
let alert = UIAlertController(title: BWIL10n.jailbreakAlertTitle, message: BWIL10n.jailbreakAlertMessage(AppInfo.current.displayName), preferredStyle: .alert)
alert.addAction(UIAlertAction(title: VectorL10n.close, style: .destructive, handler: { _ in
exit(0)
}))
return alert
}
private func logoutAndCleanUp() {
/*
* Logout when the user is still logged in.
*/
let appDelegate = AppDelegate.theDelegate()
appDelegate.logoutSendingRequestServer(true, completion: { (finished: Bool) -> Void in
if (finished) {
// PART I - Remove all caches.
//URLCache.shared.removeAllCachedResponses()
// PART II - Remove the whole library folder.
let pathLibraries = NSSearchPathForDirectoriesInDomains(.allLibrariesDirectory, .userDomainMask, true)
let mainLibraryPath = pathLibraries[0]
do {
let fileManager = FileManager .default
let fileArray = try fileManager .contentsOfDirectory(atPath: mainLibraryPath)
for filename in fileArray {
let writePath = NSURL(fileURLWithPath: mainLibraryPath).appendingPathComponent(filename)
try fileManager.removeItem(at: writePath!)
}
}
catch {
}
// PART III - Remove the whole documnent folder.
let pathDocument = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let mainDocumentPath = pathDocument[0]
do {
let fileManager = FileManager .default
let fileArray = try fileManager .contentsOfDirectory(atPath: mainDocumentPath)
for filename in fileArray {
let writePath = NSURL(fileURLWithPath: mainDocumentPath).appendingPathComponent(filename)
try fileManager.removeItem(at: writePath!)
}
}
catch {
}
}
})
}
}