Skip to content

Commit 827c95b

Browse files
committed
Soft errors for User consistency checks _checkSaveParametersWithCurrentUser
1 parent b9fd194 commit 827c95b

File tree

3 files changed

+31
-19
lines changed

3 files changed

+31
-19
lines changed

Parse/Parse/Internal/Object/PFObjectPrivate.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@
207207
///--------------------------------------
208208
#pragma mark - Validations
209209
///--------------------------------------
210-
- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser;
210+
- (BOOL)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser error:(NSError **)error;
211211
/**
212212
Checks if Parse class name could be used to initialize a given instance of PFObject or it's subclass.
213213
*/

Parse/Parse/PFObject.m

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,10 @@ + (BFTask *)_deepSaveAsyncChildrenOfObject:(id)object withCurrentUser:(PFUser *)
461461
PFRESTCommand *command = nil;
462462
@synchronized ([object lock]) {
463463
[object _objectWillSave];
464-
[object _checkSaveParametersWithCurrentUser:currentUser];
465464
NSError *error;
465+
if (![object _checkSaveParametersWithCurrentUser:currentUser error:&error] && error) {
466+
return error;
467+
}
466468
command = [object _constructSaveCommandForChanges:[object unsavedChanges]
467469
sessionToken:sessionToken
468470
objectEncoder:[PFPointerObjectEncoder objectEncoder]
@@ -716,7 +718,7 @@ - (BOOL)isDataAvailableForKey:(NSString *)key {
716718
///--------------------------------------
717719

718720
// Validations that are done on save. For now, there is nothing.
719-
- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser {
721+
- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser error:(NSError **) error {
720722
return;
721723
}
722724

@@ -1091,18 +1093,21 @@ - (BFTask *)_enqueueSaveEventuallyWithChildren:(BOOL)saveChildren {
10911093
PFOperationSet *changes = [self unsavedChanges];
10921094
changes.saveEventually = YES;
10931095
[self startSave];
1094-
[self _checkSaveParametersWithCurrentUser:currentUser];
10951096
NSError *error;
1096-
PFRESTCommand *command = [self _constructSaveCommandForChanges:changes
1097-
sessionToken:sessionToken
1098-
objectEncoder:[PFPointerOrLocalIdObjectEncoder objectEncoder]
1099-
error:&error];
1100-
if (!command && error) {
1097+
if (![self _checkSaveParametersWithCurrentUser:currentUser error:&error] && error) {
11011098
saveTask = [BFTask taskWithError:error];
1102-
} else {
1103-
// Enqueue the eventually operation!
1104-
saveTask = [[Parse _currentManager].eventuallyQueue enqueueCommandInBackground:command withObject:self];
1105-
[self _enqueueSaveEventuallyOperationAsync:changes];
1099+
} else {
1100+
PFRESTCommand *command = [self _constructSaveCommandForChanges:changes
1101+
sessionToken:sessionToken
1102+
objectEncoder:[PFPointerOrLocalIdObjectEncoder objectEncoder]
1103+
error:&error];
1104+
if (!command && error) {
1105+
saveTask = [BFTask taskWithError:error];
1106+
} else {
1107+
// Enqueue the eventually operation!
1108+
saveTask = [[Parse _currentManager].eventuallyQueue enqueueCommandInBackground:command withObject:self];
1109+
[self _enqueueSaveEventuallyOperationAsync:changes];
1110+
}
11061111
}
11071112
}
11081113
saveTask = [saveTask continueWithBlock:^id(BFTask *task) {
@@ -1410,8 +1415,10 @@ - (BFTask *)saveAsync:(BFTask *)toAwait {
14101415
return childrenTask;
14111416
}
14121417
return [[childrenTask continueWithSuccessBlock:^id(BFTask *task) {
1413-
[self _checkSaveParametersWithCurrentUser:currentUser];
14141418
NSError *error;
1419+
if (![self _checkSaveParametersWithCurrentUser:currentUser error:&error] && error) {
1420+
return error;
1421+
}
14151422
PFRESTCommand *command = [self _constructSaveCommandForChanges:changes
14161423
sessionToken:sessionToken
14171424
objectEncoder:[PFPointerObjectEncoder objectEncoder]

Parse/Parse/PFUser.m

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,20 @@ + (void)_assertValidInstanceClassName:(NSString *)className {
134134
}
135135

136136
// Checks the properties on the object before saving.
137-
- (void)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser {
137+
- (BOOL)_checkSaveParametersWithCurrentUser:(PFUser *)currentUser error:(NSError **)error {
138138
@synchronized([self lock]) {
139-
PFConsistencyAssert(self.objectId || self._lazy,
139+
PFConsistencyError(error,
140+
self.objectId || self._lazy,
141+
NO,
140142
@"User cannot be saved unless they are already signed up. Call signUp first.");
141143

142-
PFConsistencyAssert([self _isAuthenticatedWithCurrentUser:currentUser] ||
143-
[self.objectId isEqualToString:currentUser.objectId],
144-
@"User cannot be saved unless they have been authenticated via logIn or signUp", nil);
144+
PFConsistencyError(error,
145+
[self _isAuthenticatedWithCurrentUser:currentUser] ||
146+
[self.objectId isEqualToString:currentUser.objectId],
147+
NO,
148+
@"User cannot be saved unless they have been authenticated via logIn or signUp");
145149
}
150+
return YES;
146151
}
147152

148153
// Checks the properties on the object before signUp.

0 commit comments

Comments
 (0)