1712e5c6cSSzymon20000// Copyright 2015-present 650 Industries. All rights reserved.
2631604b1STomasz Sapeta
3*51e273e0STomasz Sapeta#if __has_include(<ExpoFileSystem/EXFilePermissionModule.h>)
4712e5c6cSSzymon20000#import "EXScopedFilePermissionModule.h"
5fffbdb31STomasz Sapeta#import <ExpoModulesCore/EXFileSystemInterface.h>
6712e5c6cSSzymon20000
7c9802ebaSStanisław Chmiela@interface EXFilePermissionModule (Protected)
8c9802ebaSStanisław Chmiela
9fffbdb31STomasz Sapeta- (EXFileSystemPermissionFlags)getExternalPathPermissions:(NSString *)path;
10c9802ebaSStanisław Chmiela
11c9802ebaSStanisław Chmiela@end
12c9802ebaSStanisław Chmiela
13c9802ebaSStanisław Chmiela@interface EXScopedFilePermissionModule ()
14c9802ebaSStanisław Chmiela
15c9802ebaSStanisław Chmiela@property (nonatomic, assign) BOOL isDetached;
16c9802ebaSStanisław Chmiela
17c9802ebaSStanisław Chmiela@end
18c9802ebaSStanisław Chmiela
19712e5c6cSSzymon20000@implementation EXScopedFilePermissionModule
20712e5c6cSSzymon20000
21c9802ebaSStanisław Chmiela- (instancetype)initWithConstantsBinding:(EXConstantsBinding *)constantsBinding
22c9802ebaSStanisław Chmiela{
23c9802ebaSStanisław Chmiela  if (self = [super init]) {
24c9802ebaSStanisław Chmiela    _isDetached = ![constantsBinding.appOwnership isEqualToString:@"expo"];
25c9802ebaSStanisław Chmiela  }
26c9802ebaSStanisław Chmiela  return self;
27c9802ebaSStanisław Chmiela}
28c9802ebaSStanisław Chmiela
29fffbdb31STomasz Sapeta- (EXFileSystemPermissionFlags)getExternalPathPermissions:(NSString *)path
30712e5c6cSSzymon20000{
31712e5c6cSSzymon20000  // may block access to external paths which contain "ExponentExperienceData"
32712e5c6cSSzymon20000  if (![self shouldForbidAccessToExternalDirectories] || (![path containsString:@"ExponentExperienceData"])) {
33712e5c6cSSzymon20000    return [super getExternalPathPermissions:path];
34712e5c6cSSzymon20000  }
35fffbdb31STomasz Sapeta  return EXFileSystemPermissionNone;
36712e5c6cSSzymon20000}
37712e5c6cSSzymon20000
38712e5c6cSSzymon20000- (BOOL)shouldForbidAccessToExternalDirectories {
39c9802ebaSStanisław Chmiela  return !_isDetached;
40712e5c6cSSzymon20000}
41712e5c6cSSzymon20000
42712e5c6cSSzymon20000@end
43631604b1STomasz Sapeta#endif
44