blob: 4d7ae043ebbacd6d26d0e1fcd8cfd45eb42961ac [file] [log] [blame]
/*
* Copyright 2016, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.managedprovisioning.model;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_DOMAIN;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_EAP_METHOD;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_HIDDEN;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_IDENTITY;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PAC_URL;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PASSWORD;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PHASE2_AUTH;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_BYPASS;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_HOST;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_PORT;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SECURITY_TYPE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SSID;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import com.android.internal.annotations.Immutable;
import com.android.managedprovisioning.common.PersistableBundlable;
/**
* Stores the WiFi configuration which is used in managed provisioning.
*/
@Immutable
public final class WifiInfo extends PersistableBundlable {
public static final boolean DEFAULT_WIFI_HIDDEN = false;
public static final int DEFAULT_WIFI_PROXY_PORT = 0;
public static final Parcelable.Creator<WifiInfo> CREATOR
= new Parcelable.Creator<WifiInfo>() {
@Override
public WifiInfo createFromParcel(Parcel in) {
return new WifiInfo(in);
}
@Override
public WifiInfo[] newArray(int size) {
return new WifiInfo[size];
}
};
/** Ssid of the wifi network. */
public final String ssid;
/** Wifi network in {@link #ssid} is hidden or not. */
public final boolean hidden;
/** Security type of the wifi network in {@link #ssid}. */
@Nullable
public final String securityType;
/** Password of the wifi network in {@link #ssid}. */
@Nullable
public final String password;
/**
* EAP method of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}.
*/
@Nullable
public final String eapMethod;
/**
* Phase 2 authentification of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}.
*/
@Nullable
public final String phase2Auth;
/**
* CA certificate of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}. Format of certificate should be as {@link
* android.app.admin.DevicePolicyManager#EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE}
*/
@Nullable
public final String caCertificate;
/**
* User certificate of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}. Format of certificate should be as {@link
* android.app.admin.DevicePolicyManager#EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE}
*/
@Nullable
public final String userCertificate;
/**
* Identity of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}.
*/
@Nullable
public final String identity;
/**
* Anonymous identity of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}.
*/
@Nullable
public final String anonymousIdentity;
/**
* Domain of the wifi network in {@link #ssid}. This is only used if the
* {@link #securityType} is {@code EAP}.
*/
@Nullable
public final String domain;
/** Proxy host for the wifi network in {@link #ssid}. */
@Nullable
public final String proxyHost;
/** Proxy port for the wifi network in {@link #ssid}. */
public final int proxyPort;
/** The proxy bypass for the wifi network in {@link #ssid}. */
@Nullable
public final String proxyBypassHosts;
/** The proxy bypass list for the wifi network in {@link #ssid}. */
@Nullable
public final String pacUrl;
@Override
public PersistableBundle toPersistableBundle() {
final PersistableBundle bundle = new PersistableBundle();
bundle.putString(EXTRA_PROVISIONING_WIFI_SSID, ssid);
bundle.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, hidden);
bundle.putString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, securityType);
bundle.putString(EXTRA_PROVISIONING_WIFI_PASSWORD, password);
bundle.putString(EXTRA_PROVISIONING_WIFI_EAP_METHOD, eapMethod);
bundle.putString(EXTRA_PROVISIONING_WIFI_PHASE2_AUTH, phase2Auth);
bundle.putString(EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE, caCertificate);
bundle.putString(EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE, userCertificate);
bundle.putString(EXTRA_PROVISIONING_WIFI_IDENTITY, identity);
bundle.putString(EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY, anonymousIdentity);
bundle.putString(EXTRA_PROVISIONING_WIFI_DOMAIN, domain);
bundle.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST, proxyHost);
bundle.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, proxyPort);
bundle.putString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, proxyBypassHosts);
bundle.putString(EXTRA_PROVISIONING_WIFI_PAC_URL, pacUrl);
return bundle;
}
/* package */ static WifiInfo fromPersistableBundle(PersistableBundle bundle) {
return createBuilderFromPersistableBundle(bundle).build();
}
private static Builder createBuilderFromPersistableBundle(PersistableBundle bundle) {
Builder builder = new Builder();
builder.setSsid(bundle.getString(EXTRA_PROVISIONING_WIFI_SSID));
builder.setHidden(bundle.getBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN));
builder.setSecurityType(bundle.getString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE));
builder.setPassword(bundle.getString(EXTRA_PROVISIONING_WIFI_PASSWORD));
builder.setEapMethod(bundle.getString(EXTRA_PROVISIONING_WIFI_EAP_METHOD));
builder.setPhase2Auth(bundle.getString(EXTRA_PROVISIONING_WIFI_PHASE2_AUTH));
builder.setCaCertificate(bundle.getString(EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE));
builder.setUserCertificate(bundle.getString(EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE));
builder.setIdentity(bundle.getString(EXTRA_PROVISIONING_WIFI_IDENTITY));
builder.setAnonymousIdentity(bundle.getString(EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY));
builder.setDomain(bundle.getString(EXTRA_PROVISIONING_WIFI_DOMAIN));
builder.setProxyHost(bundle.getString(EXTRA_PROVISIONING_WIFI_PROXY_HOST));
builder.setProxyPort(bundle.getInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT));
builder.setProxyBypassHosts(bundle.getString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS));
builder.setPacUrl(bundle.getString(EXTRA_PROVISIONING_WIFI_PAC_URL));
return builder;
}
private WifiInfo(Builder builder) {
ssid = builder.mSsid;
hidden = builder.mHidden;
securityType = builder.mSecurityType;
password = builder.mPassword;
eapMethod = builder.eapMethod;
phase2Auth = builder.phase2Auth;
caCertificate = builder.caCertificate;
userCertificate = builder.userCertificate;
identity = builder.identity;
anonymousIdentity = builder.anonymousIdentity;
domain = builder.domain;
proxyHost = builder.mProxyHost;
proxyPort = builder.mProxyPort;
proxyBypassHosts = builder.mProxyBypassHosts;
pacUrl = builder.mPacUrl;
validateFields();
}
private WifiInfo(Parcel in) {
this(createBuilderFromPersistableBundle(
PersistableBundlable.getPersistableBundleFromParcel(in)));
}
private void validateFields() {
if (TextUtils.isEmpty(ssid)) {
throw new IllegalArgumentException("Ssid must not be empty!");
}
}
public final static class Builder {
private String mSsid;
private boolean mHidden = DEFAULT_WIFI_HIDDEN;
private String mSecurityType;
private String mPassword;
private String eapMethod;
private String phase2Auth;
private String caCertificate;
private String userCertificate;
private String identity;
private String anonymousIdentity;
private String domain;
private String mProxyHost;
private int mProxyPort = DEFAULT_WIFI_PROXY_PORT;
private String mProxyBypassHosts;
private String mPacUrl;
public Builder setSsid(String ssid) {
mSsid = ssid;
return this;
}
public Builder setHidden(boolean hidden) {
mHidden = hidden;
return this;
}
public Builder setSecurityType(String securityType) {
mSecurityType = securityType;
return this;
}
public Builder setPassword(String password) {
mPassword = password;
return this;
}
public Builder setEapMethod(String eapMethod) {
this.eapMethod = eapMethod;
return this;
}
public Builder setPhase2Auth(String phase2Auth) {
this.phase2Auth = phase2Auth;
return this;
}
public Builder setCaCertificate(String caCertificate) {
this.caCertificate = caCertificate;
return this;
}
public Builder setUserCertificate(String userCertificate) {
this.userCertificate = userCertificate;
return this;
}
public Builder setIdentity(String identity) {
this.identity = identity;
return this;
}
public Builder setAnonymousIdentity(String anonymousIdentity) {
this.anonymousIdentity = anonymousIdentity;
return this;
}
public Builder setDomain(String domain) {
this.domain = domain;
return this;
}
public Builder setProxyHost(String proxyHost) {
mProxyHost = proxyHost;
return this;
}
public Builder setProxyPort(int proxyPort) {
mProxyPort = proxyPort;
return this;
}
public Builder setProxyBypassHosts(String proxyBypassHosts) {
mProxyBypassHosts = proxyBypassHosts;
return this;
}
public Builder setPacUrl(String pacUrl) {
mPacUrl = pacUrl;
return this;
}
public WifiInfo build() {
return new WifiInfo(this);
}
public static Builder builder() {
return new Builder();
}
}
}