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