Loading app/src/main/java/at/bitfire/davdroid/ui/setup/GoogleAuthenticatorFragment.kt +69 −24 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ import at.bitfire.dav4android.Constants import at.bitfire.davdroid.authorization.IdentityProvider import at.bitfire.davdroid.R import kotlinx.android.synthetic.main.fragment_google_authenticator.* import kotlinx.android.synthetic.main.login_credentials_fragment.view.* import net.openid.appauth.* import org.json.JSONException Loading @@ -28,6 +27,8 @@ import java.io.InputStreamReader import java.net.* import java.util.HashMap import java.util.logging.Level import android.net.ConnectivityManager import android.widget.Toast class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenResponseCallback { Loading @@ -41,10 +42,21 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon private val bufferSize = 1024 private var userInfoJson: JSONObject? = null private fun isNetworkAvailable(): Boolean { val connectivityManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val activeNetworkInfo = connectivityManager.activeNetworkInfo return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_google_authenticator, container, false) if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } // Initialise the authorization service authorizationService = AuthorizationService(context!!) Loading @@ -60,7 +72,8 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon makeAuthRequest(serviceConfiguration, idp) } else { // TODO Handle error Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } Loading @@ -71,7 +84,6 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } } else { if (authState == null) { val response = AuthorizationResponse.fromIntent(activity!!.intent) val ex = AuthorizationException.fromIntent(activity!!.intent) authState = AuthState(response, ex) Loading @@ -80,8 +92,8 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon exchangeAuthorizationCode(response) } else { // TODO Handle error } Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } } Loading @@ -92,6 +104,10 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon private fun makeAuthRequest( serviceConfig: AuthorizationServiceConfiguration, idp: IdentityProvider) { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } val authRequest = AuthorizationRequest.Builder( serviceConfig, Loading Loading @@ -137,6 +153,11 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun exchangeAuthorizationCode(authorizationResponse: AuthorizationResponse) { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } val additionalParams = HashMap<String, String?>() if (getClientSecretFromIntent(activity!!.intent) != null) { additionalParams["client_secret"] = getClientSecretFromIntent(activity!!.intent) Loading @@ -153,6 +174,11 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon private fun performTokenRequest(request: TokenRequest) { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } authorizationService?.performTokenRequest( request, this) } Loading @@ -164,17 +190,26 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun getAccountInfo() { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } val discoveryDoc = getDiscoveryDocFromIntent(activity!!.intent) if (!authState!!.isAuthorized || discoveryDoc == null || discoveryDoc.userinfoEndpoint == null) { //TODO Error occurred Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } else { object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { fetchUserInfo() if (fetchUserInfo()) { Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } return null } }.execute() Loading @@ -198,15 +233,16 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun fetchUserInfo() { private fun fetchUserInfo(): Boolean { var error = false if (authState!!.authorizationServiceConfiguration == null) { // TODO Handle error due to unavailable service configuration return return true } authState!!.performActionWithFreshTokens(authorizationService!!, AuthState.AuthStateAction { accessToken, _, ex -> if (ex != null) { // TODO An exception occurred, handle error error = true return@AuthStateAction } Loading @@ -218,7 +254,7 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon userInfoEndpoint = URL(discoveryDoc.userinfoEndpoint!!.toString()) } catch (urlEx: MalformedURLException) { // TODO Handle error due to malformed URL error = true return@AuthStateAction } Loading @@ -232,10 +268,10 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon updateUserInfo(JSONObject(response)) } catch (ioEx: IOException) { // TODO Handle network error error = true } catch (jsonEx: JSONException) { // TODO Handle JSON parse error error = true } finally { if (userInfoResponse != null) { Loading @@ -243,12 +279,14 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon userInfoResponse.close() } catch (ioEx: IOException) { // TODO Handle network exception while closing response stream error = true } } } }) return error } @Throws(IOException::class) Loading @@ -272,6 +310,11 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun onAccountInfoGotten() { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } if (userInfoJson != null) { try { var emailAddress = "" Loading @@ -284,12 +327,14 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } } catch (ex: JSONException) { // TODO Handle JSON parse error Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } else { //TODO Handle error Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } Loading Loading
app/src/main/java/at/bitfire/davdroid/ui/setup/GoogleAuthenticatorFragment.kt +69 −24 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ import at.bitfire.dav4android.Constants import at.bitfire.davdroid.authorization.IdentityProvider import at.bitfire.davdroid.R import kotlinx.android.synthetic.main.fragment_google_authenticator.* import kotlinx.android.synthetic.main.login_credentials_fragment.view.* import net.openid.appauth.* import org.json.JSONException Loading @@ -28,6 +27,8 @@ import java.io.InputStreamReader import java.net.* import java.util.HashMap import java.util.logging.Level import android.net.ConnectivityManager import android.widget.Toast class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenResponseCallback { Loading @@ -41,10 +42,21 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon private val bufferSize = 1024 private var userInfoJson: JSONObject? = null private fun isNetworkAvailable(): Boolean { val connectivityManager = activity!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val activeNetworkInfo = connectivityManager.activeNetworkInfo return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_google_authenticator, container, false) if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } // Initialise the authorization service authorizationService = AuthorizationService(context!!) Loading @@ -60,7 +72,8 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon makeAuthRequest(serviceConfiguration, idp) } else { // TODO Handle error Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } Loading @@ -71,7 +84,6 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } } else { if (authState == null) { val response = AuthorizationResponse.fromIntent(activity!!.intent) val ex = AuthorizationException.fromIntent(activity!!.intent) authState = AuthState(response, ex) Loading @@ -80,8 +92,8 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon exchangeAuthorizationCode(response) } else { // TODO Handle error } Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } } Loading @@ -92,6 +104,10 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon private fun makeAuthRequest( serviceConfig: AuthorizationServiceConfiguration, idp: IdentityProvider) { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } val authRequest = AuthorizationRequest.Builder( serviceConfig, Loading Loading @@ -137,6 +153,11 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun exchangeAuthorizationCode(authorizationResponse: AuthorizationResponse) { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } val additionalParams = HashMap<String, String?>() if (getClientSecretFromIntent(activity!!.intent) != null) { additionalParams["client_secret"] = getClientSecretFromIntent(activity!!.intent) Loading @@ -153,6 +174,11 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon private fun performTokenRequest(request: TokenRequest) { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } authorizationService?.performTokenRequest( request, this) } Loading @@ -164,17 +190,26 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun getAccountInfo() { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } val discoveryDoc = getDiscoveryDocFromIntent(activity!!.intent) if (!authState!!.isAuthorized || discoveryDoc == null || discoveryDoc.userinfoEndpoint == null) { //TODO Error occurred Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } else { object : AsyncTask<Void, Void, Void>() { override fun doInBackground(vararg params: Void): Void? { fetchUserInfo() if (fetchUserInfo()) { Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } return null } }.execute() Loading @@ -198,15 +233,16 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun fetchUserInfo() { private fun fetchUserInfo(): Boolean { var error = false if (authState!!.authorizationServiceConfiguration == null) { // TODO Handle error due to unavailable service configuration return return true } authState!!.performActionWithFreshTokens(authorizationService!!, AuthState.AuthStateAction { accessToken, _, ex -> if (ex != null) { // TODO An exception occurred, handle error error = true return@AuthStateAction } Loading @@ -218,7 +254,7 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon userInfoEndpoint = URL(discoveryDoc.userinfoEndpoint!!.toString()) } catch (urlEx: MalformedURLException) { // TODO Handle error due to malformed URL error = true return@AuthStateAction } Loading @@ -232,10 +268,10 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon updateUserInfo(JSONObject(response)) } catch (ioEx: IOException) { // TODO Handle network error error = true } catch (jsonEx: JSONException) { // TODO Handle JSON parse error error = true } finally { if (userInfoResponse != null) { Loading @@ -243,12 +279,14 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon userInfoResponse.close() } catch (ioEx: IOException) { // TODO Handle network exception while closing response stream error = true } } } }) return error } @Throws(IOException::class) Loading @@ -272,6 +310,11 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } private fun onAccountInfoGotten() { if (!isNetworkAvailable()) { Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_LONG).show() activity!!.finish() } if (userInfoJson != null) { try { var emailAddress = "" Loading @@ -284,12 +327,14 @@ class GoogleAuthenticatorFragment : Fragment(), AuthorizationService.TokenRespon } } catch (ex: JSONException) { // TODO Handle JSON parse error Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } else { //TODO Handle error Toast.makeText(context, "Login failed, please try again later", Toast.LENGTH_LONG).show() activity!!.finish() } } Loading