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