@@ -3,10 +3,8 @@ package com.web3auth.core
33import android.content.Context
44import android.content.Intent
55import android.net.Uri
6- import android.os.Build
76import android.os.Handler
87import android.os.Looper
9- import androidx.annotation.RequiresApi
108import androidx.browser.customtabs.CustomTabsIntent
119import androidx.core.os.postDelayed
1210import com.google.gson.GsonBuilder
@@ -18,6 +16,7 @@ import com.web3auth.core.keystore.KeyStoreManagerUtils
1816import com.web3auth.core.types.*
1917import com.web3auth.core.types.Base64
2018import java8.util.concurrent.CompletableFuture
19+ import kotlinx.coroutines.DelicateCoroutinesApi
2120import kotlinx.coroutines.GlobalScope
2221import kotlinx.coroutines.launch
2322import org.json.JSONObject
@@ -75,7 +74,9 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions) {
7574 initiateKeyStoreManager()
7675
7776 // authorize session
78- authorizeSession()
77+ if (ApiHelper .isNetworkAvailable(context)) {
78+ authorizeSession()
79+ }
7980 }
8081
8182 private fun initiateKeyStoreManager () {
@@ -166,7 +167,7 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions) {
166167 fun login (loginParams : LoginParams ): CompletableFuture <Web3AuthResponse > {
167168 // check for share
168169 if (web3AuthOption.loginConfig != null ) {
169- var loginConfigItem: LoginConfigItem ? = web3AuthOption.loginConfig?.values?.first()
170+ val loginConfigItem: LoginConfigItem ? = web3AuthOption.loginConfig?.values?.first()
170171 val share: String? =
171172 KeyStoreManagerUtils .decryptData(loginConfigItem?.verifier.toString())
172173 if (share?.isNotEmpty() == true ) {
@@ -182,7 +183,9 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions) {
182183 }
183184
184185 fun logout (params : Map <String , Any >? = null): CompletableFuture <Void > {
185- sessionTimeOutAPI()
186+ if (ApiHelper .isNetworkAvailable(context)) {
187+ sessionTimeOutAPI()
188+ }
186189 request(" logout" , extraParams = params)
187190
188191 logoutCompletableFuture = CompletableFuture ()
@@ -192,42 +195,43 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions) {
192195 /* *
193196 * Authorize User session in order to avoid re-login
194197 */
198+ @OptIn(DelicateCoroutinesApi ::class )
195199 private fun authorizeSession () {
196200 sessionCompletableFuture = CompletableFuture ()
197201 sessionId = KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .SESSION_ID )
198202 if (sessionId != null && sessionId?.isNotEmpty() == true ) {
199203 val pubKey = " 04" .plus(KeyStoreManagerUtils .getPubKey(sessionId.toString()))
200204 GlobalScope .launch {
201- val result = web3AuthApi.authorizeSession(pubKey)
202- if (result.isSuccessful && result.body() != null ) {
203- val messageObj = JSONObject ( result.body()?.message).toString()
204- shareMetadata = gson.fromJson(
205- messageObj,
206- ShareMetadata :: class .java
207- )
208- println ( " shareMetadata $shareMetadata " )
209-
210- KeyStoreManagerUtils .savePreferenceData(
211- KeyStoreManagerUtils .EPHEM_PUBLIC_Key ,
212- shareMetadata.ephemPublicKey.toString()
213- )
214- KeyStoreManagerUtils .savePreferenceData(
215- KeyStoreManagerUtils .IV_KEY ,
216- shareMetadata.iv.toString()
217- )
218- KeyStoreManagerUtils .savePreferenceData(
219- KeyStoreManagerUtils .MAC ,
220- shareMetadata.mac.toString()
221- )
222-
223- val aes256cbc = AES256CBC (
224- sessionId?. let { it },
225- shareMetadata.ephemPublicKey ,
226- shareMetadata.iv.toString()
227- )
228-
229- // Implementation specific oddity - hex string actually gets passed as a base64 string
230- try {
205+ try {
206+ val result = web3AuthApi.authorizeSession(pubKey)
207+ if (result.isSuccessful && result.body() != null ) {
208+ val messageObj = JSONObject (result.body()?.message).toString()
209+ shareMetadata = gson.fromJson(
210+ messageObj,
211+ ShareMetadata :: class .java
212+ )
213+ println ( " shareMetadata $shareMetadata " )
214+
215+ KeyStoreManagerUtils .savePreferenceData(
216+ KeyStoreManagerUtils . EPHEM_PUBLIC_Key ,
217+ shareMetadata.ephemPublicKey.toString( )
218+ )
219+ KeyStoreManagerUtils .savePreferenceData(
220+ KeyStoreManagerUtils . IV_KEY ,
221+ shareMetadata.iv.toString( )
222+ )
223+ KeyStoreManagerUtils .savePreferenceData(
224+ KeyStoreManagerUtils . MAC ,
225+ shareMetadata.mac.toString( )
226+ )
227+
228+ val aes256cbc = AES256CBC (
229+ sessionId ,
230+ shareMetadata.ephemPublicKey,
231+ shareMetadata.iv.toString( )
232+ )
233+
234+ // Implementation specific oddity - hex string actually gets passed as a base64 string
231235 val encryptedShareBytes =
232236 AES256CBC .toByteArray(BigInteger (shareMetadata.ciphertext, 16 ))
233237 val share = aes256cbc.decrypt(Base64 .encodeBytes(encryptedShareBytes))
@@ -257,9 +261,9 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions) {
257261 sessionCompletableFuture.complete(web3AuthResponse)
258262 }
259263 }
260- } catch (ex: Exception ) {
261- ex.printStackTrace()
262264 }
265+ } catch (ex: Exception ) {
266+ ex.printStackTrace()
263267 }
264268 }
265269 }
@@ -273,39 +277,44 @@ class Web3Auth(web3AuthOptions: Web3AuthOptions) {
273277 * Session TimeOut API for logout
274278 */
275279 private fun sessionTimeOutAPI () {
276- val ephemKey =
277- KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .EPHEM_PUBLIC_Key )
278- val ivKey = KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .IV_KEY )
279- val mac = KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .MAC )
280-
281- if (ephemKey?.isEmpty() == true && ivKey?.isEmpty() == true ) return
280+ try {
281+ val ephemKey =
282+ KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .EPHEM_PUBLIC_Key )
283+ val ivKey = KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .IV_KEY )
284+ val mac = KeyStoreManagerUtils .getPreferencesData(KeyStoreManagerUtils .MAC )
285+
286+ if (ephemKey?.isEmpty() == true && ivKey?.isEmpty() == true ) return
287+
288+ val aes256cbc = AES256CBC (
289+ sessionId,
290+ ephemKey,
291+ ivKey.toString()
292+ )
293+ val encryptedData = aes256cbc.encrypt(" " .toByteArray(StandardCharsets .UTF_8 ))
294+ val encryptedMetadata = ShareMetadata (ivKey, ephemKey, encryptedData, mac)
295+ val gsonData = gson.toJson(encryptedMetadata)
282296
283- val aes256cbc = AES256CBC (
284- sessionId?.let { it },
285- ephemKey,
286- ivKey.toString()
287- )
288- var encryptedData = aes256cbc.encrypt(" " .toByteArray(StandardCharsets .UTF_8 ))
289- var encryptedMetadata = ShareMetadata (ivKey, ephemKey, encryptedData, mac)
290- var gsonData = gson.toJson(encryptedMetadata)
291-
292- GlobalScope .launch {
293- val result = web3AuthApi.logout(
294- LogoutApiRequest (
295- key = " 04" .plus(KeyStoreManagerUtils .getPubKey(sessionId = sessionId.toString())),
296- data = gsonData,
297- signature = KeyStoreManagerUtils .getECDSASignature(
298- BigInteger (sessionId, 16 ),
299- gsonData
300- ),
301- timeout = 1
297+ GlobalScope .launch {
298+ val result = web3AuthApi.logout(
299+ LogoutApiRequest (
300+ key = " 04" .plus(KeyStoreManagerUtils .getPubKey(sessionId = sessionId.toString())),
301+ data = gsonData,
302+ signature = KeyStoreManagerUtils .getECDSASignature(
303+ sessionId?.let { BigInteger (it, 16 ) },
304+ gsonData
305+ ),
306+ timeout = 1
307+ )
302308 )
303- )
304- if (result.isSuccessful) {
305- // Delete local storage
306- var loginConfigItem: LoginConfigItem ? = web3AuthOption.loginConfig?.values?.first()
307- KeyStoreManagerUtils .deletePreferencesData(loginConfigItem?.verifier.toString())
309+ if (result.isSuccessful) {
310+ // Delete local storage
311+ val loginConfigItem: LoginConfigItem ? =
312+ web3AuthOption.loginConfig?.values?.first()
313+ KeyStoreManagerUtils .deletePreferencesData(loginConfigItem?.verifier.toString())
314+ }
308315 }
316+ } catch (ex: Exception ) {
317+ ex.printStackTrace()
309318 }
310319 }
311320
0 commit comments