1 /* 2 * Copyright (C) 2016 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.wifi.hotspot2; 18 19 import android.content.Context; 20 import android.net.wifi.hotspot2.PasspointConfiguration; 21 22 import com.android.org.conscrypt.TrustManagerImpl; 23 import com.android.server.wifi.Clock; 24 import com.android.server.wifi.SIMAccessor; 25 import com.android.server.wifi.WifiKeyStore; 26 import com.android.server.wifi.WifiMetrics; 27 import com.android.server.wifi.WifiNative; 28 29 import java.security.KeyStore; 30 import java.security.NoSuchAlgorithmException; 31 32 import javax.net.ssl.SSLContext; 33 34 /** 35 * Factory class for creating Passpoint related objects. Useful for mocking object creations 36 * in the unit tests. 37 */ 38 public class PasspointObjectFactory{ 39 /** 40 * Create a PasspointEventHandler instance. 41 * 42 * @param wifiNative Instance of {@link WifiNative} 43 * @param callbacks Instance of {@link PasspointEventHandler.Callbacks} 44 * @return {@link PasspointEventHandler} 45 */ makePasspointEventHandler(WifiNative wifiNative, PasspointEventHandler.Callbacks callbacks)46 public PasspointEventHandler makePasspointEventHandler(WifiNative wifiNative, 47 PasspointEventHandler.Callbacks callbacks) { 48 return new PasspointEventHandler(wifiNative, callbacks); 49 } 50 51 /** 52 * Create a PasspointProvider instance. 53 * 54 * @param keyStore Instance of {@link WifiKeyStore} 55 * @param config Configuration for the provider 56 * @param providerId Unique identifier for the provider 57 * @param packageName Package name of app adding/updating the {@code config} 58 * @return {@link PasspointProvider} 59 */ makePasspointProvider(PasspointConfiguration config, WifiKeyStore keyStore, SIMAccessor simAccessor, long providerId, int creatorUid, String packageName)60 public PasspointProvider makePasspointProvider(PasspointConfiguration config, 61 WifiKeyStore keyStore, SIMAccessor simAccessor, long providerId, int creatorUid, 62 String packageName) { 63 return new PasspointProvider(config, keyStore, simAccessor, providerId, creatorUid, 64 packageName); 65 } 66 67 /** 68 * Create a {@link PasspointConfigUserStoreData} instance. 69 * 70 * @param keyStore Instance of {@link WifiKeyStore} 71 * @param simAccessor Instance of {@link SIMAccessor} 72 * @param dataSource Passpoint configuration data source 73 * @return {@link PasspointConfigUserStoreData} 74 */ makePasspointConfigUserStoreData(WifiKeyStore keyStore, SIMAccessor simAccessor, PasspointConfigUserStoreData.DataSource dataSource)75 public PasspointConfigUserStoreData makePasspointConfigUserStoreData(WifiKeyStore keyStore, 76 SIMAccessor simAccessor, PasspointConfigUserStoreData.DataSource dataSource) { 77 return new PasspointConfigUserStoreData(keyStore, simAccessor, dataSource); 78 } 79 80 /** 81 * Create a {@link PasspointConfigSharedStoreData} instance. 82 * @param dataSource Passpoint configuration data source 83 * @return {@link PasspointConfigSharedStoreData} 84 */ makePasspointConfigSharedStoreData( PasspointConfigSharedStoreData.DataSource dataSource)85 public PasspointConfigSharedStoreData makePasspointConfigSharedStoreData( 86 PasspointConfigSharedStoreData.DataSource dataSource) { 87 return new PasspointConfigSharedStoreData(dataSource); 88 } 89 90 /** 91 * Create a AnqpCache instance. 92 * 93 * @param clock Instance of {@link Clock} 94 * @return {@link AnqpCache} 95 */ makeAnqpCache(Clock clock)96 public AnqpCache makeAnqpCache(Clock clock) { 97 return new AnqpCache(clock); 98 } 99 100 /** 101 * Create an instance of {@link ANQPRequestManager}. 102 * 103 * @param handler Instance of {@link PasspointEventHandler} 104 * @param clock Instance of {@link Clock} 105 * @return {@link ANQPRequestManager} 106 */ makeANQPRequestManager(PasspointEventHandler handler, Clock clock)107 public ANQPRequestManager makeANQPRequestManager(PasspointEventHandler handler, Clock clock) { 108 return new ANQPRequestManager(handler, clock); 109 } 110 111 /** 112 * Create an instance of {@link CertificateVerifier}. 113 * 114 * @return {@link CertificateVerifier} 115 */ makeCertificateVerifier()116 public CertificateVerifier makeCertificateVerifier() { 117 return new CertificateVerifier(); 118 } 119 120 /** 121 * Create an instance of {@link PasspointProvisioner}. 122 * 123 * @param context Instance of {@link Context} 124 * @param wifiNative Instance of {@link WifiNative} 125 * @param passpointManager Instance of {@link PasspointManager} 126 * @return {@link PasspointProvisioner} 127 */ makePasspointProvisioner(Context context, WifiNative wifiNative, PasspointManager passpointManager, WifiMetrics wifiMetrics)128 public PasspointProvisioner makePasspointProvisioner(Context context, WifiNative wifiNative, 129 PasspointManager passpointManager, WifiMetrics wifiMetrics) { 130 return new PasspointProvisioner(context, wifiNative, this, passpointManager, wifiMetrics); 131 } 132 133 /** 134 * Create an instance of {@link OsuNetworkConnection}. 135 * 136 * @param context 137 * @return {@link OsuNetworkConnection} 138 */ makeOsuNetworkConnection(Context context)139 public OsuNetworkConnection makeOsuNetworkConnection(Context context) { 140 return new OsuNetworkConnection(context); 141 } 142 143 /** 144 * Create an instance of {@link OsuServerConnection}. 145 * 146 * @return {@link OsuServerConnection} 147 */ makeOsuServerConnection()148 public OsuServerConnection makeOsuServerConnection() { 149 return new OsuServerConnection(null); 150 } 151 152 153 /** 154 * Create an instance of {@link WfaKeyStore}. 155 * 156 * @return WfaKeyStore {@link WfaKeyStore} 157 */ makeWfaKeyStore()158 public WfaKeyStore makeWfaKeyStore() { 159 return new WfaKeyStore(); 160 } 161 162 /** 163 * Create an instance of {@link SSLContext}. 164 * 165 * @param tlsVersion String indicate TLS version 166 * @return SSLContext an instance, corresponding to the TLS version 167 */ getSSLContext(String tlsVersion)168 public SSLContext getSSLContext(String tlsVersion) { 169 SSLContext tlsContext = null; 170 try { 171 tlsContext = SSLContext.getInstance(tlsVersion); 172 } catch (NoSuchAlgorithmException e) { 173 e.printStackTrace(); 174 } 175 return tlsContext; 176 } 177 178 /** 179 * Create an instance of {@link TrustManagerImpl}. 180 * 181 * @param ks KeyStore used to get root certs 182 * @return TrustManagerImpl an instance for delegating root cert validation 183 */ getTrustManagerImpl(KeyStore ks)184 public TrustManagerImpl getTrustManagerImpl(KeyStore ks) { 185 return new TrustManagerImpl(ks); 186 } 187 188 /** 189 * Create an instance of {@link SystemInfo}. 190 * 191 * @param context Instance of {@link Context} 192 * @param wifiNative Instance of {@link WifiNative} 193 * @return {@Link Systeminfo} that is used for getting system related info. 194 */ getSystemInfo(Context context, WifiNative wifiNative)195 public SystemInfo getSystemInfo(Context context, WifiNative wifiNative) { 196 return SystemInfo.getInstance(context, wifiNative); 197 } 198 } 199