|
53 | 53 | import com.google.gson.reflect.TypeToken; |
54 | 54 | import com.nextcloud.android.common.ui.color.ColorUtil; |
55 | 55 | import com.nextcloud.android.common.ui.theme.utils.ColorRole; |
| 56 | +import com.nextcloud.android.lib.resources.users.GenerateOneTimeAppPasswordRemoteOperation; |
56 | 57 | import com.nextcloud.client.account.User; |
57 | 58 | import com.nextcloud.client.account.UserAccountManager; |
58 | 59 | import com.nextcloud.client.device.DeviceInfo; |
|
61 | 62 | import com.nextcloud.client.onboarding.FirstRunActivity; |
62 | 63 | import com.nextcloud.client.onboarding.OnboardingService; |
63 | 64 | import com.nextcloud.client.preferences.AppPreferences; |
| 65 | +import com.nextcloud.common.NextcloudClient; |
64 | 66 | import com.nextcloud.common.PlainClient; |
65 | 67 | import com.nextcloud.operations.PostMethod; |
66 | 68 | import com.nextcloud.utils.extensions.BundleExtensionsKt; |
|
137 | 139 | import androidx.lifecycle.LifecycleEventObserver; |
138 | 140 | import androidx.lifecycle.ProcessLifecycleOwner; |
139 | 141 | import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; |
| 142 | +import okhttp3.Credentials; |
140 | 143 | import okhttp3.FormBody; |
141 | 144 | import okhttp3.RequestBody; |
142 | 145 |
|
@@ -1594,7 +1597,36 @@ private void startQRScanner() { |
1594 | 1597 | accountManager.getAccounts().length == 1) { |
1595 | 1598 | DisplayUtils.showSnackMessage(this, R.string.no_mutliple_accounts_allowed); |
1596 | 1599 | } else { |
1597 | | - parseAndLoginFromWebView(resultData); |
| 1600 | + String onetimePrefix = getString(R.string.login_data_own_scheme) + PROTOCOL_SUFFIX + "onetime-login/"; |
| 1601 | + |
| 1602 | + if (resultData.startsWith(onetimePrefix)) { |
| 1603 | + LoginUrlInfo loginUrlInfo = parseLoginDataUrl(onetimePrefix, resultData); |
| 1604 | + |
| 1605 | + GenerateOneTimeAppPasswordRemoteOperation generateOneTimeAppPasswordRemoteOperation = new GenerateOneTimeAppPasswordRemoteOperation(); |
| 1606 | + |
| 1607 | + String credentials = Credentials.basic(loginUrlInfo.getLoginName(), loginUrlInfo.getAppPassword()); |
| 1608 | + NextcloudClient nextcloudClient = new NextcloudClient(Uri.parse(loginUrlInfo.getServer()), loginUrlInfo.getLoginName(), credentials,this); |
| 1609 | + |
| 1610 | + new Thread(new Runnable() { |
| 1611 | + @Override |
| 1612 | + public void run() { |
| 1613 | + RemoteOperationResult<String> otpResult = nextcloudClient.execute(generateOneTimeAppPasswordRemoteOperation); |
| 1614 | + |
| 1615 | + mServerInfo.mBaseUrl = AuthenticatorUrlUtils.INSTANCE.normalizeUrlSuffix(loginUrlInfo.getServer()); |
| 1616 | + webViewUser = loginUrlInfo.getLoginName(); |
| 1617 | + webViewPassword = otpResult.getResultData(); |
| 1618 | + |
| 1619 | + runOnUiThread(new Runnable() { |
| 1620 | + @Override |
| 1621 | + public void run() { |
| 1622 | + checkOcServer(); |
| 1623 | + } |
| 1624 | + }); |
| 1625 | + } |
| 1626 | + }).start(); |
| 1627 | + } else { |
| 1628 | + parseAndLoginFromWebView(resultData); |
| 1629 | + } |
1598 | 1630 | } |
1599 | 1631 | } |
1600 | 1632 | }); |
|
0 commit comments