@@ -6,8 +6,6 @@ import fr.free.nrw.commons.auth.login.LoginResult.ResetPasswordResult
6
6
import fr.free.nrw.commons.wikidata.WikidataConstants.WIKIPEDIA_URL
7
7
import io.reactivex.android.schedulers.AndroidSchedulers
8
8
import io.reactivex.schedulers.Schedulers
9
- import org.wikipedia.dataclient.ServiceFactory
10
- import org.wikipedia.dataclient.WikiSite
11
9
import org.wikipedia.dataclient.mwapi.MwQueryResponse
12
10
import retrofit2.Call
13
11
import retrofit2.Callback
@@ -18,7 +16,7 @@ import java.io.IOException
18
16
/* *
19
17
* Responsible for making login related requests to the server.
20
18
*/
21
- class LoginClient {
19
+ class LoginClient ( private val loginInterface : LoginInterface ) {
22
20
private var tokenCall: Call <MwQueryResponse ?>? = null
23
21
private var loginCall: Call <LoginResponse ?>? = null
24
22
@@ -30,14 +28,18 @@ class LoginClient {
30
28
*/
31
29
private var userLanguage = " "
32
30
33
- fun request (wiki : WikiSite , userName : String , password : String , cb : LoginCallback ) {
31
+ fun getLoginToken () = loginInterface.getLoginToken()
32
+
33
+ fun request (userName : String , password : String , cb : LoginCallback ) {
34
34
cancel()
35
35
36
- tokenCall = ServiceFactory .get(wiki, LoginInterface :: class .java). getLoginToken()
36
+ tokenCall = getLoginToken()
37
37
tokenCall!! .enqueue(object : Callback <MwQueryResponse ?> {
38
38
override fun onResponse (call : Call <MwQueryResponse ?>, response : Response <MwQueryResponse ?>) {
39
- login(wiki, userName, password, null , null ,
40
- response.body()!! .query()!! .loginToken(), userLanguage, cb)
39
+ login(
40
+ userName, password, null , null , response.body()!! .query()!! .loginToken(),
41
+ userLanguage, cb
42
+ )
41
43
}
42
44
43
45
override fun onFailure (call : Call <MwQueryResponse ?>, caught : Throwable ) {
@@ -50,16 +52,15 @@ class LoginClient {
50
52
}
51
53
52
54
fun login (
53
- wiki : WikiSite , userName : String , password : String , retypedPassword : String? ,
54
- twoFactorCode : String? , loginToken : String? , userLanguage : String , cb : LoginCallback
55
+ userName : String , password : String , retypedPassword : String? , twoFactorCode : String? ,
56
+ loginToken : String? , userLanguage : String , cb : LoginCallback
55
57
) {
56
58
this .userLanguage = userLanguage
57
59
58
60
loginCall = if (twoFactorCode.isNullOrEmpty() && retypedPassword.isNullOrEmpty()) {
59
- ServiceFactory .get(wiki, LoginInterface ::class .java)
60
- .postLogIn(userName, password, loginToken, userLanguage, WIKIPEDIA_URL )
61
+ loginInterface.postLogIn(userName, password, loginToken, userLanguage, WIKIPEDIA_URL )
61
62
} else {
62
- ServiceFactory .get(wiki, LoginInterface :: class .java) .postLogIn(
63
+ loginInterface .postLogIn(
63
64
userName, password, retypedPassword, twoFactorCode, loginToken, userLanguage, true
64
65
)
65
66
}
@@ -69,12 +70,12 @@ class LoginClient {
69
70
call : Call <LoginResponse ?>,
70
71
response : Response <LoginResponse ?>
71
72
) {
72
- val loginResult = response.body()?.toLoginResult(wiki, password)
73
+ val loginResult = response.body()?.toLoginResult(password)
73
74
if (loginResult != null ) {
74
75
if (loginResult.pass && ! loginResult.userName.isNullOrEmpty()) {
75
76
// The server could do some transformations on user names, e.g. on some
76
77
// wikis is uppercases the first letter.
77
- getExtendedInfo(wiki, loginResult.userName, loginResult, cb)
78
+ getExtendedInfo(loginResult.userName, loginResult, cb)
78
79
} else if (" UI" == loginResult.status) {
79
80
when (loginResult) {
80
81
is OAuthResult -> cb.twoFactorPrompt(
@@ -106,25 +107,24 @@ class LoginClient {
106
107
}
107
108
108
109
@Throws(Throwable ::class )
109
- fun loginBlocking (wiki : WikiSite , userName : String , password : String , twoFactorCode : String? ) {
110
- val tokenResponse = ServiceFactory .get(wiki, LoginInterface :: class .java). getLoginToken().execute()
110
+ fun loginBlocking (userName : String , password : String , twoFactorCode : String? ) {
111
+ val tokenResponse = getLoginToken().execute()
111
112
if (tokenResponse.body()?.query()?.loginToken().isNullOrEmpty()) {
112
113
throw IOException (" Unexpected response when getting login token." )
113
114
}
114
115
115
116
val loginToken = tokenResponse.body()?.query()?.loginToken()
116
117
val tempLoginCall = if (twoFactorCode.isNullOrEmpty()) {
117
- ServiceFactory .get(wiki, LoginInterface ::class .java).postLogIn(
118
- userName, password, loginToken, userLanguage, WIKIPEDIA_URL )
118
+ loginInterface.postLogIn(userName, password, loginToken, userLanguage, WIKIPEDIA_URL )
119
119
} else {
120
- ServiceFactory .get(wiki, LoginInterface :: class .java) .postLogIn(
120
+ loginInterface .postLogIn(
121
121
userName, password, null , twoFactorCode, loginToken, userLanguage, true
122
122
)
123
123
}
124
124
125
125
val response = tempLoginCall.execute()
126
126
val loginResponse = response.body() ? : throw IOException (" Unexpected response when logging in." )
127
- val loginResult = loginResponse.toLoginResult(wiki, password) ? : throw IOException (" Unexpected response when logging in." )
127
+ val loginResult = loginResponse.toLoginResult(password) ? : throw IOException (" Unexpected response when logging in." )
128
128
129
129
if (" UI" == loginResult.status) {
130
130
if (loginResult is OAuthResult ) {
@@ -139,23 +139,18 @@ class LoginClient {
139
139
}
140
140
}
141
141
142
- private fun getExtendedInfo (
143
- wiki : WikiSite , userName : String , loginResult : LoginResult , cb : LoginCallback
144
- ) = ServiceFactory .get(wiki, LoginInterface ::class .java).getUserInfo(userName)
145
- .subscribeOn(Schedulers .io()).observeOn(AndroidSchedulers .mainThread())
146
- .subscribe({ response: MwQueryResponse ? ->
147
- loginResult.userId = response?.query()?.userInfo()?.id() ? : 0
148
- loginResult.groups = response?.query()?.getUserResponse(userName)?.groups ? : emptySet()
149
- cb.success(loginResult)
150
- Timber .v(
151
- " Found user ID %s for %s" ,
152
- response?.query()?.userInfo()?.id(),
153
- wiki.subdomain()
154
- )
155
- }, { caught: Throwable ->
156
- Timber .e(caught, " Login succeeded but getting group information failed. " )
157
- cb.error(caught)
158
- })
142
+ private fun getExtendedInfo (userName : String , loginResult : LoginResult , cb : LoginCallback ) =
143
+ loginInterface.getUserInfo(userName)
144
+ .subscribeOn(Schedulers .io()).observeOn(AndroidSchedulers .mainThread())
145
+ .subscribe({ response: MwQueryResponse ? ->
146
+ loginResult.userId = response?.query()?.userInfo()?.id() ? : 0
147
+ loginResult.groups =
148
+ response?.query()?.getUserResponse(userName)?.groups ? : emptySet()
149
+ cb.success(loginResult)
150
+ }, { caught: Throwable ->
151
+ Timber .e(caught, " Login succeeded but getting group information failed. " )
152
+ cb.error(caught)
153
+ })
159
154
160
155
fun cancel () {
161
156
tokenCall?.let {
0 commit comments