Fix importing of sites.
[FIXED] Parsing mpsites for import.
This commit is contained in:
parent
587461144b
commit
eb4e25c0ba
2
External/iCloudStoreManager
vendored
2
External/iCloudStoreManager
vendored
@ -1 +1 @@
|
||||
Subproject commit 71cfb8f4e21a536f5d88a69401f02eeaf1c0a89f
|
||||
Subproject commit 01f70ef927d497fb179688b1e2da0b25f80ec425
|
@ -4092,7 +4092,7 @@
|
||||
CLANG_WARN_OBJCPP_ARC_ABI = YES;
|
||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
|
||||
CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Maarten Billemont (DWGU95U4ZD)";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
@ -4132,6 +4132,7 @@
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_LDFLAGS = "-ObjC";
|
||||
PRODUCT_NAME = "${TARGET_NAME}";
|
||||
"PROVISIONING_PROFILE[sdk=iphoneos*]" = "8CFABC40-E134-41B3-83D3-DD64DE74903D";
|
||||
SDKROOT = iphoneos;
|
||||
SKIP_INSTALL = YES;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
|
@ -269,13 +269,13 @@ static NSDateFormatter *rfc3339DateFormatter = nil;
|
||||
}
|
||||
|
||||
// Header
|
||||
if ([headerPattern numberOfMatchesInString:importedSiteLine options:0 range:NSRangeFromString(importedSiteLine)] != 2) {
|
||||
if ([headerPattern numberOfMatchesInString:importedSiteLine options:0 range:NSMakeRange(0, [importedSiteLine length])] != 1) {
|
||||
err(@"Invalid header format in line: %@", importedSiteLine);
|
||||
return MPImportResultMalformedInput;
|
||||
}
|
||||
NSArray *headerElements = [headerPattern matchesInString:importedSiteLine options:0 range:NSRangeFromString(importedSiteLine)];
|
||||
NSString *key = [importedSiteLine substringWithRange:[[headerElements objectAtIndex:0] range]];
|
||||
NSString *value = [importedSiteLine substringWithRange:[[headerElements objectAtIndex:1] range]];
|
||||
NSTextCheckingResult *headerElements = [[headerPattern matchesInString:importedSiteLine options:0 range:NSMakeRange(0, [importedSiteLine length])] lastObject];
|
||||
NSString *key = [importedSiteLine substringWithRange:[headerElements rangeAtIndex:1]];
|
||||
NSString *value = [importedSiteLine substringWithRange:[headerElements rangeAtIndex:2]];
|
||||
if ([key isEqualToString:@"Key ID"]) {
|
||||
if (![(keyID = value) isEqualToString:[keyHashForPassword(password) encodeHex]])
|
||||
return MPImportResultInvalidPassword;
|
||||
@ -291,16 +291,16 @@ static NSDateFormatter *rfc3339DateFormatter = nil;
|
||||
continue;
|
||||
|
||||
// Site
|
||||
if ([sitePattern numberOfMatchesInString:importedSiteLine options:0 range:NSRangeFromString(importedSiteLine)] != 2) {
|
||||
if ([sitePattern numberOfMatchesInString:importedSiteLine options:0 range:NSMakeRange(0, [importedSiteLine length])] != 1) {
|
||||
err(@"Invalid site format in line: %@", importedSiteLine);
|
||||
return MPImportResultMalformedInput;
|
||||
}
|
||||
NSArray *siteElements = [headerPattern matchesInString:importedSiteLine options:0 range:NSRangeFromString(importedSiteLine)];
|
||||
NSString *lastUsed = [importedSiteLine substringWithRange:[[siteElements objectAtIndex:0] range]];
|
||||
NSString *uses = [importedSiteLine substringWithRange:[[siteElements objectAtIndex:1] range]];
|
||||
NSString *type = [importedSiteLine substringWithRange:[[siteElements objectAtIndex:2] range]];
|
||||
NSString *name = [importedSiteLine substringWithRange:[[siteElements objectAtIndex:3] range]];
|
||||
NSString *exportContent = [importedSiteLine substringWithRange:[[siteElements objectAtIndex:4] range]];
|
||||
NSTextCheckingResult *siteElements = [[sitePattern matchesInString:importedSiteLine options:0 range:NSMakeRange(0, [importedSiteLine length])] lastObject];
|
||||
NSString *lastUsed = [importedSiteLine substringWithRange:[siteElements rangeAtIndex:1]];
|
||||
NSString *uses = [importedSiteLine substringWithRange:[siteElements rangeAtIndex:2]];
|
||||
NSString *type = [importedSiteLine substringWithRange:[siteElements rangeAtIndex:3]];
|
||||
NSString *name = [importedSiteLine substringWithRange:[siteElements rangeAtIndex:4]];
|
||||
NSString *exportContent = [importedSiteLine substringWithRange:[siteElements rangeAtIndex:5]];
|
||||
|
||||
// Find existing site.
|
||||
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name == %@ AND keyID == %@", name, keyID];
|
||||
@ -320,8 +320,10 @@ static NSDateFormatter *rfc3339DateFormatter = nil;
|
||||
|
||||
// Delete existing sites.
|
||||
[elementsToDelete enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
|
||||
dbg(@"Deleting: %@", [obj name]);
|
||||
[self.managedObjectContext deleteObject:obj];
|
||||
}];
|
||||
[self saveContext];
|
||||
|
||||
// Import new sites.
|
||||
for (NSArray *siteElements in importedSiteElements) {
|
||||
@ -332,15 +334,18 @@ static NSDateFormatter *rfc3339DateFormatter = nil;
|
||||
NSString *exportContent = [siteElements objectAtIndex:4];
|
||||
|
||||
// Create new site.
|
||||
dbg(@"Creating: name=%@, lastUsed=%@, uses=%d, type=%u, keyID=%@", name, lastUsed, uses, type, keyID);
|
||||
MPElementEntity *element = [NSEntityDescription insertNewObjectForEntityForName:ClassNameFromMPElementType(type)
|
||||
inManagedObjectContext:self.managedObjectContext];
|
||||
element.lastUsed = [lastUsed timeIntervalSinceReferenceDate];
|
||||
element.uses = uses;
|
||||
element.type = type;
|
||||
element.name = name;
|
||||
element.keyID = keyID;
|
||||
element.type = type;
|
||||
element.uses = uses;
|
||||
element.lastUsed = [lastUsed timeIntervalSinceReferenceDate];
|
||||
if ([exportContent length])
|
||||
[element importContent:exportContent];
|
||||
}
|
||||
[self saveContext];
|
||||
|
||||
return MPImportResultSuccess;
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1171" systemVersion="11D50" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
|
||||
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1171" systemVersion="11E53" minimumToolsVersion="Automatic" macOSVersion="Automatic" iOSVersion="Automatic">
|
||||
<entity name="MPElementEntity" representedClassName="MPElementEntity" isAbstract="YES" syncable="YES">
|
||||
<attribute name="keyID" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<attribute name="keyID" attributeType="String" indexed="YES" syncable="YES" isSyncIdentityProperty="YES"/>
|
||||
<attribute name="lastUsed" attributeType="Date" syncable="YES"/>
|
||||
<attribute name="name" attributeType="String" indexed="YES" syncable="YES"/>
|
||||
<attribute name="name" attributeType="String" minValueString="1" indexed="YES" syncable="YES" isSyncIdentityProperty="YES"/>
|
||||
<attribute name="type" attributeType="Integer 16" defaultValueString="16" syncable="YES"/>
|
||||
<attribute name="uses" attributeType="Integer 16" defaultValueString="0" syncable="YES"/>
|
||||
</entity>
|
||||
|
@ -37,8 +37,20 @@
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var is_ssl = ("https:" == document.location.protocol);
|
||||
var asset_host = is_ssl ? "https://d3rdqalhjaisuu.cloudfront.net/" : "http://d3rdqalhjaisuu.cloudfront.net/";
|
||||
document.write(unescape("%3Cscript src='" + asset_host + "javascripts/feedback-v2.js' type='text/javascript'%3E%3C/script%3E"));
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var feedback_widget_options = {};
|
||||
feedback_widget_options.display = "overlay";
|
||||
feedback_widget_options.company = "lyndir";
|
||||
feedback_widget_options.placement = "right";
|
||||
feedback_widget_options.color = "#222";
|
||||
feedback_widget_options.style = "question";
|
||||
var feedback_widget = new GSFN.feedback_widget(feedback_widget_options);
|
||||
</script>
|
||||
<body>
|
||||
<header>
|
||||
|
||||
|
@ -28,6 +28,20 @@
|
||||
navigateTo(document.location.hash.substring(1));
|
||||
});
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var is_ssl = ("https:" == document.location.protocol);
|
||||
var asset_host = is_ssl ? "https://d3rdqalhjaisuu.cloudfront.net/" : "http://d3rdqalhjaisuu.cloudfront.net/";
|
||||
document.write(unescape("<script src='" + asset_host + "javascripts/feedback-v2.js' type='text/javascript'></script>"));
|
||||
</script>
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
var feedback_widget_options = {};
|
||||
feedback_widget_options.display = "overlay";
|
||||
feedback_widget_options.company = "lyndir";
|
||||
feedback_widget_options.placement = "left";
|
||||
feedback_widget_options.color = "#222";
|
||||
feedback_widget_options.style = "question";
|
||||
var feedback_widget = new GSFN.feedback_widget(feedback_widget_options);
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
Loading…
Reference in New Issue
Block a user