@@ -6,8 +6,6 @@ import fr.free.nrw.commons.auth.login.LoginResult.ResetPasswordResult
66import fr.free.nrw.commons.wikidata.WikidataConstants.WIKIPEDIA_URL
77import io.reactivex.android.schedulers.AndroidSchedulers
88import io.reactivex.schedulers.Schedulers
9- import org.wikipedia.dataclient.ServiceFactory
10- import org.wikipedia.dataclient.WikiSite
119import org.wikipedia.dataclient.mwapi.MwQueryResponse
1210import retrofit2.Call
1311import retrofit2.Callback
@@ -18,7 +16,7 @@ import java.io.IOException
1816/* *
1917 * Responsible for making login related requests to the server.
2018 */
21- class LoginClient {
19+ class LoginClient ( private val loginInterface : LoginInterface ) {
2220 private var tokenCall: Call <MwQueryResponse ?>? = null
2321 private var loginCall: Call <LoginResponse ?>? = null
2422
@@ -30,14 +28,18 @@ class LoginClient {
3028 */
3129 private var userLanguage = " "
3230
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 ) {
3434 cancel()
3535
36- tokenCall = ServiceFactory .get(wiki, LoginInterface :: class .java). getLoginToken()
36+ tokenCall = getLoginToken()
3737 tokenCall!! .enqueue(object : Callback <MwQueryResponse ?> {
3838 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+ )
4143 }
4244
4345 override fun onFailure (call : Call <MwQueryResponse ?>, caught : Throwable ) {
@@ -50,16 +52,15 @@ class LoginClient {
5052 }
5153
5254 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
5557 ) {
5658 this .userLanguage = userLanguage
5759
5860 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 )
6162 } else {
62- ServiceFactory .get(wiki, LoginInterface :: class .java) .postLogIn(
63+ loginInterface .postLogIn(
6364 userName, password, retypedPassword, twoFactorCode, loginToken, userLanguage, true
6465 )
6566 }
@@ -69,12 +70,12 @@ class LoginClient {
6970 call : Call <LoginResponse ?>,
7071 response : Response <LoginResponse ?>
7172 ) {
72- val loginResult = response.body()?.toLoginResult(wiki, password)
73+ val loginResult = response.body()?.toLoginResult(password)
7374 if (loginResult != null ) {
7475 if (loginResult.pass && ! loginResult.userName.isNullOrEmpty()) {
7576 // The server could do some transformations on user names, e.g. on some
7677 // wikis is uppercases the first letter.
77- getExtendedInfo(wiki, loginResult.userName, loginResult, cb)
78+ getExtendedInfo(loginResult.userName, loginResult, cb)
7879 } else if (" UI" == loginResult.status) {
7980 when (loginResult) {
8081 is OAuthResult -> cb.twoFactorPrompt(
@@ -106,25 +107,24 @@ class LoginClient {
106107 }
107108
108109 @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()
111112 if (tokenResponse.body()?.query()?.loginToken().isNullOrEmpty()) {
112113 throw IOException (" Unexpected response when getting login token." )
113114 }
114115
115116 val loginToken = tokenResponse.body()?.query()?.loginToken()
116117 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 )
119119 } else {
120- ServiceFactory .get(wiki, LoginInterface :: class .java) .postLogIn(
120+ loginInterface .postLogIn(
121121 userName, password, null , twoFactorCode, loginToken, userLanguage, true
122122 )
123123 }
124124
125125 val response = tempLoginCall.execute()
126126 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." )
128128
129129 if (" UI" == loginResult.status) {
130130 if (loginResult is OAuthResult ) {
@@ -139,23 +139,18 @@ class LoginClient {
139139 }
140140 }
141141
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+ })
159154
160155 fun cancel () {
161156 tokenCall?.let {
0 commit comments