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