18e745fdaSopenharmony_ci/*
28e745fdaSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
38e745fdaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
48e745fdaSopenharmony_ci * you may not use this file except in compliance with the License.
58e745fdaSopenharmony_ci * You may obtain a copy of the License at
68e745fdaSopenharmony_ci *
78e745fdaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
88e745fdaSopenharmony_ci *
98e745fdaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
108e745fdaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
118e745fdaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
128e745fdaSopenharmony_ci * See the License for the specific language governing permissions and
138e745fdaSopenharmony_ci * limitations under the License.
148e745fdaSopenharmony_ci */
158e745fdaSopenharmony_ci
168e745fdaSopenharmony_ci#ifndef NET_FIREWALL_POLICY_MANAGER_H
178e745fdaSopenharmony_ci#define NET_FIREWALL_POLICY_MANAGER_H
188e745fdaSopenharmony_ci
198e745fdaSopenharmony_ci#include <string>
208e745fdaSopenharmony_ci#include <shared_mutex>
218e745fdaSopenharmony_ci
228e745fdaSopenharmony_ci#include "netfirewall_common.h"
238e745fdaSopenharmony_ci#include "netfirewall_preference_helper.h"
248e745fdaSopenharmony_ci
258e745fdaSopenharmony_cinamespace OHOS {
268e745fdaSopenharmony_cinamespace NetManagerStandard {
278e745fdaSopenharmony_cinamespace {
288e745fdaSopenharmony_ciconst std::string FIREWALL_PREFERENCE_PATH = "/data/service/el1/public/netmanager/netfirewall_status_";
298e745fdaSopenharmony_ci} // namespace
308e745fdaSopenharmony_ci
318e745fdaSopenharmony_ciclass NetFirewallPolicyManager {
328e745fdaSopenharmony_cipublic:
338e745fdaSopenharmony_ci    static NetFirewallPolicyManager &GetInstance();
348e745fdaSopenharmony_ci    NetFirewallPolicyManager();
358e745fdaSopenharmony_ci    ~NetFirewallPolicyManager();
368e745fdaSopenharmony_ci
378e745fdaSopenharmony_ci    /**
388e745fdaSopenharmony_ci     * Set current forground user Id
398e745fdaSopenharmony_ci     *
408e745fdaSopenharmony_ci     * @param userId User id
418e745fdaSopenharmony_ci     */
428e745fdaSopenharmony_ci    void SetCurrentUserId(int32_t userId);
438e745fdaSopenharmony_ci
448e745fdaSopenharmony_ci    /**
458e745fdaSopenharmony_ci     * Turn on or off the firewall
468e745fdaSopenharmony_ci     *
478e745fdaSopenharmony_ci     * @param userId User id
488e745fdaSopenharmony_ci     * @param policy The firewall policy to be set
498e745fdaSopenharmony_ci     * @return Returns 0 success. Otherwise fail
508e745fdaSopenharmony_ci     */
518e745fdaSopenharmony_ci    int32_t SetNetFirewallPolicy(const int32_t userId, const sptr<NetFirewallPolicy> &policy);
528e745fdaSopenharmony_ci
538e745fdaSopenharmony_ci    /**
548e745fdaSopenharmony_ci     * Query firewall policy
558e745fdaSopenharmony_ci     *
568e745fdaSopenharmony_ci     * @param userId User id
578e745fdaSopenharmony_ci     * @param policy Return to firewall policy
588e745fdaSopenharmony_ci     * @return Returns 0 success. Otherwise fail
598e745fdaSopenharmony_ci     */
608e745fdaSopenharmony_ci    int32_t GetNetFirewallPolicy(const int32_t userId, sptr<NetFirewallPolicy> &policy);
618e745fdaSopenharmony_ci
628e745fdaSopenharmony_ci    /**
638e745fdaSopenharmony_ci     * Query current user firewall policy
648e745fdaSopenharmony_ci     *
658e745fdaSopenharmony_ci     * @param userId User id
668e745fdaSopenharmony_ci     * @param policy Return to firewall policy
678e745fdaSopenharmony_ci     * @return Returns 0 success. Otherwise fail
688e745fdaSopenharmony_ci     */
698e745fdaSopenharmony_ci    int32_t GetCurrentNetFirewallPolicy(sptr<NetFirewallPolicy> &policy);
708e745fdaSopenharmony_ci
718e745fdaSopenharmony_ci    /**
728e745fdaSopenharmony_ci     * Get user firewall open policy
738e745fdaSopenharmony_ci     *
748e745fdaSopenharmony_ci     * @param userId User id
758e745fdaSopenharmony_ci     * @return Returns true is open, Otherwise close
768e745fdaSopenharmony_ci     */
778e745fdaSopenharmony_ci    bool IsNetFirewallOpen(const int32_t userId);
788e745fdaSopenharmony_ci
798e745fdaSopenharmony_ci    /**
808e745fdaSopenharmony_ci     * Get current user firewall open policy
818e745fdaSopenharmony_ci     *
828e745fdaSopenharmony_ci     * @param userId User id
838e745fdaSopenharmony_ci     * @return Returns true is open, Otherwise close
848e745fdaSopenharmony_ci     */
858e745fdaSopenharmony_ci    bool IsCurrentFirewallOpen();
868e745fdaSopenharmony_ci
878e745fdaSopenharmony_ci    /**
888e745fdaSopenharmony_ci     * Clear user firewall policy
898e745fdaSopenharmony_ci     *
908e745fdaSopenharmony_ci     * @param userId Input User id
918e745fdaSopenharmony_ci     * @return Returns true is open, Otherwise close
928e745fdaSopenharmony_ci     */
938e745fdaSopenharmony_ci    int32_t ClearFirewallPolicy(const int32_t userId);
948e745fdaSopenharmony_ci
958e745fdaSopenharmony_ci    /**
968e745fdaSopenharmony_ci     * Clear current user firewall policy
978e745fdaSopenharmony_ci     *
988e745fdaSopenharmony_ci     * @return Returns true is open, Otherwise close
998e745fdaSopenharmony_ci     */
1008e745fdaSopenharmony_ci    int32_t ClearCurrentFirewallPolicy();
1018e745fdaSopenharmony_ci
1028e745fdaSopenharmony_ci    /**
1038e745fdaSopenharmony_ci     * Get firewall policy inAction
1048e745fdaSopenharmony_ci     *
1058e745fdaSopenharmony_ci     * @return Returns FirewallRuleAction
1068e745fdaSopenharmony_ci     */
1078e745fdaSopenharmony_ci    FirewallRuleAction GetFirewallPolicyInAction();
1088e745fdaSopenharmony_ci
1098e745fdaSopenharmony_ci    /**
1108e745fdaSopenharmony_ci     * Get firewall policy inAction
1118e745fdaSopenharmony_ci     *
1128e745fdaSopenharmony_ci     * @return Returns FirewallRuleAction
1138e745fdaSopenharmony_ci     */
1148e745fdaSopenharmony_ci    FirewallRuleAction GetFirewallPolicyOutAction();
1158e745fdaSopenharmony_ci
1168e745fdaSopenharmony_ci    /**
1178e745fdaSopenharmony_ci     * Is firewall status change
1188e745fdaSopenharmony_ci     *
1198e745fdaSopenharmony_ci     * @param policy input policy status
1208e745fdaSopenharmony_ci     * @return Returns true is change, Otherwise not change
1218e745fdaSopenharmony_ci     */
1228e745fdaSopenharmony_ci    bool IsFirewallStatusChange(const sptr<NetFirewallPolicy> &policy);
1238e745fdaSopenharmony_ci
1248e745fdaSopenharmony_ci    /**
1258e745fdaSopenharmony_ci     * Is firewall default action change
1268e745fdaSopenharmony_ci     *
1278e745fdaSopenharmony_ci     * @param policy input policy status
1288e745fdaSopenharmony_ci     * @return Returns true is change, Otherwise not change
1298e745fdaSopenharmony_ci     */
1308e745fdaSopenharmony_ci    bool IsFirewallActionChange(const sptr<NetFirewallPolicy> &policy);
1318e745fdaSopenharmony_ci
1328e745fdaSopenharmony_ci    /**
1338e745fdaSopenharmony_ci     * Get firewall policy inAction
1348e745fdaSopenharmony_ci     *
1358e745fdaSopenharmony_ci     * @param policy input to firewall policy
1368e745fdaSopenharmony_ci     */
1378e745fdaSopenharmony_ci    void SetCurrentUserFirewallPolicy(const sptr<NetFirewallPolicy> &policy);
1388e745fdaSopenharmony_ci
1398e745fdaSopenharmony_ciprivate:
1408e745fdaSopenharmony_ci    void RebuildFirewallPolicyCache(const int32_t userId);
1418e745fdaSopenharmony_ci    void EnsureCurrentFirewallPolicyCached();
1428e745fdaSopenharmony_ci    void LoadPolicyFormPreference(const int32_t userId, sptr<NetFirewallPolicy> &policy);
1438e745fdaSopenharmony_ci    bool IsPolicyCacheInvalid();
1448e745fdaSopenharmony_ci    bool IsPolicyCacheOpen();
1458e745fdaSopenharmony_ci    FirewallRuleAction GetPolicyCacheInInternal();
1468e745fdaSopenharmony_ci    FirewallRuleAction GetPolicyCacheOutInternal();
1478e745fdaSopenharmony_ci
1488e745fdaSopenharmony_ciprivate:
1498e745fdaSopenharmony_ci    std::shared_mutex setPolicyMutex_;
1508e745fdaSopenharmony_ci    std::shared_ptr<NetFirewallPreferenceHelper> preferencesHelper_ = nullptr;
1518e745fdaSopenharmony_ci    // Cache the current state
1528e745fdaSopenharmony_ci    std::atomic<int32_t> currentUserId_ = 0;
1538e745fdaSopenharmony_ci    sptr<NetFirewallPolicy> currentFirewallPolicy_ = nullptr;
1548e745fdaSopenharmony_ci};
1558e745fdaSopenharmony_ci} // namespace NetManagerStandard
1568e745fdaSopenharmony_ci} // namespace OHOS
1578e745fdaSopenharmony_ci#endif /* NET_FIREWALL_POLICY_MANAGER_H */
158