1// Copyright 2015-present 650 Industries. All rights reserved.
2
3#if __has_include(<EXFileSystem/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