Пример #1
0
    def getWifiPassword(self, ssid):
        def CFDictionaryAddStringKeyValue(d, k, v):
            if type(v) is not bool:
                ck = CoreFoundation.CFStringCreateWithBytes(
                    None, k, len(k), 0, 0)
                cv = CoreFoundation.CFStringCreateWithBytes(
                    None, v, len(v), 0, 0)
                CoreFoundation.CFDictionaryAddValue(d, ck, cv)
                CoreFoundation.CFRelease(ck)
                CoreFoundation.CFRelease(cv)
            else:
                ck = CoreFoundation.CFStringCreateWithBytes(
                    None, k, len(k), 0, 0)
                CoreFoundation.CFDictionaryAddValue(d, ck, v)
                CoreFoundation.CFRelease(ck)

        query = CoreFoundation.CFDictionaryCreateMutable(None, 0, None, None)
        CFDictionaryAddStringKeyValue(query, kSecClass,
                                      kSecClassGenericPassword)
        CFDictionaryAddStringKeyValue(query, kSecAttrAccount,
                                      ssid.encode("utf-8"))
        CFDictionaryAddStringKeyValue(query, kSecReturnData, kCFBooleanTrue)
        _, keychain_item = Security.SecItemCopyMatching(query, None)
        try:
            return keychain_item.bytes().tobytes().decode("utf-8")
        except AttributeError:
            print("Could not find wifi password for ssid {}. Please enter it".
                  format(ssid))
            return getpass.getpass()