diff --git a/client/main.cpp b/client/main.cpp index 0991144e..327837df 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -38,6 +38,7 @@ #include "QZXing.h" #include "platforms/ios/QRCodeReaderBase.h" +#include "platforms/ios/MobileUtils.h" #include "debug.h" #include "defines.h" @@ -143,22 +144,23 @@ int main(int argc, char *argv[]) return 0; } - QSettings oldSettings(ORGANIZATION_NAME, APPLICATION_NAME); - if (!oldSettings.allKeys().isEmpty()) { - QSettings newSettingsForPath(QSettings::Format::CustomFormat1, QSettings::UserScope, - ORGANIZATION_NAME, APPLICATION_NAME); - QString oldSettingsFileName = oldSettings.fileName(); - QString newSettingsFileName = newSettingsForPath.fileName(); - - qDebug() << "New config removed:" << QFile::remove(newSettingsFileName); - QSettings newSettings(newSettingsFileName, QSettings::Format::NativeFormat); - SecureFormat::chiperSettings(oldSettings, newSettings); - +// QSettings oldSettings(ORGANIZATION_NAME, APPLICATION_NAME); +// if (!oldSettings.allKeys().isEmpty()) { +// QSettings newSettings(QSettings::Format::CustomFormat1, QSettings::SystemScope, +// ORGANIZATION_NAME, APPLICATION_NAME); +// QString oldSettingsFileName = oldSettings.fileName(); +// QString newSettingsFileName = newSettings.fileName(); // qDebug() << "oldSettingsFileName:" << oldSettingsFileName; // qDebug() << "newSettingsFileName:" << newSettingsFileName; -// qDebug() << "Old config copied:" << QFile::copy(oldSettingsFileName, newSettingsFileName); -//// qDebug() << "Old config removed:" << QFile::remove(oldSettingsFileName); - } + +// qDebug() << "New config removed:" << QFile::remove(newSettingsFileName); +// SecureFormat::chiperSettings(oldSettings, newSettings); +//// qDebug() << "Old config copied:" << QFile::copy(oldSettingsFileName, newSettingsFileName); +////// qDebug() << "Old config removed:" << QFile::remove(oldSettingsFileName); +// } + + MobileUtils::writeToKeychain("testKey", "12345"); + qDebug() << "MobileUtils::readFromKeychain(\"testKey\"):" << MobileUtils::readFromKeychain("testKey"); Settings settings; diff --git a/client/platforms/ios/MobileUtils.cpp b/client/platforms/ios/MobileUtils.cpp index 31b58c94..771e7855 100644 --- a/client/platforms/ios/MobileUtils.cpp +++ b/client/platforms/ios/MobileUtils.cpp @@ -1,10 +1,6 @@ #include "MobileUtils.h" -MobileUtils::MobileUtils() -{ +void MobileUtils::shareText(const QStringList&) {} -} - -void MobileUtils::shareText(const QStringList& filesToSend) { - -} +void MobileUtils::writeToKeychain(const QString&, const QString&) {} +QString MobileUtils::readFromKeychain(const QString&) { return {}; } diff --git a/client/platforms/ios/MobileUtils.h b/client/platforms/ios/MobileUtils.h index 42aa4031..49fcdce0 100644 --- a/client/platforms/ios/MobileUtils.h +++ b/client/platforms/ios/MobileUtils.h @@ -12,6 +12,9 @@ public: public slots: static void shareText(const QStringList& filesToSend); + + static void writeToKeychain(const QString& tag, const QString& value); + static QString readFromKeychain(const QString& tag); }; #endif // MOBILEUTILS_H diff --git a/client/platforms/ios/MobileUtils.mm b/client/platforms/ios/MobileUtils.mm index 94c7c775..658309e3 100644 --- a/client/platforms/ios/MobileUtils.mm +++ b/client/platforms/ios/MobileUtils.mm @@ -1,6 +1,9 @@ #include "MobileUtils.h" #include +#include + +#include static UIViewController* getViewController() { NSArray *windows = [[UIApplication sharedApplication]windows]; @@ -31,3 +34,62 @@ void MobileUtils::shareText(const QStringList& filesToSend) { popController.sourceView = qtController.view; } } + +bool deleteFromKeychain(const QString& tag) { + NSData* nsTag = [tag.toNSString() dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *deleteQuery = @{ (id)kSecClass: (id)kSecClassKey, + (id)kSecAttrApplicationTag: nsTag, + }; + + OSStatus status = SecItemDelete((__bridge CFDictionaryRef)deleteQuery); + if (status != errSecSuccess) { + qDebug() << "Error deleteFromKeychain" << status; + return false; + } else { + qDebug() << "OK deleteFromKeychain"; + return true; + } +} + +void MobileUtils::writeToKeychain(const QString& tag, const QString& value) { + deleteFromKeychain(tag); + + NSData* nsValue = [value.toNSString() dataUsingEncoding:NSUTF8StringEncoding]; + NSData* nsTag = [tag.toNSString() dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary* addQuery = @{ (id)kSecValueData: nsValue, + (id)kSecClass: (id)kSecClassKey, + (id)kSecAttrApplicationTag: nsTag, + }; + + OSStatus status = SecItemAdd((__bridge CFDictionaryRef)addQuery, NULL); + if (status != errSecSuccess) { + qDebug() << "Error writeToKeychain" << status; + } else { + qDebug() << "OK writeToKeychain"; + } +} + +QString MobileUtils::readFromKeychain(const QString& tag) { + NSData* nsValue = NULL; + NSData* nsTag = [tag.toNSString() dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *getQuery = @{ (id)kSecReturnData: @YES, + (id)kSecClass: (id)kSecClassKey, + (id)kSecAttrApplicationTag: nsTag, + }; + + OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)getQuery, + (CFTypeRef *)&nsValue); + if (status != errSecSuccess) { + qDebug() << "Error readFromKeychain" << status; + } else { + qDebug() << "OK readFromKeychain" << nsValue; + } + + QString result; + if (nsValue) { + result = QByteArray::fromNSData(nsValue); + CFRelease(nsValue); + } + + return result; +}