• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 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 ACCESSTOKEN_HAP_TOKEN_INFO_INNER_H
17 #define ACCESSTOKEN_HAP_TOKEN_INFO_INNER_H
18 
19 #include <memory>
20 #include <string>
21 #include <vector>
22 
23 #include "access_token.h"
24 #include "generic_values.h"
25 #include "hap_token_info.h"
26 #include "permission_data_brief.h"
27 #include "permission_def.h"
28 #include "permission_status.h"
29 #include "rwlock.h"
30 
31 namespace OHOS {
32 namespace Security {
33 namespace AccessToken {
34 class HapTokenInfoInner final {
35 public:
36     HapTokenInfoInner();
37     HapTokenInfoInner(AccessTokenID id, const HapInfoParams& info, const HapPolicy& policy);
38     HapTokenInfoInner(AccessTokenID id, const HapTokenInfo &info,
39         const std::vector<PermissionStatus>& permStateList);
40     HapTokenInfoInner(AccessTokenID id, const HapTokenInfoForSync& info);
41     virtual ~HapTokenInfoInner();
42 
43     void Update(const UpdateHapInfoParams& info, const std::vector<PermissionStatus>& permStateList,
44         const HapPolicy& hapPolicy);
45     void TranslateToHapTokenInfo(HapTokenInfo& infoParcel) const;
46     void StoreHapInfo(std::vector<GenericValues>& valueList, const std::string& appId, ATokenAplEnum apl) const;
47     void StorePermissionPolicy(std::vector<GenericValues>& permStateValues);
48     int RestoreHapTokenInfo(AccessTokenID tokenId, const GenericValues& tokenValue,
49         const std::vector<GenericValues>& permStateRes, const std::vector<GenericValues> extendedPermRes);
50 
51     uint32_t GetReqPermissionSize();
52     HapTokenInfo GetHapInfoBasic() const;
53     int GetUserID() const;
54     int GetDlpType() const;
55     std::string GetBundleName() const;
56     int GetInstIndex() const;
57     AccessTokenID GetTokenID() const;
58     void SetTokenBaseInfo(const HapTokenInfo& baseInfo);
59     void ToString(std::string& info);
60     bool IsRemote() const;
61     void SetRemote(bool isRemote);
62     bool IsPermDialogForbidden() const;
63     void SetPermDialogForbidden(bool isForbidden);
64 
65     int32_t UpdatePermissionStatus(
66         const std::string& permissionName, bool isGranted, uint32_t flag, bool& statusChanged);
67     int32_t GetPermissionStateList(std::vector<PermissionStatus>& permList);
68     int32_t ResetUserGrantPermissionStatus(void);
69     void UpdateRemoteHapTokenInfo(AccessTokenID mapID,
70         const HapTokenInfo& baseInfo, std::vector<PermissionStatus>& permStateList);
71 
72     static void RefreshPermStateToKernel(const std::vector<std::string>& constrainedList,
73         bool hapUserIsActive, AccessTokenID tokenId, std::map<std::string, bool>& refreshedPermList);
74     static int32_t VerifyPermissionStatus(AccessTokenID tokenID, const std::string& permissionName);
75     static PermUsedTypeEnum GetPermissionUsedType(AccessTokenID tokenID, const std::string& permissionName);
76     static int32_t QueryPermissionFlag(AccessTokenID tokenID, const std::string& permissionName, uint32_t& flag);
77     static void GetPermStatusListByTokenId(AccessTokenID tokenID,
78         const std::vector<uint32_t> constrainedList, std::vector<uint32_t>& opCodeList, std::vector<bool>& statusList);
79     static void GetGrantedPermByTokenId(AccessTokenID tokenID,
80         const std::vector<std::string>& constrainedList, std::vector<std::string>& permissionList);
81     static void ClearAllSecCompGrantedPerm();
82     static bool IsPermissionGrantedWithSecComp(AccessTokenID tokenID, const std::string& permissionName);
83 
84     uint64_t permUpdateTimestamp_;
85 private:
86     int32_t GetApiVersion(int32_t apiVersion);
87     void StoreHapBasicInfo(std::vector<GenericValues>& valueList) const;
88     void TranslationIntoGenericValues(GenericValues& outGenericValues) const;
89     int RestoreHapTokenBasicInfo(const GenericValues& inGenericValues);
90     bool UpdateStatesToDB(AccessTokenID tokenID, std::vector<PermissionStatus>& stateChangeList);
91     void PermToString(const std::vector<PermissionStatus>& permStateList, std::string& info);
92     void PermStateFullToString(const PermissionStatus& state, std::string& info);
93 
94     HapTokenInfo tokenInfoBasic_;
95 
96     // true means sync from remote.
97     bool isRemote_;
98     /** permission dialog is forbidden */
99     bool isPermDialogForbidden_ = false;
100 
101     OHOS::Utils::RWLock policySetLock_;
102 };
103 } // namespace AccessToken
104 } // namespace Security
105 } // namespace OHOS
106 #endif // ACCESSTOKEN_HAP_TOKEN_INFO_INNER_H
107