Skip to content

Commit 490e92d

Browse files
Merge pull request #16166 from nextcloud/apppassword-onetime
Apppassword onetime
2 parents aa175fd + 538a2b3 commit 490e92d

3 files changed

Lines changed: 53 additions & 2 deletions

File tree

app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import com.google.gson.reflect.TypeToken;
5454
import com.nextcloud.android.common.ui.color.ColorUtil;
5555
import com.nextcloud.android.common.ui.theme.utils.ColorRole;
56+
import com.nextcloud.android.lib.resources.users.GenerateOneTimeAppPasswordRemoteOperation;
5657
import com.nextcloud.client.account.User;
5758
import com.nextcloud.client.account.UserAccountManager;
5859
import com.nextcloud.client.device.DeviceInfo;
@@ -61,6 +62,7 @@
6162
import com.nextcloud.client.onboarding.FirstRunActivity;
6263
import com.nextcloud.client.onboarding.OnboardingService;
6364
import com.nextcloud.client.preferences.AppPreferences;
65+
import com.nextcloud.common.NextcloudClient;
6466
import com.nextcloud.common.PlainClient;
6567
import com.nextcloud.operations.PostMethod;
6668
import com.nextcloud.utils.extensions.BundleExtensionsKt;
@@ -137,6 +139,7 @@
137139
import androidx.lifecycle.LifecycleEventObserver;
138140
import androidx.lifecycle.ProcessLifecycleOwner;
139141
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
142+
import okhttp3.Credentials;
140143
import okhttp3.FormBody;
141144
import okhttp3.RequestBody;
142145

@@ -1594,11 +1597,43 @@ private void startQRScanner() {
15941597
accountManager.getAccounts().length == 1) {
15951598
DisplayUtils.showSnackMessage(this, R.string.no_mutliple_accounts_allowed);
15961599
} 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+
parseAndLoginFromOneTimeCode(onetimePrefix, resultData);
1604+
} else {
1605+
parseAndLoginFromWebView(resultData);
1606+
}
15981607
}
15991608
}
16001609
});
16011610

1611+
private void parseAndLoginFromOneTimeCode(String onetimePrefix, String resultData) {
1612+
LoginUrlInfo loginUrlInfo = parseLoginDataUrl(onetimePrefix, resultData);
1613+
1614+
GenerateOneTimeAppPasswordRemoteOperation generateOneTimeAppPasswordRemoteOperation = new GenerateOneTimeAppPasswordRemoteOperation();
1615+
1616+
String credentials = Credentials.basic(loginUrlInfo.getLoginName(), loginUrlInfo.getAppPassword());
1617+
NextcloudClient nextcloudClient = new NextcloudClient(Uri.parse(loginUrlInfo.getServer()), loginUrlInfo.getLoginName(), credentials, this);
1618+
1619+
new Thread(() -> {
1620+
RemoteOperationResult<String> otpResult = nextcloudClient.execute(generateOneTimeAppPasswordRemoteOperation);
1621+
1622+
if (otpResult.isSuccess()) {
1623+
mServerInfo.mBaseUrl = AuthenticatorUrlUtils.INSTANCE.normalizeUrlSuffix(loginUrlInfo.getServer());
1624+
webViewUser = loginUrlInfo.getLoginName();
1625+
webViewPassword = otpResult.getResultData();
1626+
1627+
runOnUiThread(this::checkOcServer);
1628+
} else {
1629+
mServerStatusIcon = R.drawable.ic_alert;
1630+
mServerStatusText = getString(R.string.qr_could_not_be_read);
1631+
1632+
runOnUiThread(this::showServerStatus);
1633+
}
1634+
}).start();
1635+
}
1636+
16021637
@Override
16031638
public void onRequestPermissionsResult(int requestCode,
16041639
@NonNull String[] permissions,

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
androidCommonLibraryVersion = "0.31.0"
66
androidGifDrawableVersion = "1.2.30"
77
androidImageCropperVersion = "4.7.0"
8-
androidLibraryVersion = "f4feed395eb081face0490447c07ce4ecd293baa"
8+
androidLibraryVersion = "c112fd86c76f429db250e6abca711348e5534c0a"
99
androidPluginVersion = '8.13.2'
1010
androidsvgVersion = "1.4"
1111
androidxMediaVersion = "1.5.1"

gradle/verification-metadata.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20243,6 +20243,14 @@
2024320243
<sha256 value="bb68aa824d8769dbe93875da75891dc3794519fdd13c60a7c2bd45c1353634d8" origin="Generated by Gradle" reason="Artifact is not signed"/>
2024420244
</artifact>
2024520245
</component>
20246+
<component group="com.github.nextcloud" name="android-library" version="c112fd86c76f429db250e6abca711348e5534c0a">
20247+
<artifact name="android-library-c112fd86c76f429db250e6abca711348e5534c0a.aar">
20248+
<sha256 value="734d60cbf9bf18f58e83bd93524e1e02c0b2ffe5d9f57c906393df7362227dbd" origin="Generated by Gradle" reason="Artifact is not signed"/>
20249+
</artifact>
20250+
<artifact name="android-library-c112fd86c76f429db250e6abca711348e5534c0a.module">
20251+
<sha256 value="06fb9545246ae9964d83c8bc60d40fb96dc86904a88bd101896c0acc30d3d524" origin="Generated by Gradle" reason="Artifact is not signed"/>
20252+
</artifact>
20253+
</component>
2024620254
<component group="com.github.nextcloud" name="android-library" version="c219388da22028f36219acff61ae2d722a63f408">
2024720255
<artifact name="android-library-c219388da22028f36219acff61ae2d722a63f408.aar">
2024820256
<sha256 value="c253a126ca3c32dd5b373ab1c64668e4603305b3113b052fc0fc5e3c833a913c" origin="Generated by Gradle" reason="Artifact is not signed"/>
@@ -20328,6 +20336,14 @@
2032820336
<sha256 value="54aed157e9fbecdd01361b651f4f25163ffe6589d50c9506110f450e6faa9b01" origin="Generated by Gradle" reason="Artifact is not signed"/>
2032920337
</artifact>
2033020338
</component>
20339+
<component group="com.github.nextcloud" name="android-library" version="d5cb052be9ebf363547f2cda87d81d238fe6bf3b">
20340+
<artifact name="android-library-d5cb052be9ebf363547f2cda87d81d238fe6bf3b.aar">
20341+
<sha256 value="0ee052ef0082aaa1ed6ed26103e083bb6cbb71f9df36d56d704a9a27f4c5b0a8" origin="Generated by Gradle" reason="Artifact is not signed"/>
20342+
</artifact>
20343+
<artifact name="android-library-d5cb052be9ebf363547f2cda87d81d238fe6bf3b.module">
20344+
<sha256 value="da9717be92162247352c5ba92a04e6dd5c86f97b8e0ab828b72814f3d2eb82d8" origin="Generated by Gradle" reason="Artifact is not signed"/>
20345+
</artifact>
20346+
</component>
2033120347
<component group="com.github.nextcloud" name="android-library" version="d5f21fa1ec5b67c564983b0c8a07bc3acd96f695">
2033220348
<artifact name="android-library-d5f21fa1ec5b67c564983b0c8a07bc3acd96f695.aar">
2033320349
<sha256 value="95c86f501a4c1a2e055ba2d1fe68f5ffeed3613492bdaf0594abbae4b21b9227" origin="Generated by Gradle" reason="Artifact is not signed"/>

0 commit comments

Comments
 (0)