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