11d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistpackage com.android.server.wifi.hotspot2.pps;
21d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
31d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport android.util.Base64;
41d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
51d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport com.android.server.wifi.hotspot2.Utils;
61d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport com.android.server.wifi.hotspot2.omadm.OMAException;
71d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport com.android.server.wifi.hotspot2.omadm.OMANode;
82e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager;
91d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
101d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistimport java.nio.charset.StandardCharsets;
111d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
122e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_CertSHA256Fingerprint;
132e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_CertURL;
142e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_Password;
152e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_Restriction;
162e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_TrustRoot;
172e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_URI;
182e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_UpdateInterval;
192e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_UpdateMethod;
202e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_Username;
212e814680f4dd27a5f825afab189843582235cedcJan Nordqvistimport static com.android.server.wifi.hotspot2.omadm.PasspointManagementObjectManager.TAG_UsernamePassword;
221d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
231d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvistpublic class UpdateInfo {
241d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public enum UpdateRestriction {HomeSP, RoamingPartner, Unrestricted}
251d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
261d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final long mInterval;
271d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final boolean mSPPClientInitiated;
281d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final UpdateRestriction mUpdateRestriction;
291d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final String mURI;
301d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final String mUsername;
311d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final String mPassword;
321d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final String mCertURL;
331d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    private final String mCertFP;
341d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
351d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public UpdateInfo(OMANode policyUpdate) throws OMAException {
362e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mInterval = PasspointManagementObjectManager.getLong(policyUpdate, TAG_UpdateInterval, null)
372e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                * PasspointManagementObjectManager.IntervalFactor;
382e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mSPPClientInitiated = PasspointManagementObjectManager.getSelection(policyUpdate,
392e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                TAG_UpdateMethod);
402e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mUpdateRestriction =
412e814680f4dd27a5f825afab189843582235cedcJan Nordqvist                PasspointManagementObjectManager.getSelection(policyUpdate, TAG_Restriction);
422e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mURI = PasspointManagementObjectManager.getString(policyUpdate, TAG_URI);
431d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
441d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        OMANode unp = policyUpdate.getChild(TAG_UsernamePassword);
451d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        if (unp != null) {
462e814680f4dd27a5f825afab189843582235cedcJan Nordqvist            mUsername = PasspointManagementObjectManager.getString(unp.getChild(TAG_Username));
472e814680f4dd27a5f825afab189843582235cedcJan Nordqvist            String pw = PasspointManagementObjectManager.getString(unp.getChild(TAG_Password));
481d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            mPassword = new String(Base64.decode(pw.getBytes(StandardCharsets.US_ASCII),
491d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                    Base64.DEFAULT), StandardCharsets.UTF_8);
501d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        }
511d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        else {
521d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            mUsername = null;
531d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist            mPassword = null;
541d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        }
551d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
562e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        OMANode trustRoot = PasspointManagementObjectManager.getChild(policyUpdate, TAG_TrustRoot);
572e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mCertURL = PasspointManagementObjectManager.getString(trustRoot, TAG_CertURL);
582e814680f4dd27a5f825afab189843582235cedcJan Nordqvist        mCertFP = PasspointManagementObjectManager.getString(trustRoot, TAG_CertSHA256Fingerprint);
591d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
601d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
611d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public long getInterval() {
621d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mInterval;
631d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
641d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
651d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public boolean isSPPClientInitiated() {
661d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mSPPClientInitiated;
671d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
681d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
691d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public UpdateRestriction getUpdateRestriction() {
701d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mUpdateRestriction;
711d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
721d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
731d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String getURI() {
741d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mURI;
751d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
761d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
771d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String getUsername() {
781d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mUsername;
791d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
801d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
811d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String getPassword() {
821d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mPassword;
831d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
841d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
851d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String getCertURL() {
861d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mCertURL;
871d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
881d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
891d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String getCertFP() {
901d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return mCertFP;
911d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
921d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist
931d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    @Override
941d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    public String toString() {
951d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist        return "UpdateInfo{" +
961d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                "interval=" + Utils.toHMS(mInterval) +
971d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", SPPClientInitiated=" + mSPPClientInitiated +
981d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", updateRestriction=" + mUpdateRestriction +
991d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", URI='" + mURI + '\'' +
1001d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", username='" + mUsername + '\'' +
1011d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", password=" + mPassword +
1021d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", certURL='" + mCertURL + '\'' +
1031d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                ", certFP='" + mCertFP + '\'' +
1041d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist                '}';
1051d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist    }
1061d5cd3938f9191184cd9aea3059a3b62bf3a0372Jan Nordqvist}
107