• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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