Skip to content

Commit 40426b5

Browse files
authored
Merge pull request #59 from Azure-Samples/custom_headers_updated
Update NativeAuth imports and added UI Automation intent based initialisation
2 parents a3c774d + df1f8eb commit 40426b5

10 files changed

Lines changed: 37 additions & 23 deletions

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/AccessApiFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import android.widget.Toast
99
import androidx.appcompat.app.AppCompatActivity
1010
import androidx.fragment.app.Fragment
1111
import com.azuresamples.msalnativeauthandroidkotlinsampleapp.databinding.FragmentAccessApiBinding
12-
import com.microsoft.identity.common.java.util.StringUtil
1312
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
1413
import com.microsoft.identity.nativeauth.parameters.NativeAuthGetAccessTokenParameters
1514
import com.microsoft.identity.nativeauth.parameters.NativeAuthSignInParameters
@@ -110,7 +109,7 @@ class AccessApiFragment : Fragment() {
110109
val actionResult: SignInResult = authClient.signIn(signInParameters)
111110

112111
binding.passwordText.text?.clear()
113-
StringUtil.overwriteWithNull(password)
112+
password.fill('\u0000')
114113

115114
when (actionResult) {
116115
is SignInResult.Complete -> {

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/AuthClient.kt

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,47 @@ import android.util.Log
66
import com.microsoft.identity.client.Logger
77
import com.microsoft.identity.client.PublicClientApplication
88
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
9+
import com.microsoft.identity.nativeauth.NativeAuthPublicClientApplicationParameters
910

1011
object AuthClient : Application() {
1112
private lateinit var authClient: INativeAuthPublicClientApplication
1213

14+
const val EXTRA_CLIENT_ID = "native_auth_client_id"
15+
const val EXTRA_AUTHORITY_URL = "native_auth_authority_url"
16+
1317
@JvmStatic
1418
fun getAuthClient(): INativeAuthPublicClientApplication {
1519
return authClient
1620
}
1721

22+
// Initialize the auth client with the provided clientId and authorityUrl, or with the default config file if they are not provided.
1823
@JvmStatic
19-
fun initialize(context: Context) {
24+
fun initialize(context: Context, clientId: String? = null, authorityUrl: String? = null) {
2025
Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
2126
Log.e(
2227
"MSAL",
2328
"$tag $logLevel $message"
2429
)
2530
}
2631

27-
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
28-
context,
29-
R.raw.auth_config_native_auth
30-
)
32+
// If clientId and authorityUrl are provided, create the auth client with the provided values. Otherwise, create the auth client with the default config file.
33+
if (clientId != null && authorityUrl != null) {
34+
val parameters = NativeAuthPublicClientApplicationParameters(
35+
clientId = clientId,
36+
authorityUrl = authorityUrl,
37+
challengeTypes = listOf("oob", "password")
38+
)
39+
parameters.capabilities = listOf("mfa_required", "registration_required")
40+
41+
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
42+
context,
43+
parameters
44+
)
45+
} else {
46+
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
47+
context,
48+
R.raw.auth_config_native_auth
49+
)
50+
}
3151
}
3252
}

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/EmailAttributeSignUpFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import android.view.ViewGroup
88
import android.widget.Toast
99
import androidx.fragment.app.Fragment
1010
import com.azuresamples.msalnativeauthandroidkotlinsampleapp.databinding.FragmentEmailAttributeBinding
11-
import com.microsoft.identity.common.java.util.StringUtil
1211
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
1312
import com.microsoft.identity.nativeauth.UserAttributes
1413
import com.microsoft.identity.nativeauth.parameters.NativeAuthGetAccessTokenParameters
@@ -111,7 +110,7 @@ class EmailAttributeSignUpFragment : Fragment() {
111110
val actionResult: SignUpResult = authClient.signUp(parameters)
112111

113112
binding.passwordText.text?.clear()
114-
StringUtil.overwriteWithNull(password)
113+
password.fill('\u0000')
115114

116115
when (actionResult) {
117116
is SignUpResult.CodeRequired -> {

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/EmailPasswordSignInSignUpFragment.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import android.widget.Toast
99
import androidx.fragment.app.Fragment
1010
import com.azuresamples.msalnativeauthandroidkotlinsampleapp.databinding.FragmentEmailPasswordBinding
1111
import com.microsoft.identity.client.PublicClientApplication
12-
import com.microsoft.identity.common.java.nativeauth.providers.NativeAuthRequestInterceptor
13-
import com.microsoft.identity.common.java.util.StringUtil
12+
import com.microsoft.identity.nativeauth.NativeAuthRequestInterceptor
1413
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
1514
import com.microsoft.identity.nativeauth.NativeAuthPublicClientApplicationConfiguration
1615
import com.microsoft.identity.nativeauth.parameters.NativeAuthGetAccessTokenParameters
@@ -120,7 +119,7 @@ class EmailPasswordSignInSignUpFragment : Fragment(), NativeAuthRequestIntercept
120119
val actionResult: SignInResult = authClient.signIn(parameters)
121120

122121
binding.passwordText.text?.clear()
123-
StringUtil.overwriteWithNull(password)
122+
password.fill('\u0000')
124123

125124
when (actionResult) {
126125
is SignInResult.Complete -> {
@@ -160,7 +159,7 @@ class EmailPasswordSignInSignUpFragment : Fragment(), NativeAuthRequestIntercept
160159
val actionResult: SignUpResult = authClient.signUp(parameters)
161160

162161
binding.passwordText.text?.clear()
163-
StringUtil.overwriteWithNull(password)
162+
password.fill('\u0000')
164163

165164
when (actionResult) {
166165
is SignUpResult.CodeRequired -> {

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/MFAFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import androidx.appcompat.app.AppCompatActivity
1010
import androidx.fragment.app.Fragment
1111
import com.azuresamples.msalnativeauthandroidkotlinsampleapp.databinding.FragmentEmailPasswordBinding
1212
import com.microsoft.identity.client.claims.ClaimsRequest
13-
import com.microsoft.identity.common.java.util.StringUtil
1413
import com.microsoft.identity.nativeauth.AuthMethod
1514
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
1615
import com.microsoft.identity.nativeauth.parameters.NativeAuthGetAccessTokenParameters
@@ -102,7 +101,7 @@ class MFAFragment : Fragment() {
102101
parameters.password = password
103102
val actionResult: SignInResult = authClient.signIn(parameters)
104103
binding.passwordText.text?.clear()
105-
StringUtil.overwriteWithNull(password)
104+
password.fill('\u0000')
106105

107106
when (actionResult) {
108107
is SignInResult.Complete -> {

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/MainActivity.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ class MainActivity : AppCompatActivity() {
1818
val binding = ActivityMainBinding.inflate(layoutInflater)
1919
setContentView(binding.root)
2020

21-
AuthClient.initialize(this@MainActivity)
21+
val clientId = intent.getStringExtra(AuthClient.EXTRA_CLIENT_ID)
22+
val authorityUrl = intent.getStringExtra(AuthClient.EXTRA_AUTHORITY_URL)
23+
AuthClient.initialize(this@MainActivity, clientId, authorityUrl)
2224

2325
val emailSignInSignUpFragment = EmailSignInSignUpFragment()
2426
val emailPasswordSignInSignUpFragment = EmailPasswordSignInSignUpFragment()

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/PasswordResetNewPasswordFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import android.widget.Toast
99
import androidx.fragment.app.Fragment
1010
import androidx.fragment.app.FragmentManager
1111
import com.azuresamples.msalnativeauthandroidkotlinsampleapp.databinding.FragmentPasswordBinding
12-
import com.microsoft.identity.common.java.util.StringUtil
1312
import com.microsoft.identity.nativeauth.parameters.NativeAuthSignInContinuationParameters
1413
import com.microsoft.identity.nativeauth.statemachine.errors.ResetPasswordSubmitPasswordError
1514
import com.microsoft.identity.nativeauth.statemachine.errors.SignInContinuationError
@@ -60,7 +59,7 @@ class PasswordResetNewPasswordFragment : Fragment() {
6059

6160
val actionResult: ResetPasswordSubmitPasswordResult = currentState.submitPassword(password)
6261
binding.passwordText.text?.clear()
63-
StringUtil.overwriteWithNull(password)
62+
password.fill('\u0000')
6463

6564
when (actionResult) {
6665
is ResetPasswordResult.Complete -> {

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/SignUpAttributesFragment.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,8 @@ class SignUpAttributesFragment : Fragment() {
5656

5757
private fun submitAttributes() {
5858
CoroutineScope(Dispatchers.Main).launch {
59-
val username = binding.usernameText.text.toString()
6059

6160
val attributes = UserAttributes.Builder()
62-
.flatUsername(username)
6361
.build()
6462

6563
val actionResult = currentState.submitAttributes(attributes)

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/SignUpCodeFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class SignUpCodeFragment : Fragment() {
7272
is SignUpResult.AttributesRequired -> {
7373
// Custom implementation for Flat Username / Alias
7474
if (actionResult.requiredAttributes.size == 1 &&
75-
actionResult.requiredAttributes.any { it.name == "flatusername" }
75+
actionResult.requiredAttributes.any { it.attributeName == "flatusername" }
7676
) {
7777
navigateToAttributes(
7878
nextState = actionResult.nextState

app/src/main/java/com/azuresamples/msalnativeauthandroidkotlinsampleapp/WebFallbackFragment.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import com.microsoft.identity.client.AuthenticationCallback
1515
import com.microsoft.identity.client.IAccount
1616
import com.microsoft.identity.client.IAuthenticationResult
1717
import com.microsoft.identity.client.exception.MsalException
18-
import com.microsoft.identity.common.java.util.StringUtil
1918
import com.microsoft.identity.nativeauth.INativeAuthPublicClientApplication
2019
import com.microsoft.identity.nativeauth.parameters.NativeAuthSignInParameters
2120
import com.microsoft.identity.nativeauth.statemachine.errors.GetAccountError
@@ -96,7 +95,7 @@ class WebFallbackFragment : Fragment() {
9695
val actionResult: SignInResult = authClient.signIn(parameters)
9796

9897
binding.passwordText.text?.clear()
99-
StringUtil.overwriteWithNull(password)
98+
password.fill('\u0000')
10099

101100
if (actionResult is SignInError && actionResult.isBrowserRequired()) {
102101
Toast.makeText(requireContext(), actionResult.errorMessage, Toast.LENGTH_SHORT)

0 commit comments

Comments
 (0)