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