@@ -2,51 +2,72 @@ package org.edx.mobile.social.microsoft
2
2
3
3
import android.app.Activity
4
4
import android.content.Intent
5
+ import com.microsoft.identity.client.AcquireTokenParameters
5
6
import com.microsoft.identity.client.AuthenticationCallback
7
+ import com.microsoft.identity.client.IAccount
6
8
import com.microsoft.identity.client.IAuthenticationResult
9
+ import com.microsoft.identity.client.IMultipleAccountPublicClientApplication
10
+ import com.microsoft.identity.client.IPublicClientApplication
7
11
import com.microsoft.identity.client.PublicClientApplication
8
12
import com.microsoft.identity.client.exception.MsalException
9
13
import org.edx.mobile.R
10
14
import org.edx.mobile.social.ISocialImpl
11
15
12
16
class MicrosoftAuth (activity : Activity ? ) : ISocialImpl(activity) {
13
- private var microsoftClient: PublicClientApplication ? = null
17
+ private var microsoftClient: IMultipleAccountPublicClientApplication ? = null
18
+
14
19
override fun login () {
15
- microsoftClient = PublicClientApplication (this .activity, R .raw.auth_config)
16
- microsoftClient?.acquireToken(activity, SCOPES , object : AuthenticationCallback {
17
- override fun onSuccess (authenticationResult : IAuthenticationResult ) {
18
- callback?.onLogin(authenticationResult.accessToken)
19
- logger.debug(" Microsoft Logged in successfully." )
20
- }
20
+ PublicClientApplication .createMultipleAccountPublicClientApplication(this .activity,
21
+ R .raw.auth_config,
22
+ object : IPublicClientApplication .IMultipleAccountApplicationCreatedListener {
23
+ override fun onCreated (application : IMultipleAccountPublicClientApplication ) {
24
+ microsoftClient = application
25
+ microsoftClient?.acquireToken(
26
+ AcquireTokenParameters .Builder ()
27
+ .startAuthorizationFromActivity(activity)
28
+ .withScopes(SCOPES )
29
+ .withCallback(object : AuthenticationCallback {
30
+ override fun onSuccess (authenticationResult : IAuthenticationResult ? ) {
31
+ callback?.onLogin(authenticationResult?.accessToken)
32
+ logger.debug(" Microsoft Logged in successfully." )
33
+ }
21
34
22
- override fun onError (exception : MsalException ) {
23
- callback?.onError(exception)
24
- logger.error(exception, true )
25
- }
35
+ override fun onError (exception : MsalException ) {
36
+ callback?.onError(exception)
37
+ logger.error(exception, true )
38
+ }
26
39
27
- override fun onCancel () {
28
- callback?.onCancel()
29
- logger.debug(" Microsoft Log in canceled." )
30
- }
31
- })
40
+ override fun onCancel () {
41
+ callback?.onCancel()
42
+ logger.debug(" Microsoft Log in canceled." )
43
+ }
44
+ })
45
+ .build()
46
+ )
47
+ }
48
+
49
+ override fun onError (exception : MsalException ) {
50
+ logger.error(exception, true )
51
+ callback?.onError(exception)
52
+ }
53
+ })
32
54
}
33
55
34
56
override fun logout () {
35
- microsoftClient?.getAccounts { accounts ->
36
- if (accounts.isNotEmpty()) {
37
- for (account in accounts) {
38
- // Pass empty callback because sometime throw `NullPointerException`
39
- // due to null callback
40
- microsoftClient?.removeAccount(
41
- account) { }
42
- }
57
+ microsoftClient?.getAccounts(object : IPublicClientApplication .LoadAccountsCallback {
58
+ override fun onTaskCompleted (result : MutableList <IAccount >? ) {
59
+ result?.forEach { microsoftClient?.removeAccount(it) }
43
60
}
44
- }
61
+
62
+ override fun onError (exception : MsalException ? ) {
63
+ logger.error(exception, true )
64
+ }
65
+ })
45
66
}
46
67
47
68
override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {}
48
69
49
70
companion object {
50
- private val SCOPES = arrayOf( " https://graph.microsoft.com/ User.Read" )
71
+ private val SCOPES = listOf ( " User.Read" )
51
72
}
52
73
}
0 commit comments