/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.react.modules.common; import com.facebook.common.logging.FLog; import com.facebook.react.bridge.CatalystInstance; import com.facebook.react.bridge.NativeModule; import com.facebook.react.common.ReactConstants; /** * Cleans sensitive user data from native modules that implement the {@code Cleanable} interface. * This is useful e.g. when a user logs out from an app. */ public class ModuleDataCleaner { /** * Indicates a module may contain sensitive user data and should be cleaned on logout. * * Types of data that should be cleaned: * - Persistent data (disk) that may contain user information or content. * - Retained (static) in-memory data that may contain user info or content. * * Note that the following types of modules do not need to be cleaned here: * - Modules whose user data is kept in memory in non-static fields, assuming the app uses a * separate instance for each viewer context. * - Modules that remove all persistent data (temp files, etc) when the catalyst instance is * destroyed. This is because logout implies that the instance is destroyed. Apps should enforce * this. */ public interface Cleanable { void clearSensitiveData(); } public static void cleanDataFromModules(CatalystInstance catalystInstance) { for (NativeModule nativeModule : catalystInstance.getNativeModules()) { if (nativeModule instanceof Cleanable) { FLog.d(ReactConstants.TAG, "Cleaning data from " + nativeModule.getName()); ((Cleanable) nativeModule).clearSensitiveData(); } } } }