1// Copyright 2015-present 650 Industries. All rights reserved. 2#import "EXScopedFilePermissionModule.h" 3#import <UMFileSystemInterface/UMFileSystemInterface.h> 4#import <UMConstantsInterface/UMConstantsInterface.h> 5 6@interface EXFilePermissionModule (Protected) 7 8- (UMFileSystemPermissionFlags)getExternalPathPermissions:(NSString *)path; 9 10@end 11 12@interface EXScopedFilePermissionModule () 13 14@property (nonatomic, assign) BOOL isDetached; 15 16@end 17 18@implementation EXScopedFilePermissionModule 19 20- (instancetype)initWithConstantsBinding:(EXConstantsBinding *)constantsBinding 21{ 22 if (self = [super init]) { 23 _isDetached = ![constantsBinding.appOwnership isEqualToString:@"expo"]; 24 } 25 return self; 26} 27 28- (UMFileSystemPermissionFlags)getExternalPathPermissions:(NSString *)path 29{ 30 // may block access to external paths which contain "ExponentExperienceData" 31 if (![self shouldForbidAccessToExternalDirectories] || (![path containsString:@"ExponentExperienceData"])) { 32 return [super getExternalPathPermissions:path]; 33 } 34 return UMFileSystemPermissionNone; 35} 36 37- (BOOL)shouldForbidAccessToExternalDirectories { 38 return !_isDetached; 39} 40 41@end 42