feat: add VaultSession (vault lifecycle and entry CRUD)
This commit is contained in:
@@ -0,0 +1 @@
|
||||
15943
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
#if __OBJC__
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
NSBundle* KeePassKit_SWIFTPM_MODULE_BUNDLE(void);
|
||||
|
||||
#define SWIFTPM_MODULE_BUNDLE KeePassKit_SWIFTPM_MODULE_BUNDLE()
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NSBundle* KeePassKit_SWIFTPM_MODULE_BUNDLE() {
|
||||
NSURL *bundleURL = [[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"KeePassKit_KeePassKit.bundle"];
|
||||
|
||||
NSBundle *preferredBundle = [NSBundle bundleWithURL:bundleURL];
|
||||
if (preferredBundle == nil) {
|
||||
return [NSBundle bundleWithPath:@"/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/KeePassKit_KeePassKit.bundle"];
|
||||
}
|
||||
|
||||
return preferredBundle;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
</dict>
|
||||
</plist>
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "KeePassKit";
|
||||
|
||||
/* Copyright (human-readable) */
|
||||
"NSHumanReadableCopyright" = "Copyright 2013-2021 HicknHack Software GmbH. Alle Rechte vorbehalten.";
|
||||
|
||||
+268
@@ -0,0 +1,268 @@
|
||||
/* Action name for adding a customt icon. */
|
||||
"ADD_CUSTOM_ICON" = "Icon hinzufügen";
|
||||
|
||||
/* Error description */
|
||||
"Alignment Error" = "Speicherausrichtungsfehler";
|
||||
|
||||
/* Error description */
|
||||
"Buffer Too Small" = "Puffer zu klein";
|
||||
|
||||
/* Default title for KDBX databases
|
||||
Title for the root group created for KDB files */
|
||||
"DATABASE" = "Datenbank";
|
||||
|
||||
/* Error description */
|
||||
"Decode Error" = "Dekodierungsfehler";
|
||||
|
||||
/* Action name for deleting a custom icon */
|
||||
"DELETE_CUSTOM_ICON" = "Icon entfernen";
|
||||
|
||||
/* EMail */
|
||||
"EMAIL" = "E-Mail";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_AES_DECRYPTION_FAILED" = "AES Entschlüsselung fehlgeschlagen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_AES_ENCRYPTION_FAILED" = "AES Verschlüsselung ist fehlgeschlagen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "Bezeichnung wird bereits verwendet!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Die Autotype-Sequenz ist fehlerhaft!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_CORRUPT_TREE" = "Interne Datenstruktur defekt!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_DECRYPTION_FAILED" = "Entschlüsseln fehlgeschlagen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_ENCRYPTION_FAILED" = "Verschlüsseln fehlgeschlafen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "Datenbank-XML enthält kein Group-Element";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_CORRUPTED" = "Header-Daten sind beschädigt";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "Fehlerhafte Datei: Header-Hash stimmt nicht mit Daten überein.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Datenbank-Hash falsch. Datenintegrität ist möglicherweise verletzt!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "Die Integrität der Datei konnte nicht sichergestellt werden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Datenfeld mit falscher Größe. Password falsch?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Unbekanntes Datenfeld. Password falsch?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_HEADER_FIELD_SIZE" = "Falsche Größe eines Header-Feldes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_HEADER_FIELD_TYPE" = "Falscher Typ eines Header-Feldes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_HEADER_IV_SIZE" = "Falsche Größe des Initalisierungs-Vektor im Header";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDB_CORRUPT_TREE" = "Defekter KDB-Baum";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDB_FILE_HEADER_TRUNCATED" = "KDB-Header unvollständig";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_CONTENT_STREAM" = "Die Inhaltsdaten sind fehlerhaft.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_ENCRYPTION_STREAM" = "Die verschlüsselten Daten sind fehlerhaft.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_INNER_HEADER" = "Der innere Header ist fehlerhaft.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_PUBLIC_CUSTOM_DATA" = "Die unverschlüsselten öffentlichen Daten sind fehlerhaft.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_INVALID_INNER_HEADER_FIELD" = "Der innere Header enthält ein unbekanntes Feld";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_INVALID_KEY_DERIVATION_DATA" = "Die Daten zur Schlüsselherleitung sind nicht fehlerhaft";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Datenbank-XML enthält keine KeePassFile-Elemente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KEY_DERIVATION_FAILED" = "Schlüsselherleitung fehlgeschlagen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_META_ELEMENT_MISSING" = "Datenbank-XML enthält kein Meta-Element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_NO_DATA" = "Keine Daten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_NO_KEY_DATA" = "Die Schlüsseldatei enthält keine Daten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_NO_XML_DATA" = "Die Schlüsseldatei ist keine Xml Datei";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Falsche Password und/oder die Schlüsseldatei";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "Datenbank-XML enthält kein Root-Elementen";
|
||||
|
||||
/* Error message for unknown error code */
|
||||
"ERROR_UNKNOWN_ERROR_CODE" = "Ein unbekannter Fehler ist aufgetreten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Unbekanntes Dateiformat";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Verschlüsselungsalgorithmus wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_CIPHER" = "Verschlüsselungsalgorithmus wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Datenbankformat wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Kompressionsalgorithmus wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Format des Zufallsdatenstroms wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_KEYDERIVATION" = "Schlüsselherleitungsalgorithmus wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Format des Fenstertitles ist fehlerhaft!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_CORRUPTED" = "Schlüssel-XML-Datei ist beschädigt!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Daten des Schlüssels nicht lesbar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_UNSUPPORTED_VERSION" = "Schlüssel-XML-Datei Version wird nicht unterstützt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "Schlüssel-XML-Datei enhält kein Data-Element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_HASH_ATTRIBUTE" = "Schlüssel-XML-Datei ohne Hash-Attribut!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "Schlüssel-XML-Datei enthält kein Key-Element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEYFILE_ELEMENT" = "Schlüssel-XML-Datei ohne KeyFile-Element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_META_ELEMENT" = "Schlüssel-XML-Datei enthält kein Meta-Element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WRONG_HASH_SIZE" = "Hash-Element in Schlüssel-XML-Datei hat die falsche Länge";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERRROR_XML_STRUCUTRE_MALFORMED" = "Datenbank-XML Struktur ist fehlerhaft";
|
||||
|
||||
/* Error reason */
|
||||
"Failed to allocate memory" = "Konnte keinen Speicher belegen";
|
||||
|
||||
/* Error reason */
|
||||
"Function not implemented for the current algorithm" = "Funktion ist im aktuellen Algorithmus nicht implementiert";
|
||||
|
||||
/* General */
|
||||
"GENERAL" = "Allgemein";
|
||||
|
||||
/* Homebanking */
|
||||
"HOMEBANKING" = "Homebanking";
|
||||
|
||||
/* Error reason */
|
||||
"Illegal parameter supplied to encryption/decryption algorithm" = "Falscher Parameter wurde für Ver-/Entschlüsselung übergeben";
|
||||
|
||||
/* Error reason */
|
||||
"Input data did not decode or decrypt correctly" = "Eingangsdaten konnten nicht Dekodiert oder korrekt entschlüsselt werden";
|
||||
|
||||
/* Error reason */
|
||||
"Input size to encryption algorithm was not aligned correctly" = "Eingabegröße für Verschlüsselung ist nicht korrekt auf Algorithmus ausgerichtet";
|
||||
|
||||
/* Error reason */
|
||||
"Insufficient buffer provided for specified operation" = "Zu kleiner Puffer für Operation zur Verfügung";
|
||||
|
||||
/* Internet */
|
||||
"INTERNET" = "Internet";
|
||||
|
||||
/* Title format for a copie of an entry. Contains a %@ placeholder */
|
||||
"KPK_ENTRY_COPY_%@" = "Kopie von %@";
|
||||
|
||||
/* Title format for a copie of a group. Contains a %@ placeholder */
|
||||
"KPK_GROUP_COPY_%@" = "Kopie von %@";
|
||||
|
||||
/* Error description */
|
||||
"Memory Failure" = "Speicherfehler";
|
||||
|
||||
/* Network */
|
||||
"NETWORK" = "Netzwerk";
|
||||
|
||||
/* Error description */
|
||||
"Parameter Error" = "Parameterfehler";
|
||||
|
||||
/* Action name for setting a custom string value protected */
|
||||
"PROTECT_%@" = "%@ schützen";
|
||||
|
||||
/* Action name for setting the background color of an enty */
|
||||
"SET_BACKGROUND_COLOR" = "Hintergrundfarbe festlegen";
|
||||
|
||||
/* Action name for setting value of a custom attribute. Contains %@ placeholder */
|
||||
"SET_CUSTOM_ATTTRIBUTE_%@" = "Benutzerdefinierten Werte festlegen";
|
||||
|
||||
/* Action name for setting the foreground color of an enty */
|
||||
"SET_FOREGROUND_COLOR" = "Vordergrundfarbe festlegen";
|
||||
|
||||
/* Action name for setting the notes of an enty */
|
||||
"SET_NOTES" = "Notizen festlegen";
|
||||
|
||||
/* Action name for setting the password of an enty */
|
||||
"SET_PASSWORD" = "Password festlegen";
|
||||
|
||||
/* Action name for setting the tags of an enty */
|
||||
"SET_TAGS" = "Tags festlegen";
|
||||
|
||||
/* Action name for setting the title of an enty */
|
||||
"SET_TITLE" = "Titel festlegen";
|
||||
|
||||
/* Action name for setting the url of an enty */
|
||||
"SET_URL" = "URL festlegen";
|
||||
|
||||
/* Action name for setting the username of an enty */
|
||||
"SET_USERNAME" = "Benutzername festlegen";
|
||||
|
||||
/* Error description */
|
||||
"Success" = "Erfolgreich";
|
||||
|
||||
/* Name for the trash group */
|
||||
"TRASH" = "Papierkorb";
|
||||
|
||||
/* Error description */
|
||||
"Unimplemented Function" = "Funktion nicht implementiert";
|
||||
|
||||
/* Error description */
|
||||
"Unknown Error" = "Unbekannter Fehler";
|
||||
|
||||
/* Action name for setting a custom string value non-protected */
|
||||
"UNPROTECT_%@" = "%@ nicht schützen";
|
||||
|
||||
/* Windows */
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
+268
@@ -0,0 +1,268 @@
|
||||
/* Action name for adding a customt icon. */
|
||||
"ADD_CUSTOM_ICON" = "Add Custom Icon";
|
||||
|
||||
/* Error description */
|
||||
"Alignment Error" = "Alignment Error";
|
||||
|
||||
/* Error description */
|
||||
"Buffer Too Small" = "Buffer Too Small";
|
||||
|
||||
/* Default title for KDBX databases
|
||||
Title for the root group created for KDB files */
|
||||
"DATABASE" = "Database";
|
||||
|
||||
/* Error description */
|
||||
"Decode Error" = "Decode Error";
|
||||
|
||||
/* Action name for deleting a custom icon */
|
||||
"DELETE_CUSTOM_ICON" = "Delete Custom Icon";
|
||||
|
||||
/* EMail */
|
||||
"EMAIL" = "EMail";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_AES_DECRYPTION_FAILED" = "AES decryption failed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_AES_ENCRYPTION_FAILED" = "AES encryption failed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "The attribute key is not unique!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "The autotype sequence is not valid!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_CORRUPT_TREE" = "The internal file structure is corrupted!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_DECRYPTION_FAILED" = "Decryption failed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_ENCRYPTION_FAILED" = "Encryption failed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "The XML file contains no group node";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_CORRUPTED" = "Header is corrupted";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "The header hash doesn't match. File corrupted";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "The database header hash is wrong. Data integrity might be broken!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "The database integrity isn't ensured";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Incorrect size at data field. Password wrong?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Unknown data field. Password wrong?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_HEADER_FIELD_SIZE" = "Invalid header field size";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_HEADER_FIELD_TYPE" = "Invalid header field type";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_INVALID_HEADER_IV_SIZE" = "Invalid header initalization vector size";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDB_CORRUPT_TREE" = "Corrupted KDB tree";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDB_FILE_HEADER_TRUNCATED" = "KDB header truncated";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_CONTENT_STREAM" = "The content stream is corrupted";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_ENCRYPTION_STREAM" = "The encrypted stream is corrupted";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_INNER_HEADER" = "The inner header data is corrupted";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_CORRUPTED_PUBLIC_CUSTOM_DATA" = "The public custom data is corrupted";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_INVALID_INNER_HEADER_FIELD" = "The inner header contains an invalid field";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KDBX_INVALID_KEY_DERIVATION_DATA" = "The key derivation data is invalid";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "The XML file is missing the KeePassFile element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_KEY_DERIVATION_FAILED" = "Key derivation failed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_META_ELEMENT_MISSING" = "Meta XML element is missing";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_NO_DATA" = "No data";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_NO_KEY_DATA" = "The key file contains no data";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_NO_XML_DATA" = "No XML file data";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "The password and/or the keyfile is wrong";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "The XML file contains no Root node";
|
||||
|
||||
/* Error message for unknown error code */
|
||||
"ERROR_UNKNOWN_ERROR_CODE" = "An unknown error occured";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Unknown file format";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Unsupported cipher algorithm";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_CIPHER" = "Unsupported cipher";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "The Database version is not supported";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Unsupported compression algorithm";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Unsupported random stream type";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_UNSUPPORTED_KEYDERIVATION" = "Unsupported key derivation";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "The Format of the Window Title is not valid!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_CORRUPTED" = "Unable to load corrupted key file";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Unable to read the data of the XML keyfile";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_UNSUPPORTED_VERSION" = "Unsupported XML key file version";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "The XML keyfile is missing the data element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_HASH_ATTRIBUTE" = "Unable to load key file. Hash is missing.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "The XML keyfile is missing the key element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEYFILE_ELEMENT" = "The XML keyfile is missing the key file element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_META_ELEMENT" = "The Xml keyfile is missing the meta element";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERROR_XML_KEYFILE_WRONG_HASH_SIZE" = "The Xml key file has the wrong hash size";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ERRROR_XML_STRUCUTRE_MALFORMED" = "Malformed XML structure";
|
||||
|
||||
/* Error reason */
|
||||
"Failed to allocate memory" = "Failed to allocate memory";
|
||||
|
||||
/* Error reason */
|
||||
"Function not implemented for the current algorithm" = "Function not implemented for the current algorithm";
|
||||
|
||||
/* General */
|
||||
"GENERAL" = "General";
|
||||
|
||||
/* Homebanking */
|
||||
"HOMEBANKING" = "Homebanking";
|
||||
|
||||
/* Error reason */
|
||||
"Illegal parameter supplied to encryption/decryption algorithm" = "Illegal parameter supplied to encryption/decryption algorithm";
|
||||
|
||||
/* Error reason */
|
||||
"Input data did not decode or decrypt correctly" = "Input data did not decode or decrypt correctly";
|
||||
|
||||
/* Error reason */
|
||||
"Input size to encryption algorithm was not aligned correctly" = "Input size to encryption algorithm was not aligned correctly";
|
||||
|
||||
/* Error reason */
|
||||
"Insufficient buffer provided for specified operation" = "Insufficient buffer provided for specified operation";
|
||||
|
||||
/* Internet */
|
||||
"INTERNET" = "Internet";
|
||||
|
||||
/* Title format for a copie of an entry. Contains a %@ placeholder */
|
||||
"KPK_ENTRY_COPY_%@" = "%@ copy";
|
||||
|
||||
/* Title format for a copie of a group. Contains a %@ placeholder */
|
||||
"KPK_GROUP_COPY_%@" = "%@ copy";
|
||||
|
||||
/* Error description */
|
||||
"Memory Failure" = "Memory Failure";
|
||||
|
||||
/* Network */
|
||||
"NETWORK" = "Network";
|
||||
|
||||
/* Error description */
|
||||
"Parameter Error" = "Parameter Error";
|
||||
|
||||
/* Action name for setting a custom string value protected */
|
||||
"PROTECT_%@" = "Protect %@";
|
||||
|
||||
/* Action name for setting the background color of an enty */
|
||||
"SET_BACKGROUND_COLOR" = "Set Background Color";
|
||||
|
||||
/* Action name for setting value of a custom attribute. Contains %@ placeholder */
|
||||
"SET_CUSTOM_ATTTRIBUTE_%@" = "Set Custom Attribute %@";
|
||||
|
||||
/* Action name for setting the foreground color of an enty */
|
||||
"SET_FOREGROUND_COLOR" = "Set Foreground Color";
|
||||
|
||||
/* Action name for setting the notes of an enty */
|
||||
"SET_NOTES" = "Set Notes";
|
||||
|
||||
/* Action name for setting the password of an enty */
|
||||
"SET_PASSWORD" = "Set Password";
|
||||
|
||||
/* Action name for setting the tags of an enty */
|
||||
"SET_TAGS" = "Set Tags";
|
||||
|
||||
/* Action name for setting the title of an enty */
|
||||
"SET_TITLE" = "Set Title";
|
||||
|
||||
/* Action name for setting the url of an enty */
|
||||
"SET_URL" = "Set URL";
|
||||
|
||||
/* Action name for setting the username of an enty */
|
||||
"SET_USERNAME" = "Set Username";
|
||||
|
||||
/* Error description */
|
||||
"Success" = "Success";
|
||||
|
||||
/* Name for the trash group */
|
||||
"TRASH" = "Trash";
|
||||
|
||||
/* Error description */
|
||||
"Unimplemented Function" = "Unimplemented Function";
|
||||
|
||||
/* Error description */
|
||||
"Unknown Error" = "Unknown Error";
|
||||
|
||||
/* Action name for setting a custom string value non-protected */
|
||||
"UNPROTECT_%@" = "Unprotect %@";
|
||||
|
||||
/* Windows */
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
KPKLocalizable.strings
|
||||
MacPass
|
||||
|
||||
Created by Michael Starke on 20/12/13.
|
||||
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
*/
|
||||
|
||||
"SET_TITLE" = "Editar Título";
|
||||
"SET_USERNAME" = "Editar Nombre de Usuario";
|
||||
"SET_PASSWORD" = "Editar Contraseña";
|
||||
"SET_URL" = "Editar URL";
|
||||
"SET_NOTES" = "Editar Notas";
|
||||
|
||||
"DATABASE" = "Base de Datos";
|
||||
"EMAIL" = "EMail";
|
||||
"GENERAL" = "General";
|
||||
"HOMEBANKING" = "Bancos";
|
||||
"INTERNET" = "Internet";
|
||||
"NETWORK" = "Red";
|
||||
"TRASH" = "Papelera";
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
/* Copy */
|
||||
"KPK_GROUP_COPY_%@" = "Copia %@";
|
||||
"KPK_ENTRY_COPY_%@" = "Copia %@";
|
||||
|
||||
/* Validation Errors */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "El formato del título no es válido.";
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "La llave de atributo no es única.";
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "La secuenta de Autotype no es válida.";
|
||||
|
||||
/* Errors */
|
||||
"ERROR_CORRUPT_TREE" = "La estructura interna del archivo está corrupta.";
|
||||
"ERROR_INVALID_FIELD_SIZE" = "La longitud del campo no es válida. ¿Contraseña incorrecta?";
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Valor desconocido. ¿Contraseña incorrecta?";
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "La versión de la base de datos no es soportada.";
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Algoritmo de encriptación no soportado";
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Formato de archivo desconocido";
|
||||
"ERROR_HEADER_CORRUPTED" = "Cabecera corrupta";
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Algoritmo de compresión no soportado";
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Tipo de random stream no soportado";
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "No se puede verificar la integridad de la base de datos";
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "La contraseña o el KeePassFile son incorrectos";
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "El archivo XML no contiene el elemento KeePassFile";
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "El archivo XML no contiene el nodo Root";
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "El archivo XML no contiene el nodo Group";
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "El hash del header no coincide. Archivo corrupto";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "El archivo XML no contiene el elemento key";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "El archivo XML no contiene el elemento data";
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "No es posible leer la información del archivo XML.";
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "El hash de la cabecera de la base de datos es incorrecto. La integridad puede estar en riesgo.";
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
KPKLocalizable.strings
|
||||
MacPass
|
||||
|
||||
Created by Michael Starke on 20/12/13.
|
||||
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
*/
|
||||
|
||||
"SET_TITLE" = "Modifier le titre";
|
||||
"SET_USERNAME" = "Modifier utilisateur";
|
||||
"SET_PASSWORD" = "Modifier mot de passe";
|
||||
"SET_NOTES" = "Modifier notes";
|
||||
"SET_URL" = "Modifier URL";
|
||||
|
||||
"DATABASE" = "Base de données";
|
||||
"EMAIL" = "Courrier électronique";
|
||||
"GENERAL" = "Général";
|
||||
"HOMEBANKING" = "Banque";
|
||||
"INTERNET" = "Internet";
|
||||
"NETWORK" = "Réseau";
|
||||
"TRASH" = "Corbeille";
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
/* Copy */
|
||||
"KPK_GROUP_COPY_%@" = "%@ copy";
|
||||
"KPK_ENTRY_COPY_%@" = "%@ copy";
|
||||
|
||||
/* Validation Errors */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Le format du titre de la fenêtre n'est pas valide !";
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "La clé d'attribut n'est pas unique";
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "La séquence de saisie automatique n'est pas valide !";
|
||||
|
||||
/* Errors */
|
||||
"ERROR_CORRUPT_TREE" = "La structure interne du fichier est corrompue !";
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Taille incorrecte dans le champ. Mauvais mot de passe ?";
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Champ inconnu. Mauvais mot de passe ?";
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Version de la base de données non prise en charge";
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Algorithme de chiffrement non pris en charge";
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Format de fichier inconnu";
|
||||
"ERROR_HEADER_CORRUPTED" = "En-tête de fichier corrompue";
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Algorithme de compression non pris en charge";
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Type de flux aléatoire non pris en charge";
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "L'intégrité de la base de données n'est pas assurée";
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Mauvais mot de passe et/ou fichier clé";
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Le fichier XML ne contient pas d'élément KeePassFile";
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "Le fichier XML ne contient pas de nœud 'root'";
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "Le fichier XML ne contient pas de nœud 'Groupe'";
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "Le hash de l'en-tête ne correspond pas. Fichier corrompu";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "Le fichier XML ne contient pas d'élément clé";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "Le fichier clé XML ne contient pas d'élément de données";
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Impossible de lire les données du fichier clé XML";
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Le hash de l'en-tête n'est pas bon. Les données peuvent être corrompues !";
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
KPKLocalizable.strings
|
||||
MacPass
|
||||
|
||||
Created by Michael Starke on 20/12/13.
|
||||
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
*/
|
||||
|
||||
"SET_TITLE" = "Modifica Titolo";
|
||||
"SET_USERNAME" = "Modifica Nome Utente";
|
||||
"SET_PASSWORD" = "Modifica Password";
|
||||
"SET_URL" = "Modifica URL";
|
||||
"SET_NOTES" = "Modifica Note";
|
||||
|
||||
"DATABASE" = "Database";
|
||||
"EMAIL" = "EMail";
|
||||
"GENERAL" = "Generale";
|
||||
"HOMEBANKING" = "Homebanking";
|
||||
"INTERNET" = "Internet";
|
||||
"NETWORK" = "Rete";
|
||||
"TRASH" = "Cestino";
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
/* Copy */
|
||||
"KPK_GROUP_COPY_%@" = "%@ Copia";
|
||||
"KPK_ENTRY_COPY_%@" = "%@ Copia";
|
||||
|
||||
/* Validation Errors */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Il Formato del Titolo della Finestra non é Valido!";
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "The Attribute Key is not unique!";
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Sequenza di AutoType non Valida!";
|
||||
|
||||
/* Errors */
|
||||
"ERROR_CORRUPT_TREE" = "La struttura interna del file é corrotta!";
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Taglia dati incorretta. Password errata?";
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Campo dati sconosciuto. Password errata?";
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Versione del database non supportata";
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Algoritmo di cifratura non supportato";
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Formato del file sconosciuto";
|
||||
"ERROR_HEADER_CORRUPTED" = "Intestazione corrotta";
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Algoritmo di compressione non supportato";
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Flusso aleatorio non supportato";
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "L'integrità del database non é assicurata";
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "La password e/o la chiave sono errati";
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Elemento KeePassFile mancante dal file XML";
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "Il file XML non contiene un nodo root";
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "Il file XML non contiene un nodo Gruppo";
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "La hash dell'intestazione non corrisponde. File corrotto";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "Il file chiave XML non contiene l'elemento chiave";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "Il file chiave XML non contiene l'elemento dati";
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Impossibile leggere i dati dal file chiave XML";
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "La hash dell'intestazione del database é errata, l'integrità dei dati potrebbe essere compromessa!";
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
KPKLocalizable.strings
|
||||
MacPass
|
||||
|
||||
Created by Michael Starke on 20/12/13.
|
||||
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
*/
|
||||
|
||||
"SET_TITLE" = "Wijzig Titel";
|
||||
"SET_USERNAME" = "Wijzig Gebruikersnaam";
|
||||
"SET_PASSWORD" = "Wijzig Wachtwoord";
|
||||
"SET_URL" = "Wijzig URL";
|
||||
"SET_NOTES" = "Wijzig Notities";
|
||||
|
||||
"DATABASE" = "Database";
|
||||
"EMAIL" = "E-Mail";
|
||||
"INTERNET" = "Internet";
|
||||
"GENERAL" = "Algemeen";
|
||||
"HOMEBANKING" = "Thuisbankieren";
|
||||
"NETWORK" = "Netwerk";
|
||||
"TRASH" = "Prullenmand";
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
/* Copy */
|
||||
"KPK_GROUP_COPY_%@" = "%@ Kopieer";
|
||||
"KPK_ENTRY_COPY_%@" = "%@ Kopieer";
|
||||
|
||||
/* Validation Errors */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Het Formaat van de Venster Titel is ongeldig!";
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "De Attribuutkey is niet uniek!";
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "De Autotype Sequentie is niet geldig!";
|
||||
|
||||
/* Errors */
|
||||
"ERROR_CORRUPT_TREE" = "De interne bestandsstructuur is corrupt!";
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Verkeerde grootte op dataveld. Verkeerd wachtwoord?";
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Onbekend databeld. Verkeerd wachtwoord?";
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "De databaseversie wordt niet ondersteund";
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Niet ondersteund chipher algoritmd";
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Onbekend bestandsformaat";
|
||||
"ERROR_HEADER_CORRUPTED" = "Header is corrupt";
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Niet ondersteund compressie-algoritme";
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Niet ondersteund random stream type";
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "De intergriteit van de database is niet verzekerd";
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Het wachtwoord en/of de keyfile is niet correct";
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Het XML-bestand mist het KeePassFile-element";
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "Het XML-bestand bevat geen Root node";
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "Het XML-bestand bevat geen Groep node";
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "De header hash komt niet overeen. Bestand corrupt";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "De XML-keyfile mist het key element";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "De XML-keyfile mist the data element";
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Kan geen data van de XML-keyfile lezen";
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "The database header hash is wrong. Data integritiy might be broken!";
|
||||
+110
@@ -0,0 +1,110 @@
|
||||
/* Default name database */
|
||||
"DATABASE" = "Baza danych";
|
||||
|
||||
/* (No Comment) */
|
||||
"EMAIL" = "E-mail";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "Atrybut klucza nie jest unikatowy!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Sekwencja autouzupełnienia jest nieprawidłowa!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_CORRUPT_TREE" = "Struktura pliku jest uszkodzona!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "Plik XML file contains no Group node";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_CORRUPTED" = "Nagłówek jest uszkodzony";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "Suma kontrolna nagłówka jest nieprawidłowa. Plik jest uszkodzony";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Nagłówek bazy danych jest nieprawidłowy. Spójność danych może nie być zachowana!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "Integralność bazy danych jest wątpliwa";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Niewłaściwy rozmiar pola danych. Nieprawidłowe hasło?";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Nieznane pole danych. Nieprawidłowe hasło?";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "Plik XML nie zawiera elementu KeePass";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Hasło i/lub plik klucza jest nieprawidłowe";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "Plik XML nie zawiera głównego węzła";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Nieznany format pliku";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Nieznany algorytm szyfrowania";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Ta wersja bazy danych nie jest wspierana";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Nieobsługiwany algorytm kompresji";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Niewspierany typ generatora pseudolosowego";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Format nazwy okna jest nieprawidłowy!";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Nie można odczytać danych XML z pliku klucza";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "XML pliku z kliczem nie zawiera danych";
|
||||
|
||||
/* (No Comment) */
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "XML pliku z kluczem nie zawiera elementu klucza";
|
||||
|
||||
/* (No Comment) */
|
||||
"GENERAL" = "Ogólne";
|
||||
|
||||
/* (No Comment) */
|
||||
"HOMEBANKING" = "Homebanking";
|
||||
|
||||
/* (No Comment) */
|
||||
"INTERNET" = "Internet";
|
||||
|
||||
/* (No Comment) */
|
||||
"KPK_ENTRY_COPY_%@" = "%@ kopiuj";
|
||||
|
||||
/* (No Comment) */
|
||||
"KPK_GROUP_COPY_%@" = "%@ kopiuj";
|
||||
|
||||
/* (No Comment) */
|
||||
"NETWORK" = "Sieć";
|
||||
|
||||
/* (No Comment) */
|
||||
"SET_NOTES" = "Edit Notes";
|
||||
|
||||
/* (No Comment) */
|
||||
"SET_PASSWORD" = "Edit Password";
|
||||
|
||||
/* (No Comment) */
|
||||
"SET_TITLE" = "Edit Title";
|
||||
|
||||
/* (No Comment) */
|
||||
"SET_URL" = "Edit URL";
|
||||
|
||||
/* (No Comment) */
|
||||
"SET_USERNAME" = "Edit Username";
|
||||
|
||||
/* (No Comment) */
|
||||
"TRASH" = "Kosz";
|
||||
|
||||
/* (No Comment) */
|
||||
"WINDOWS" = "Windows";
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
KPKLocalizable.strings
|
||||
MacPass
|
||||
|
||||
Created by Michael Starke on 20/12/13.
|
||||
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
*/
|
||||
|
||||
"SET_TITLE" = "Изменить Заголовок";
|
||||
"SET_USERNAME" = "Изменить Имя пользователя";
|
||||
"SET_PASSWORD" = "Изменить Пароль";
|
||||
"SET_URL" = "Изменить URL";
|
||||
"SET_NOTES" = "Изменить Заметки";
|
||||
|
||||
"DATABASE" = "База данных";
|
||||
"EMAIL" = "EMail";
|
||||
"GENERAL" = "Общие";
|
||||
"HOMEBANKING" = "Домашний банк";
|
||||
"INTERNET" = "Интернет";
|
||||
"NETWORK" = "Сеть";
|
||||
"TRASH" = "Удалить";
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
/* Copy */
|
||||
"KPK_GROUP_COPY_%@" = "%@ копия";
|
||||
"KPK_ENTRY_COPY_%@" = "%@ копия";
|
||||
|
||||
/* Validation Errors */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "Формат окна заголовка не верный!";
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "Ключ аттрибута не уникален!";
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "Эта последовательность автоввода неверна!";
|
||||
|
||||
/* Errors */
|
||||
"ERROR_CORRUPT_TREE" = "Повреждена внутренняя структура файла!";
|
||||
"ERROR_INVALID_FIELD_SIZE" = "Неверный размер поля данных. Пароль неверный?";
|
||||
"ERROR_INVALID_FIELD_TYPE" = "Неизвестное поле данных. Пароль неверный?";
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "Версия базы данных не поддерживается";
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "Не поддерживается алгоритм шифрования";
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "Неизвестный формат файла";
|
||||
"ERROR_HEADER_CORRUPTED" = "Заголовк поврежден";
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "Не поддерживается алгоритм сжатия";
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "Не поддерживается случайный тип потока";
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "Целостность базы данных не гарантируется";
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "Пароль и/или файл ключа неверный";
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "XML файл не содержит KeePassFile элемент";
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "XML файл не содержит корневой узел";
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "XML файл не содержит узел Group";
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "Неверный хэш заголовка. Файл поврежеден.";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = " XML файл ключа не содержит элемента ключа";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "XML файл ключа не содержит элемента данных";
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "Не могу прочитать данные в XML файле ключа";
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "Хэш заголовка базы данных неверный. Целостность данных может быть нарушена!";
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
KPKLocalizable.strings
|
||||
MacPass
|
||||
|
||||
Created by Michael Starke on 20/12/13.
|
||||
Copyright (c) 2013 HicknHack Software GmbH. All rights reserved.
|
||||
*/
|
||||
|
||||
"SET_TITLE" = "编辑标题";
|
||||
"SET_USERNAME" = "编辑用户名";
|
||||
"SET_PASSWORD" = "编辑密码";
|
||||
"SET_URL" = "编辑 URL";
|
||||
"SET_NOTES" = "编辑注释";
|
||||
|
||||
"DATABASE" = "数据库";
|
||||
"GENERAL" = "通用";
|
||||
"EMAIL" = "电子邮件";
|
||||
"HOMEBANKING" = "家庭银行";
|
||||
"INTERNET" = "互联网";
|
||||
"NETWORK" = "网络";
|
||||
"TRASH" = "废纸篓";
|
||||
"WINDOWS" = "Windows";
|
||||
|
||||
/* Copy */
|
||||
"KPK_GROUP_COPY_%@" = "%@ 拷贝";
|
||||
"KPK_ENTRY_COPY_%@" = "%@ 拷贝";
|
||||
|
||||
/* Validation Errors */
|
||||
"ERROR_WINDOW_TITLE_VALIDATION_FAILED" = "窗口标题格式不正确!";
|
||||
"ERROR_ATTRIBUTE_KEY_VALIDATION_FAILED" = "属性键 (Attribute Key) 不唯一!";
|
||||
"ERROR_AUTOTYPE_SEQUENCE_VALIDATION_FAILED" = "自动键入序列不正确!";
|
||||
|
||||
/* Errors */
|
||||
"ERROR_CORRUPT_TREE" = "内部文件结构已损坏!";
|
||||
"ERROR_INVALID_FIELD_SIZE" = "数据字段大小错误,可能是由于密码错误。";
|
||||
"ERROR_INVALID_FIELD_TYPE" = "未知数据字段,可能是由于密码错误。";
|
||||
"ERROR_UNSUPPORTED_DATABASER_VERSION" = "不支持的数据库版本";
|
||||
"ERROR_UNSUPPORTED_CHIPHER" = "不支持的密码算法";
|
||||
"ERROR_UNKNOWN_FILE_FORMAT" = "未知文件格式";
|
||||
"ERROR_HEADER_CORRUPTED" = "文件头已损坏";
|
||||
"ERROR_UNSUPPORTED_KDBX_COMPRESSION_ALGORITHM" = "不支持的压缩算法";
|
||||
"ERROR_UNSUPPORTED_KDBX_RANDOM_STREAM" = "不支持的随机流 (random stream) 种类";
|
||||
"ERROR_INTEGRITY_CHECK_FAILED" = "数据库完整性已被破坏";
|
||||
"ERROR_PASSWORD_OR_KEYFILE_WRONG" = "密码与/或密钥文件错误";
|
||||
"ERROR_KEEPASSFILE_ELEMENT_MISSING" = "XML 文件缺少 KeePassFile 元素";
|
||||
"ERROR_ROOT_ELEMENT_MISSING" = "XML 文件未包含根节点";
|
||||
"ERROR_GROUP_ELEMENT_MISSING" = "XML 文件未包含组节点";
|
||||
"ERROR_HEADER_HASH_MISSMATCH" = "文件头哈希不匹配,文件已损坏";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_KEY_ELEMENT" = "XML 密钥文件缺少键 (key) 元素";
|
||||
"ERROR_XML_KEYFILE_WITHOUT_DATA_ELEMENT" = "XML 密钥文件缺少数据 (data) 元素";
|
||||
"ERROR_XML_KEYFILE_DATA_PARSING_ERROR" = "无法读取 XML 密钥文件的数据";
|
||||
"ERROR_HEADER_HASH_VERIFICATION_FAILED" = "数据库文件头哈希错误,数据可能已经被破坏!";
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/ModuleCache/19PO9S6FE9ZXX/modules.idx.lock-e1ceaeda
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,3 @@
|
||||
module MyPassCore {
|
||||
header "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/include/MyPassCore-Swift.h"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"": {
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/primary.swiftdeps"
|
||||
},
|
||||
"/Users/kriss/Dev/local/MyPass/MyPassCore/Sources/MyPassCore/Models/ProtectedString.swift": {
|
||||
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.d",
|
||||
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.swift.o",
|
||||
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString~partial.swiftmodule",
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.swiftdeps",
|
||||
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore.build/ProtectedString.dia"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/Users/kriss/Dev/local/MyPass/MyPassCore/Sources/MyPassCore/Models/ProtectedString.swift
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
module MyPassCorePackageTests {
|
||||
header "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/include/MyPassCorePackageTests-Swift.h"
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"": {
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/primary.swiftdeps"
|
||||
},
|
||||
"/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.derived/runner.swift": {
|
||||
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.d",
|
||||
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.swift.o",
|
||||
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner~partial.swiftmodule",
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.swiftdeps",
|
||||
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.build/runner.dia"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCorePackageTests.derived/runner.swift
|
||||
+547
@@ -0,0 +1,547 @@
|
||||
#if canImport(Testing)
|
||||
import Testing
|
||||
#endif
|
||||
|
||||
#if false
|
||||
import Foundation
|
||||
import XCTest
|
||||
|
||||
public final class SwiftPMXCTestObserver: NSObject {
|
||||
public override init() {
|
||||
super.init()
|
||||
XCTestObservationCenter.shared.addTestObserver(self)
|
||||
}
|
||||
}
|
||||
|
||||
extension SwiftPMXCTestObserver: XCTestObservation {
|
||||
var testOutputPath: String {
|
||||
return "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/testOutput.txt"
|
||||
}
|
||||
|
||||
private func write(record: any Encodable) {
|
||||
let lock = FileLock(at: URL(fileURLWithPath: self.testOutputPath + ".lock"))
|
||||
_ = try? lock.withLock {
|
||||
self._write(record: record)
|
||||
}
|
||||
}
|
||||
|
||||
private func _write(record: any Encodable) {
|
||||
if let data = try? JSONEncoder().encode(record) {
|
||||
if let fileHandle = FileHandle(forWritingAtPath: self.testOutputPath) {
|
||||
defer { fileHandle.closeFile() }
|
||||
fileHandle.seekToEndOfFile()
|
||||
fileHandle.write("\n".data(using: .utf8)!)
|
||||
fileHandle.write(data)
|
||||
} else {
|
||||
_ = try? data.write(to: URL(fileURLWithPath: self.testOutputPath))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func testBundleWillStart(_ testBundle: Bundle) {
|
||||
let record = TestBundleEventRecord(bundle: .init(testBundle), event: .start)
|
||||
write(record: TestEventRecord(bundleEvent: record))
|
||||
}
|
||||
|
||||
public func testSuiteWillStart(_ testSuite: XCTestSuite) {
|
||||
let record = TestSuiteEventRecord(suite: .init(testSuite), event: .start)
|
||||
write(record: TestEventRecord(suiteEvent: record))
|
||||
}
|
||||
|
||||
public func testCaseWillStart(_ testCase: XCTestCase) {
|
||||
let record = TestCaseEventRecord(testCase: .init(testCase), event: .start)
|
||||
write(record: TestEventRecord(caseEvent: record))
|
||||
}
|
||||
|
||||
#if canImport(Darwin)
|
||||
public func testCase(_ testCase: XCTestCase, didRecord issue: XCTIssue) {
|
||||
let record = TestCaseFailureRecord(testCase: .init(testCase), issue: .init(issue), failureKind: .unexpected)
|
||||
write(record: TestEventRecord(caseFailure: record))
|
||||
}
|
||||
|
||||
public func testCase(_ testCase: XCTestCase, didRecord expectedFailure: XCTExpectedFailure) {
|
||||
let record = TestCaseFailureRecord(testCase: .init(testCase), issue: .init(expectedFailure.issue), failureKind: .expected(failureReason: expectedFailure.failureReason))
|
||||
write(record: TestEventRecord(caseFailure: record))
|
||||
}
|
||||
#else
|
||||
public func testCase(_ testCase: XCTestCase, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
|
||||
let issue = TestIssue(description: description, inFile: filePath, atLine: lineNumber)
|
||||
let record = TestCaseFailureRecord(testCase: .init(testCase), issue: issue, failureKind: .unexpected)
|
||||
write(record: TestEventRecord(caseFailure: record))
|
||||
}
|
||||
#endif
|
||||
|
||||
public func testCaseDidFinish(_ testCase: XCTestCase) {
|
||||
let record = TestCaseEventRecord(testCase: .init(testCase), event: .finish)
|
||||
write(record: TestEventRecord(caseEvent: record))
|
||||
}
|
||||
|
||||
#if canImport(Darwin)
|
||||
public func testSuite(_ testSuite: XCTestSuite, didRecord issue: XCTIssue) {
|
||||
let record = TestSuiteFailureRecord(suite: .init(testSuite), issue: .init(issue), failureKind: .unexpected)
|
||||
write(record: TestEventRecord(suiteFailure: record))
|
||||
}
|
||||
|
||||
public func testSuite(_ testSuite: XCTestSuite, didRecord expectedFailure: XCTExpectedFailure) {
|
||||
let record = TestSuiteFailureRecord(suite: .init(testSuite), issue: .init(expectedFailure.issue), failureKind: .expected(failureReason: expectedFailure.failureReason))
|
||||
write(record: TestEventRecord(suiteFailure: record))
|
||||
}
|
||||
#else
|
||||
public func testSuite(_ testSuite: XCTestSuite, didFailWithDescription description: String, inFile filePath: String?, atLine lineNumber: Int) {
|
||||
let issue = TestIssue(description: description, inFile: filePath, atLine: lineNumber)
|
||||
let record = TestSuiteFailureRecord(suite: .init(testSuite), issue: issue, failureKind: .unexpected)
|
||||
write(record: TestEventRecord(suiteFailure: record))
|
||||
}
|
||||
#endif
|
||||
|
||||
public func testSuiteDidFinish(_ testSuite: XCTestSuite) {
|
||||
let record = TestSuiteEventRecord(suite: .init(testSuite), event: .finish)
|
||||
write(record: TestEventRecord(suiteEvent: record))
|
||||
}
|
||||
|
||||
public func testBundleDidFinish(_ testBundle: Bundle) {
|
||||
let record = TestBundleEventRecord(bundle: .init(testBundle), event: .finish)
|
||||
write(record: TestEventRecord(bundleEvent: record))
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Copied from `Lock.swift` in TSCBasic, would be nice if we had a better way
|
||||
|
||||
#if canImport(Glibc)
|
||||
@_exported import Glibc
|
||||
#elseif canImport(Musl)
|
||||
@_exported import Musl
|
||||
#elseif os(Windows)
|
||||
@_exported import CRT
|
||||
@_exported import WinSDK
|
||||
#elseif os(WASI)
|
||||
@_exported import WASILibc
|
||||
#elseif canImport(Android)
|
||||
@_exported import Android
|
||||
#else
|
||||
@_exported import Darwin.C
|
||||
#endif
|
||||
|
||||
import Foundation
|
||||
|
||||
public final class FileLock {
|
||||
#if os(Windows)
|
||||
private var handle: HANDLE?
|
||||
#else
|
||||
private var fileDescriptor: CInt?
|
||||
#endif
|
||||
|
||||
private let lockFile: URL
|
||||
|
||||
public init(at lockFile: URL) {
|
||||
self.lockFile = lockFile
|
||||
}
|
||||
|
||||
public func lock() throws {
|
||||
#if os(Windows)
|
||||
if handle == nil {
|
||||
let h: HANDLE = lockFile.path.withCString(encodedAs: UTF16.self, {
|
||||
CreateFileW(
|
||||
$0,
|
||||
UInt32(GENERIC_READ) | UInt32(GENERIC_WRITE),
|
||||
UInt32(FILE_SHARE_READ) | UInt32(FILE_SHARE_WRITE),
|
||||
nil,
|
||||
DWORD(OPEN_ALWAYS),
|
||||
DWORD(FILE_ATTRIBUTE_NORMAL),
|
||||
nil
|
||||
)
|
||||
})
|
||||
if h == INVALID_HANDLE_VALUE {
|
||||
throw FileSystemError(errno: Int32(GetLastError()), lockFile)
|
||||
}
|
||||
self.handle = h
|
||||
}
|
||||
var overlapped = OVERLAPPED()
|
||||
overlapped.Offset = 0
|
||||
overlapped.OffsetHigh = 0
|
||||
overlapped.hEvent = nil
|
||||
if !LockFileEx(handle, DWORD(LOCKFILE_EXCLUSIVE_LOCK), 0,
|
||||
UInt32.max, UInt32.max, &overlapped) {
|
||||
throw ProcessLockError.unableToAquireLock(errno: Int32(GetLastError()))
|
||||
}
|
||||
#elseif os(WASI)
|
||||
// WASI doesn't support flock
|
||||
#else
|
||||
if fileDescriptor == nil {
|
||||
let fd = open(lockFile.path, O_WRONLY | O_CREAT | O_CLOEXEC, 0o666)
|
||||
if fd == -1 {
|
||||
fatalError("errno: \(errno), lockFile: \(lockFile)")
|
||||
}
|
||||
self.fileDescriptor = fd
|
||||
}
|
||||
while true {
|
||||
if flock(fileDescriptor!, LOCK_EX) == 0 {
|
||||
break
|
||||
}
|
||||
if errno == EINTR { continue }
|
||||
fatalError("unable to acquire lock, errno: \(errno)")
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public func unlock() {
|
||||
#if os(Windows)
|
||||
var overlapped = OVERLAPPED()
|
||||
overlapped.Offset = 0
|
||||
overlapped.OffsetHigh = 0
|
||||
overlapped.hEvent = nil
|
||||
UnlockFileEx(handle, 0, UInt32.max, UInt32.max, &overlapped)
|
||||
#elseif os(WASI)
|
||||
// WASI doesn't support flock
|
||||
#else
|
||||
guard let fd = fileDescriptor else { return }
|
||||
flock(fd, LOCK_UN)
|
||||
#endif
|
||||
}
|
||||
|
||||
deinit {
|
||||
#if os(Windows)
|
||||
guard let handle = handle else { return }
|
||||
CloseHandle(handle)
|
||||
#elseif os(WASI)
|
||||
// WASI doesn't support flock
|
||||
#else
|
||||
guard let fd = fileDescriptor else { return }
|
||||
close(fd)
|
||||
#endif
|
||||
}
|
||||
|
||||
public func withLock<T>(_ body: () throws -> T) throws -> T {
|
||||
try lock()
|
||||
defer { unlock() }
|
||||
return try body()
|
||||
}
|
||||
|
||||
public func withLock<T>(_ body: () async throws -> T) async throws -> T {
|
||||
try lock()
|
||||
defer { unlock() }
|
||||
return try await body()
|
||||
}
|
||||
}
|
||||
|
||||
// FIXME: Copied from `XCTEvents.swift`, would be nice if we had a better way
|
||||
|
||||
struct TestEventRecord: Codable {
|
||||
let caseFailure: TestCaseFailureRecord?
|
||||
let suiteFailure: TestSuiteFailureRecord?
|
||||
|
||||
let bundleEvent: TestBundleEventRecord?
|
||||
let suiteEvent: TestSuiteEventRecord?
|
||||
let caseEvent: TestCaseEventRecord?
|
||||
|
||||
init(
|
||||
caseFailure: TestCaseFailureRecord? = nil,
|
||||
suiteFailure: TestSuiteFailureRecord? = nil,
|
||||
bundleEvent: TestBundleEventRecord? = nil,
|
||||
suiteEvent: TestSuiteEventRecord? = nil,
|
||||
caseEvent: TestCaseEventRecord? = nil
|
||||
) {
|
||||
self.caseFailure = caseFailure
|
||||
self.suiteFailure = suiteFailure
|
||||
self.bundleEvent = bundleEvent
|
||||
self.suiteEvent = suiteEvent
|
||||
self.caseEvent = caseEvent
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Records
|
||||
|
||||
struct TestAttachment: Codable {
|
||||
let name: String?
|
||||
// TODO: Handle `userInfo: [AnyHashable : Any]?`
|
||||
let uniformTypeIdentifier: String
|
||||
let payload: Data?
|
||||
}
|
||||
|
||||
struct TestBundleEventRecord: Codable {
|
||||
let bundle: TestBundle
|
||||
let event: TestEvent
|
||||
}
|
||||
|
||||
struct TestCaseEventRecord: Codable {
|
||||
let testCase: TestCase
|
||||
let event: TestEvent
|
||||
}
|
||||
|
||||
struct TestCaseFailureRecord: Codable, CustomStringConvertible {
|
||||
let testCase: TestCase
|
||||
let issue: TestIssue
|
||||
let failureKind: TestFailureKind
|
||||
|
||||
var description: String {
|
||||
return "\(issue.sourceCodeContext.description)\(testCase) \(issue.compactDescription)"
|
||||
}
|
||||
}
|
||||
|
||||
struct TestSuiteEventRecord: Codable {
|
||||
let suite: TestSuiteRecord
|
||||
let event: TestEvent
|
||||
}
|
||||
|
||||
struct TestSuiteFailureRecord: Codable {
|
||||
let suite: TestSuiteRecord
|
||||
let issue: TestIssue
|
||||
let failureKind: TestFailureKind
|
||||
}
|
||||
|
||||
// MARK: Primitives
|
||||
|
||||
struct TestBundle: Codable {
|
||||
let bundleIdentifier: String?
|
||||
let bundlePath: String
|
||||
}
|
||||
|
||||
struct TestCase: Codable {
|
||||
let name: String
|
||||
}
|
||||
|
||||
struct TestErrorInfo: Codable {
|
||||
let description: String
|
||||
let type: String
|
||||
}
|
||||
|
||||
enum TestEvent: Codable {
|
||||
case start
|
||||
case finish
|
||||
}
|
||||
|
||||
enum TestFailureKind: Codable, Equatable {
|
||||
case unexpected
|
||||
case expected(failureReason: String?)
|
||||
|
||||
var isExpected: Bool {
|
||||
switch self {
|
||||
case .expected: return true
|
||||
case .unexpected: return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TestIssue: Codable {
|
||||
let type: TestIssueType
|
||||
let compactDescription: String
|
||||
let detailedDescription: String?
|
||||
let associatedError: TestErrorInfo?
|
||||
let sourceCodeContext: TestSourceCodeContext
|
||||
let attachments: [TestAttachment]
|
||||
}
|
||||
|
||||
enum TestIssueType: Codable {
|
||||
case assertionFailure
|
||||
case performanceRegression
|
||||
case system
|
||||
case thrownError
|
||||
case uncaughtException
|
||||
case unmatchedExpectedFailure
|
||||
case unknown
|
||||
}
|
||||
|
||||
struct TestLocation: Codable, CustomStringConvertible {
|
||||
let file: String
|
||||
let line: Int
|
||||
|
||||
var description: String {
|
||||
return "\(file):\(line) "
|
||||
}
|
||||
}
|
||||
|
||||
struct TestSourceCodeContext: Codable, CustomStringConvertible {
|
||||
let callStack: [TestSourceCodeFrame]
|
||||
let location: TestLocation?
|
||||
|
||||
var description: String {
|
||||
return location?.description ?? ""
|
||||
}
|
||||
}
|
||||
|
||||
struct TestSourceCodeFrame: Codable {
|
||||
let address: UInt64
|
||||
let symbolInfo: TestSourceCodeSymbolInfo?
|
||||
let symbolicationError: TestErrorInfo?
|
||||
}
|
||||
|
||||
struct TestSourceCodeSymbolInfo: Codable {
|
||||
let imageName: String
|
||||
let symbolName: String
|
||||
let location: TestLocation?
|
||||
}
|
||||
|
||||
struct TestSuiteRecord: Codable {
|
||||
let name: String
|
||||
}
|
||||
|
||||
// MARK: XCTest compatibility
|
||||
|
||||
extension TestIssue {
|
||||
init(description: String, inFile filePath: String?, atLine lineNumber: Int) {
|
||||
let location: TestLocation?
|
||||
if let filePath = filePath {
|
||||
location = .init(file: filePath, line: lineNumber)
|
||||
} else {
|
||||
location = nil
|
||||
}
|
||||
self.init(type: .assertionFailure, compactDescription: description, detailedDescription: description, associatedError: nil, sourceCodeContext: .init(callStack: [], location: location), attachments: [])
|
||||
}
|
||||
}
|
||||
|
||||
import XCTest
|
||||
|
||||
#if canImport(Darwin) // XCTAttachment is unavailable in swift-corelibs-xctest.
|
||||
extension TestAttachment {
|
||||
init(_ attachment: XCTAttachment) {
|
||||
self.init(
|
||||
name: attachment.name,
|
||||
uniformTypeIdentifier: attachment.uniformTypeIdentifier,
|
||||
payload: attachment.value(forKey: "payload") as? Data
|
||||
)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
extension TestBundle {
|
||||
init(_ testBundle: Bundle) {
|
||||
self.init(
|
||||
bundleIdentifier: testBundle.bundleIdentifier,
|
||||
bundlePath: testBundle.bundlePath
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension TestCase {
|
||||
init(_ testCase: XCTestCase) {
|
||||
self.init(name: testCase.name)
|
||||
}
|
||||
}
|
||||
|
||||
extension TestErrorInfo {
|
||||
init(_ error: any Swift.Error) {
|
||||
self.init(description: "\(error)", type: "\(Swift.type(of: error))")
|
||||
}
|
||||
}
|
||||
|
||||
#if canImport(Darwin) // XCTIssue is unavailable in swift-corelibs-xctest.
|
||||
extension TestIssue {
|
||||
init(_ issue: XCTIssue) {
|
||||
self.init(
|
||||
type: .init(issue.type),
|
||||
compactDescription: issue.compactDescription,
|
||||
detailedDescription: issue.detailedDescription,
|
||||
associatedError: issue.associatedError.map { .init($0) },
|
||||
sourceCodeContext: .init(issue.sourceCodeContext),
|
||||
attachments: issue.attachments.map { .init($0) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension TestIssueType {
|
||||
init(_ type: XCTIssue.IssueType) {
|
||||
switch type {
|
||||
case .assertionFailure: self = .assertionFailure
|
||||
case .thrownError: self = .thrownError
|
||||
case .uncaughtException: self = .uncaughtException
|
||||
case .performanceRegression: self = .performanceRegression
|
||||
case .system: self = .system
|
||||
case .unmatchedExpectedFailure: self = .unmatchedExpectedFailure
|
||||
@unknown default: self = .unknown
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if canImport(Darwin) // XCTSourceCodeLocation/XCTSourceCodeContext/XCTSourceCodeFrame/XCTSourceCodeSymbolInfo is unavailable in swift-corelibs-xctest.
|
||||
extension TestLocation {
|
||||
init(_ location: XCTSourceCodeLocation) {
|
||||
self.init(
|
||||
file: location.fileURL.absoluteString,
|
||||
line: location.lineNumber
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension TestSourceCodeContext {
|
||||
init(_ context: XCTSourceCodeContext) {
|
||||
self.init(
|
||||
callStack: context.callStack.map { .init($0) },
|
||||
location: context.location.map { .init($0) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension TestSourceCodeFrame {
|
||||
init(_ frame: XCTSourceCodeFrame) {
|
||||
self.init(
|
||||
address: frame.address,
|
||||
symbolInfo: (try? frame.symbolInfo()).map { .init($0) },
|
||||
symbolicationError: frame.symbolicationError.map { .init($0) }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension TestSourceCodeSymbolInfo {
|
||||
init(_ symbolInfo: XCTSourceCodeSymbolInfo) {
|
||||
self.init(
|
||||
imageName: symbolInfo.imageName,
|
||||
symbolName: symbolInfo.symbolName,
|
||||
location: symbolInfo.location.map { .init($0) }
|
||||
)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
extension TestSuiteRecord {
|
||||
init(_ testSuite: XCTestSuite) {
|
||||
self.init(name: testSuite.name)
|
||||
}
|
||||
}
|
||||
|
||||
import XCTest
|
||||
|
||||
#endif
|
||||
|
||||
@main
|
||||
@available(macOS 10.15, iOS 11, watchOS 4, tvOS 11, *)
|
||||
@available(*, deprecated, message: "Not actually deprecated. Marked as deprecated to allow inclusion of deprecated tests (which test deprecated functionality) without warnings")
|
||||
struct Runner {
|
||||
private static func testingLibrary() -> String {
|
||||
var iterator = CommandLine.arguments.makeIterator()
|
||||
while let argument = iterator.next() {
|
||||
if argument == "--testing-library", let libraryName = iterator.next() {
|
||||
return libraryName.lowercased()
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback if not specified: run XCTest (legacy behavior)
|
||||
return "xctest"
|
||||
}
|
||||
|
||||
#if false
|
||||
@_silgen_name("$ss13_runAsyncMainyyyyYaKcF")
|
||||
private static func _runAsyncMain(_ asyncFun: @Sendable @escaping () async throws -> ())
|
||||
#endif
|
||||
|
||||
static func main() async {
|
||||
let testingLibrary = Self.testingLibrary()
|
||||
#if canImport(Testing)
|
||||
if testingLibrary == "swift-testing" {
|
||||
#if false
|
||||
_runAsyncMain {
|
||||
await Testing.__swiftPMEntryPoint() as Never
|
||||
}
|
||||
#else
|
||||
await Testing.__swiftPMEntryPoint() as Never
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if false
|
||||
if testingLibrary == "xctest" {
|
||||
|
||||
XCTMain(__allDiscoveredTests()) as Never
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
import Foundation
|
||||
|
||||
extension Foundation.Bundle {
|
||||
static let module: Bundle = {
|
||||
let mainPath = Bundle.main.bundleURL.appendingPathComponent("MyPassCore_MyPassCoreTests.bundle").path
|
||||
let buildPath = "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCore_MyPassCoreTests.bundle"
|
||||
|
||||
let preferredBundle = Bundle(path: mainPath)
|
||||
|
||||
guard let bundle = preferredBundle ?? Bundle(path: buildPath) else {
|
||||
// Users can write a function called fatalError themselves, we should be resilient against that.
|
||||
Swift.fatalError("could not load resource bundle: from \(mainPath) or \(buildPath)")
|
||||
}
|
||||
|
||||
return bundle
|
||||
}()
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"": {
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/primary.swiftdeps"
|
||||
},
|
||||
"/Users/kriss/Dev/local/MyPass/MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift": {
|
||||
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.d",
|
||||
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.swift.o",
|
||||
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests~partial.swiftmodule",
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.swiftdeps",
|
||||
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/ProtectedStringTests.dia"
|
||||
},
|
||||
"/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/DerivedSources/resource_bundle_accessor.swift": {
|
||||
"dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.d",
|
||||
"object": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.swift.o",
|
||||
"swiftmodule": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor~partial.swiftmodule",
|
||||
"swift-dependencies": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.swiftdeps",
|
||||
"diagnostics": "/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/resource_bundle_accessor.dia"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
/Users/kriss/Dev/local/MyPass/MyPassCore/Tests/MyPassCoreTests/ProtectedStringTests.swift
|
||||
/Users/kriss/Dev/local/MyPass/MyPassCore/.build/arm64-apple-macosx/debug/MyPassCoreTests.build/DerivedSources/resource_bundle_accessor.swift
|
||||
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user