1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_ASH_COMPONENTS_NETWORK_POLICY_UTIL_H_
#define CHROMEOS_ASH_COMPONENTS_NETWORK_POLICY_UTIL_H_
#include <optional>
#include <ostream>
#include <string>
#include "base/component_export.h"
#include "base/values.h"
namespace ash {
struct NetworkProfile;
namespace policy_util {
// This class represents a cellular activation code and its corresponding type
// and is used to simplify all cellular code related to enterprise policy.
class COMPONENT_EXPORT(CHROMEOS_NETWORK) SmdxActivationCode {
public:
enum class Type {
SMDP = 0,
SMDS = 1,
};
SmdxActivationCode(Type type, std::string value);
SmdxActivationCode(SmdxActivationCode&& other);
SmdxActivationCode& operator=(SmdxActivationCode&& other);
SmdxActivationCode(const SmdxActivationCode&) = delete;
SmdxActivationCode& operator=(const SmdxActivationCode&) = delete;
~SmdxActivationCode() = default;
// These functions return a string with information about this activation code
// that is safe for logging. The ToErrorString() function will include a
// sanitized version of the activation code value itself.
std::string ToString() const;
std::string ToErrorString() const;
Type type() const { return type_; }
const std::string& value() const { return value_; }
private:
std::string GetString(bool for_error_message) const;
Type type_;
std::string value_;
};
// This fake credential contains a random postfix which is extremely unlikely to
// be used by any user. Used to determine saved but unknown credential
// (PSK/Passphrase/Password) in UI (see onc_mojo.js).
extern COMPONENT_EXPORT(CHROMEOS_NETWORK) const char kFakeCredential[];
// Creates a managed ONC dictionary from the given arguments. Depending on the
// profile type, the policies are assumed to come from the user or device policy
// and and |user_settings| to be the user's non-shared or shared settings.
// Each of the arguments can be null.
// TODO(pneubeck): Add documentation of the returned format, see
// https://crbug.com/408990 .
base::Value::Dict CreateManagedONC(const base::Value::Dict* global_policy,
const base::Value::Dict* network_policy,
const base::Value::Dict* user_settings,
const base::Value::Dict* active_settings,
const NetworkProfile* profile);
// Adds properties to |shill_properties_to_update|, which are enforced on an
// unmanaged network by the global config |global_network_policy| of the policy.
// |shill_dictionary| are the network's current properties read from Shill.
void SetShillPropertiesForGlobalPolicy(
const base::Value::Dict& shill_dictionary,
const base::Value::Dict& global_network_policy,
base::Value::Dict& shill_properties_to_update);
// Creates a Shill property dictionary from the given arguments. The resulting
// dictionary will be sent to Shill by the caller. Depending on the profile
// type, |network_policy| is interpreted as the user or device policy and
// |user_settings| as the user or shared settings. |network_policy| or
// |user_settings| can be NULL, but not both.
base::Value::Dict CreateShillConfiguration(
const NetworkProfile& profile,
const std::string& guid,
const base::Value::Dict* global_policy,
const base::Value::Dict* network_policy,
const base::Value::Dict* user_settings);
// Returns true if |policy| matches |actual_network|, which must be part of a
// ONC NetworkConfiguration. This should be the only such matching function
// within Chrome. Shill does such matching in several functions for network
// identification. For compatibility, we currently should stick to Shill's
// matching behavior.
bool IsPolicyMatching(const base::Value::Dict& policy,
const base::Value::Dict& actual_network);
// Returns if the given |onc_config| is Cellular type configuration.
bool IsCellularPolicy(const base::Value::Dict& onc_config);
// Returns true if `onc_config` has any field that is marked as "Recommended".
COMPONENT_EXPORT(CHROMEOS_NETWORK)
bool HasAnyRecommendedField(const base::Value::Dict& onc_config);
// Returns the ICCID value from the given |onc_config|, returns nullptr if it
// is not a Cellular type ONC or no ICCID field is found.
const std::string* GetIccidFromONC(const base::Value::Dict& onc_config);
// Returns the Cellular.SMDPAddress ONC field of the passed ONC
// NetworkConfiguration if it is a Cellular NetworkConfiguration.
// If there is no SMDPAddress, returns nullptr.
const std::string* GetSMDPAddressFromONC(const base::Value::Dict& onc_config);
// This function returns the SM-DX activation code found in |onc_config|. If
// both an SM-DP+ activation code and an SM-DS activation code are provided, or
// if neither are provided, this function returns |std::nullopt|.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
std::optional<SmdxActivationCode> GetSmdxActivationCodeFromONC(
const base::Value::Dict& onc_config);
// When this is called, `AreEphemeralNetworkPoliciesEnabled()` will return true
// until the process is restarted (or
// ResetEphemeralNetworkPoliciesEnabledForTesting is called).
COMPONENT_EXPORT(CHROMEOS_NETWORK)
void SetEphemeralNetworkPoliciesEnabled();
// Resets the effect of SetEphemeralNetworkPoliciesEnabled.
// This is for unittests only - supporting this properly in production code
// would be difficult (e.g. no DCHECKs that the feature is enabled in posted
// tasks).
COMPONENT_EXPORT(CHROMEOS_NETWORK)
void ResetEphemeralNetworkPoliciesEnabledForTesting();
// Returns true if ephemeral network policies are enabled.
COMPONENT_EXPORT(CHROMEOS_NETWORK)
bool AreEphemeralNetworkPoliciesEnabled();
} // namespace policy_util
} // namespace ash
#endif // CHROMEOS_ASH_COMPONENTS_NETWORK_POLICY_UTIL_H_
|