Files
raspberry/iOS/Wallet/Sources/Account/Service/AccountServiceAuthorize.swift
2022-05-27 20:21:01 +03:00

77 lines
2.1 KiB
Swift

//
// Account.Service.Authorize.swift
// PayCash
//
// Created by Saveliy Stavitsky on 12/8/20.
// Copyright © 2020 List. All rights reserved.
//
import Foundation
extension Common.Model.Key {
fileprivate static let pinTries = Self("Account.Service.Authorize.pinTries")
}
extension Account.Service {
class Authorize {
static let shared = Authorize()
private init() { }
func saveUptime() { self.uptimeTemp = uptime() }
func clearUptime() {
if let uptimeTemp = self.uptimeTemp {
print(uptime() - uptimeTemp)
print(uptime() - uptimeTemp > 30)
if uptime() - uptimeTemp > 30 {
password = nil
}
}
uptimeTemp = nil
}
var password: String?
private var uptimeTemp: time_t?
private func uptime() -> time_t {
var boottime = timeval()
var mib: [Int32] = [CTL_KERN, KERN_BOOTTIME]
var size = MemoryLayout<timeval>.stride
// var boottime = timeval()
// var size = MemoryLayout<timeval>.stride
// sysctlbyname("kern.boottime", &boottime, &size, nil, 0)
var now = time_t()
var uptime: time_t = -1
time(&now)
if (sysctl(&mib, 2, &boottime, &size, nil, 0) != -1 && boottime.tv_sec != 0) {
uptime = now - boottime.tv_sec
}
return uptime
}
func savePinTry() -> [Int] {
Settings()[.pinTries] = getPinTries() + [uptime()]
return []
}
func getPinTries() -> [Int] {
let pinTries: [Int] = (Settings()[.pinTries] ?? []).filter({ $0 < uptime() })
// print("count = \(pinTries.count) max = \(pinTries.max()) values = \(pinTries)")
return pinTries
}
// func lastPinTryTimeout() -> Int? {
// if let max = getPinTries().max() {
// return uptime() - max
// } else {
// return nil
// }
// }
func clearPinTries() { Settings()[.pinTries] = [] }
}
}