• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License"){return 0;}
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 #define MLOG_TAG "MediaPermissionCheck"
16 #include "media_permission_header_req.h"
17 #include <sstream>
18 
19 namespace OHOS::Media {
20 const std::string PermissionHeaderReq::FILE_ID_KEY = "fileId";
21 const std::string PermissionHeaderReq::URI_TYPE_KEY = "uriType";
22 const std::string PermissionHeaderReq::OPEN_URI_KEY = "openUri";
23 const std::string PermissionHeaderReq::OPEN_MODE_KEY = "openMode";
24 
PermissionHeaderReq(const std::string & fileId,int32_t uriType)25 PermissionHeaderReq::PermissionHeaderReq(const std::string& fileId, int32_t uriType)
26     : fileId_(fileId), uriType_(uriType)
27 {
28     headerReq_[FILE_ID_KEY] = fileId_;
29     headerReq_[URI_TYPE_KEY] = std::to_string(uriType_);
30 }
31 
PermissionHeaderReq(const std::string & openUri,const std::string & openMode)32 PermissionHeaderReq::PermissionHeaderReq(const std::string& openUri, const std::string& openMode)
33     : openUri_(openUri), openMode_(openMode)
34 {
35     headerReq_[OPEN_URI_KEY] = openUri_;
36     headerReq_[OPEN_MODE_KEY] = openMode_;
37 }
38 
PermissionHeaderReq(const std::string & fileId,int32_t uriType,const std::string & openUri,const std::string & openMode)39 PermissionHeaderReq::PermissionHeaderReq(const std::string& fileId, int32_t uriType,
40     const std::string& openUri, const std::string& openMode)
41     : fileId_(fileId), uriType_(uriType), openUri_(openUri), openMode_(openMode)
42 {
43     headerReq_[FILE_ID_KEY] = fileId_;
44     headerReq_[URI_TYPE_KEY] = std::to_string(uriType_);
45     headerReq_[OPEN_URI_KEY] = openUri_;
46     headerReq_[OPEN_MODE_KEY] = openMode_;
47 }
48 
CanConvertToInt32(const std::string & str)49 static bool CanConvertToInt32(const std::string &str)
50 {
51     std::istringstream iss(str);
52     int32_t num = 0;
53     iss >> num;
54     return iss.eof() && !iss.fail();
55 }
56 
convertToPermissionHeaderReq(const std::unordered_map<std::string,std::string> & header,int32_t userId,std::vector<std::vector<PermissionType>> & permissionPolicy,bool isDBBypass)57 PermissionHeaderReq PermissionHeaderReq::convertToPermissionHeaderReq(
58     const std::unordered_map<std::string, std::string> &header, int32_t userId,
59     std::vector<std::vector<PermissionType>> &permissionPolicy, bool isDBBypass)
60 {
61     PermissionHeaderReq permissionHeaderReq;
62     int32_t uriType = -1;
63     if (header.count(URI_TYPE_KEY)) {
64         if (CanConvertToInt32(header.at(URI_TYPE_KEY))) {
65             uriType = static_cast<int32_t>(std::stoi(header.at(URI_TYPE_KEY)));
66         }
67     }
68     if (header.count(FILE_ID_KEY) && header.count(URI_TYPE_KEY) &&
69         header.count(OPEN_URI_KEY) && header.count(OPEN_MODE_KEY)) {
70         permissionHeaderReq = PermissionHeaderReq(header.at(FILE_ID_KEY), uriType,
71             header.at(OPEN_URI_KEY), header.at(OPEN_MODE_KEY));
72     } else if (header.count(FILE_ID_KEY) && header.count(URI_TYPE_KEY)) {
73         permissionHeaderReq = PermissionHeaderReq(header.at(FILE_ID_KEY), uriType);
74     } else if (header.count(OPEN_URI_KEY) && header.count(OPEN_MODE_KEY)) {
75         permissionHeaderReq = PermissionHeaderReq(header.at(OPEN_URI_KEY), header.at(OPEN_MODE_KEY));
76     } else {
77         permissionHeaderReq = PermissionHeaderReq();
78     }
79     permissionHeaderReq.setUserId(userId);
80     permissionHeaderReq.setPermissionPolicy(permissionPolicy);
81     permissionHeaderReq.setDBBypass(isDBBypass);
82     return permissionHeaderReq;
83 }
84 
getFileId() const85 std::string PermissionHeaderReq::getFileId() const
86 {
87     return fileId_;
88 }
89 
getUriType() const90 int32_t PermissionHeaderReq::getUriType() const
91 {
92     return uriType_;
93 }
94 
getOpenUri() const95 std::string PermissionHeaderReq::getOpenUri() const
96 {
97     return openUri_;
98 }
99 
getOpenMode() const100 std::string PermissionHeaderReq::getOpenMode() const
101 {
102     return openMode_;
103 }
104 
getUserId() const105 int32_t PermissionHeaderReq::getUserId() const
106 {
107     return userId_;
108 }
109 
setUserId(int32_t userId)110 void PermissionHeaderReq::setUserId(int32_t userId)
111 {
112     userId_ = userId;
113 }
114 
getPermissionPolicy() const115 std::vector<std::vector<PermissionType>> PermissionHeaderReq::getPermissionPolicy() const
116 {
117     return permissionPolicy_;
118 }
119 
setPermissionPolicy(std::vector<std::vector<PermissionType>> & permissionPolicy)120 void PermissionHeaderReq::setPermissionPolicy(std::vector<std::vector<PermissionType>>& permissionPolicy)
121 {
122     permissionPolicy_ = permissionPolicy;
123 }
124 
getIsDBBypass() const125 bool PermissionHeaderReq::getIsDBBypass() const
126 {
127     return isDBBypass_;
128 }
129 
setDBBypass(bool isDBBypass)130 void PermissionHeaderReq::setDBBypass(bool isDBBypass)
131 {
132     isDBBypass_ = isDBBypass;
133 }
134 } // namespace OHOS::Media
135