1 /* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef TEMP_PERMISSION_OBSERVER_H 17 #define TEMP_PERMISSION_OBSERVER_H 18 19 #include <mutex> 20 #include <vector> 21 #include <string> 22 23 #include "access_token.h" 24 #ifdef EVENTHANDLER_ENABLE 25 #include "access_event_handler.h" 26 #endif 27 #include "app_manager_death_callback.h" 28 #include "app_status_change_callback.h" 29 #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE 30 #include "continuous_task_change_callback.h" 31 #endif 32 #include "form_status_change_callback.h" 33 #include "permission_manager.h" 34 35 namespace OHOS { 36 namespace Security { 37 namespace AccessToken { 38 class PermissionAppStateObserver : public ApplicationStateObserverStub { 39 public: 40 PermissionAppStateObserver() = default; 41 ~PermissionAppStateObserver() = default; 42 43 void OnAppStopped(const AppStateData &appStateData) override; 44 void OnAppStateChanged(const AppStateData &appStateData) override; 45 void OnAppCacheStateChanged(const AppStateData &appStateData) override; 46 47 DISALLOW_COPY_AND_MOVE(PermissionAppStateObserver); 48 }; 49 50 class PermissionFormStateObserver : public FormStateObserverStub { 51 public: 52 PermissionFormStateObserver() = default; 53 ~PermissionFormStateObserver() = default; 54 55 int32_t NotifyWhetherFormsVisible(const FormVisibilityType visibleType, 56 const std::string &bundleName, std::vector<FormInstance> &formInstances) override; 57 DISALLOW_COPY_AND_MOVE(PermissionFormStateObserver); 58 }; 59 #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE 60 class PermissionBackgroundTaskObserver : public BackgroundTaskSubscriberStub { 61 public: 62 PermissionBackgroundTaskObserver() = default; 63 ~PermissionBackgroundTaskObserver() = default; 64 65 void OnContinuousTaskStart(const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo) override; 66 void OnContinuousTaskStop(const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo) override; 67 68 DISALLOW_COPY_AND_MOVE(PermissionBackgroundTaskObserver); 69 }; 70 #endif 71 class PermissionAppManagerDeathCallback : public AppManagerDeathCallback { 72 public: 73 PermissionAppManagerDeathCallback() = default; 74 ~PermissionAppManagerDeathCallback() = default; 75 76 void NotifyAppManagerDeath() override; 77 DISALLOW_COPY_AND_MOVE(PermissionAppManagerDeathCallback); 78 }; 79 80 class TempPermissionObserver { 81 public: 82 static TempPermissionObserver& GetInstance(); 83 TempPermissionObserver(); 84 virtual ~TempPermissionObserver(); 85 86 void OnAppMgrRemoteDiedHandle(); 87 88 bool IsAllowGrantTempPermission(AccessTokenID tokenID, const std::string& permissionName); 89 bool CheckPermissionState(AccessTokenID tokenID, const std::string& permissionName, const std::string& bundleName); 90 void AddTempPermTokenToList(AccessTokenID tokenID, 91 const std::string& bundleName, const std::string& permissionName, const std::vector<bool>& list); 92 void RevokeAllTempPermission(AccessTokenID tokenID); 93 void RevokeTempPermission(AccessTokenID tokenID, const std::string& permissionName); 94 bool GetPermissionState(AccessTokenID tokenID, std::vector<PermissionStatus>& permissionStateList); 95 bool GetAppStateListByTokenID(AccessTokenID tokenID, std::vector<bool>& list); 96 void ModifyAppState(AccessTokenID tokenID, int32_t index, bool flag); 97 bool GetTokenIDByBundle(const std::string &bundleName, AccessTokenID& tokenID); 98 void AddContinuousTask(AccessTokenID tokenID); 99 void DelContinuousTask(AccessTokenID tokenID); 100 bool FindContinuousTask(AccessTokenID tokenID); 101 #ifdef EVENTHANDLER_ENABLE 102 void InitEventHandler(); 103 void SetCancelTime(int32_t cancelTime); 104 #endif 105 bool DelayRevokePermission(AccessToken::AccessTokenID tokenId, const std::string& taskName); 106 bool CancleTaskOfPermissionRevoking(const std::string& taskName); 107 void RegisterCallback(); 108 void RegisterAppStatusListener(); 109 void UnRegisterCallback(); 110 int32_t NotifyWhetherFormsVisible(const FormVisibilityType visibleType, 111 const std::string &bundleName, std::vector<FormInstance> &formInstances); 112 #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE 113 void OnContinuousTaskStart(const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo); 114 void OnContinuousTaskStop(const std::shared_ptr<ContinuousTaskCallbackInfo> &continuousTaskCallbackInfo); 115 #endif 116 117 private: 118 #ifdef EVENTHANDLER_ENABLE 119 std::shared_ptr<AccessEventHandler> GetEventHandler(); 120 std::shared_ptr<AccessEventHandler> eventHandler_; 121 std::mutex eventHandlerLock_; 122 #endif 123 int32_t cancelTimes_; 124 std::mutex tempPermissionMutex_; 125 std::map<AccessTokenID, std::vector<bool>> tempPermTokenMap_; 126 127 std::mutex continuousTaskMutex_; 128 std::map<AccessTokenID, int32_t> continuousTaskMap_; 129 130 // appState 131 std::mutex appStateCallbackMutex_; 132 sptr<PermissionAppStateObserver> appStateCallback_ = nullptr; 133 #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE 134 // backgroundTask 135 std::mutex backgroundTaskCallbackMutex_; 136 sptr<PermissionBackgroundTaskObserver> backgroundTaskCallback_ = nullptr; 137 #endif 138 // formState 139 std::mutex formStateCallbackMutex_; 140 sptr<PermissionFormStateObserver> formVisibleCallback_ = nullptr; 141 sptr<PermissionFormStateObserver> formInvisibleCallback_ = nullptr; 142 143 std::mutex formTokenMutex_; 144 std::map<std::string, AccessTokenID> formTokenMap_; 145 146 // app manager death 147 std::mutex appManagerDeathMutex_; 148 std::shared_ptr<PermissionAppManagerDeathCallback> appManagerDeathCallback_ = nullptr; 149 DISALLOW_COPY_AND_MOVE(TempPermissionObserver); 150 }; 151 } // namespace AccessToken 152 } // namespace Security 153 } // namespace OHOS 154 #endif // TEMP_PERMISSION_OBSERVER_H 155