1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.server.pm.permission;
18 
19 import android.annotation.NonNull;
20 import android.annotation.Nullable;
21 import android.util.ArrayMap;
22 
23 /**
24  * Data class for OEM and privileged app permission allowlist state.
25  */
26 public final class PermissionAllowlist {
27     @NonNull
28     private final ArrayMap<String, ArrayMap<String, Boolean>> mOemAppAllowlist = new ArrayMap<>();
29     @NonNull
30     private final ArrayMap<String, ArrayMap<String, Boolean>> mPrivilegedAppAllowlist =
31             new ArrayMap<>();
32     @NonNull
33     private final ArrayMap<String, ArrayMap<String, Boolean>> mVendorPrivilegedAppAllowlist =
34             new ArrayMap<>();
35     @NonNull
36     private final ArrayMap<String, ArrayMap<String, Boolean>> mProductPrivilegedAppAllowlist =
37             new ArrayMap<>();
38     @NonNull
39     private final ArrayMap<String, ArrayMap<String, Boolean>> mSystemExtPrivilegedAppAllowlist =
40             new ArrayMap<>();
41     @NonNull
42     private final ArrayMap<String, ArrayMap<String, ArrayMap<String, Boolean>>>
43             mApexPrivilegedAppAllowlists = new ArrayMap<>();
44 
45     @NonNull
getOemAppAllowlist()46     public ArrayMap<String, ArrayMap<String, Boolean>> getOemAppAllowlist() {
47         return mOemAppAllowlist;
48     }
49 
50     @NonNull
getPrivilegedAppAllowlist()51     public ArrayMap<String, ArrayMap<String, Boolean>> getPrivilegedAppAllowlist() {
52         return mPrivilegedAppAllowlist;
53     }
54 
55     @NonNull
getVendorPrivilegedAppAllowlist()56     public ArrayMap<String, ArrayMap<String, Boolean>> getVendorPrivilegedAppAllowlist() {
57         return mVendorPrivilegedAppAllowlist;
58     }
59 
60     @NonNull
getProductPrivilegedAppAllowlist()61     public ArrayMap<String, ArrayMap<String, Boolean>> getProductPrivilegedAppAllowlist() {
62         return mProductPrivilegedAppAllowlist;
63     }
64 
65     @NonNull
getSystemExtPrivilegedAppAllowlist()66     public ArrayMap<String, ArrayMap<String, Boolean>> getSystemExtPrivilegedAppAllowlist() {
67         return mSystemExtPrivilegedAppAllowlist;
68     }
69 
70     @NonNull
71     public ArrayMap<String, ArrayMap<String, ArrayMap<String, Boolean>>>
getApexPrivilegedAppAllowlists()72             getApexPrivilegedAppAllowlists() {
73         return mApexPrivilegedAppAllowlists;
74     }
75 
76     @Nullable
getOemAppAllowlistState(@onNull String packageName, @NonNull String permissionName)77     public Boolean getOemAppAllowlistState(@NonNull String packageName,
78             @NonNull String permissionName) {
79         ArrayMap<String, Boolean> permissions = mOemAppAllowlist.get(packageName);
80         if (permissions == null) {
81             return null;
82         }
83         return permissions.get(permissionName);
84     }
85 
86     @Nullable
getPrivilegedAppAllowlistState(@onNull String packageName, @NonNull String permissionName)87     public Boolean getPrivilegedAppAllowlistState(@NonNull String packageName,
88             @NonNull String permissionName) {
89         ArrayMap<String, Boolean> permissions = mPrivilegedAppAllowlist.get(packageName);
90         if (permissions == null) {
91             return null;
92         }
93         return permissions.get(permissionName);
94     }
95 
96     @Nullable
getVendorPrivilegedAppAllowlistState(@onNull String packageName, @NonNull String permissionName)97     public Boolean getVendorPrivilegedAppAllowlistState(@NonNull String packageName,
98             @NonNull String permissionName) {
99         ArrayMap<String, Boolean> permissions = mVendorPrivilegedAppAllowlist.get(packageName);
100         if (permissions == null) {
101             return null;
102         }
103         return permissions.get(permissionName);
104     }
105 
106     @Nullable
getProductPrivilegedAppAllowlistState(@onNull String packageName, @NonNull String permissionName)107     public Boolean getProductPrivilegedAppAllowlistState(@NonNull String packageName,
108             @NonNull String permissionName) {
109         ArrayMap<String, Boolean> permissions = mProductPrivilegedAppAllowlist.get(packageName);
110         if (permissions == null) {
111             return null;
112         }
113         return permissions.get(permissionName);
114     }
115 
116     @Nullable
getSystemExtPrivilegedAppAllowlistState(@onNull String packageName, @NonNull String permissionName)117     public Boolean getSystemExtPrivilegedAppAllowlistState(@NonNull String packageName,
118             @NonNull String permissionName) {
119         ArrayMap<String, Boolean> permissions = mSystemExtPrivilegedAppAllowlist.get(packageName);
120         if (permissions == null) {
121             return null;
122         }
123         return permissions.get(permissionName);
124     }
125 
126     @Nullable
getApexPrivilegedAppAllowlistState(@onNull String moduleName, @NonNull String packageName, @NonNull String permissionName)127     public Boolean getApexPrivilegedAppAllowlistState(@NonNull String moduleName,
128             @NonNull String packageName, @NonNull String permissionName) {
129         ArrayMap<String, ArrayMap<String, Boolean>> allowlist =
130                 mApexPrivilegedAppAllowlists.get(moduleName);
131         if (allowlist == null) {
132             return null;
133         }
134         ArrayMap<String, Boolean> permissions = allowlist.get(packageName);
135         if (permissions == null) {
136             return null;
137         }
138         return permissions.get(permissionName);
139     }
140 }
141