aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/de
diff options
context:
space:
mode:
authorChristian Schneppe <christian.schneppe@pix-art.de>2020-01-24 19:28:14 +0100
committerChristian Schneppe <christian.schneppe@pix-art.de>2020-01-24 19:28:14 +0100
commit504e4f21a270e21fe3ae4e479998c24bf182626a (patch)
treed81e5eb513fad448379ad5ff3ea54c0f179e72da /src/main/java/de
parent99e21438c0ad268c08f09656ebc3d271c4e4031a (diff)
make registration uris work with fixed usernames
Diffstat (limited to '')
-rw-r--r--src/main/java/de/pixart/messenger/entities/Account.java2
-rw-r--r--src/main/java/de/pixart/messenger/ui/EditAccountActivity.java14
-rw-r--r--src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java59
-rw-r--r--src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java12
-rw-r--r--src/main/java/de/pixart/messenger/utils/SignupUtils.java14
5 files changed, 70 insertions, 31 deletions
diff --git a/src/main/java/de/pixart/messenger/entities/Account.java b/src/main/java/de/pixart/messenger/entities/Account.java
index edd0fdc8c..c270f5b43 100644
--- a/src/main/java/de/pixart/messenger/entities/Account.java
+++ b/src/main/java/de/pixart/messenger/entities/Account.java
@@ -66,6 +66,8 @@ public class Account extends AbstractEntity implements AvatarService.Avatarable
public static final int OPTION_REQUIRES_ACCESS_MODE_CHANGE = 5;
public static final int OPTION_LOGGED_IN_SUCCESSFULLY = 6;
public static final int OPTION_HTTP_UPLOAD_AVAILABLE = 7;
+ public static final int OPTION_UNVERIFIED = 8;
+ public static final int OPTION_FIXED_USERNAME = 9;
private static final String KEY_PGP_SIGNATURE = "pgp_signature";
private static final String KEY_PGP_ID = "pgp_id";
public final HashSet<Pair<String, String>> inProgressDiscoFetches = new HashSet<>();
diff --git a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
index b54959316..d0f5f8542 100644
--- a/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/EditAccountActivity.java
@@ -356,13 +356,21 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
final Jid jid = mAccount == null ? null : mAccount.getJid();
if (SignupUtils.isSupportTokenRegistry() && jid != null && magicCreate && !jid.getDomain().equals(Config.MAGIC_CREATE_DOMAIN)) {
- final Intent intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), mAccount.getKey(Account.PRE_AUTH_REGISTRATION_TOKEN));
+ final Jid preset;
+ if (mAccount.isOptionSet(Account.OPTION_FIXED_USERNAME)) {
+ preset = jid.asBareJid();
+ } else {
+ preset = Jid.ofDomain(jid.getDomain());
+ }
+ final Intent intent = SignupUtils.getTokenRegistrationIntent(this, preset, mAccount.getKey(Account.PRE_AUTH_REGISTRATION_TOKEN));
+ StartConversationActivity.addInviteUri(intent, getIntent());
startActivity(intent);
return;
}
if (xmppConnectionService.getAccounts().size() == 0 && Config.MAGIC_CREATE_DOMAIN != null) {
- Intent intent = SignupUtils.getSignUpIntent(this);
+ Intent intent = SignupUtils.getSignUpIntent(this, mForceRegister != null && mForceRegister);
+ StartConversationActivity.addInviteUri(intent, getIntent());
startActivity(intent);
overridePendingTransition(R.animator.fade_in, R.animator.fade_out);
}
@@ -1155,7 +1163,7 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
}
- final boolean editable = !mAccount.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY) && QuickConversationsService.isConversations();
+ final boolean editable = !mAccount.isOptionSet(Account.OPTION_LOGGED_IN_SUCCESSFULLY) && !mAccount.isOptionSet(Account.OPTION_FIXED_USERNAME) && QuickConversationsService.isConversations();
this.binding.accountJid.setEnabled(editable);
this.binding.accountJid.setFocusable(editable);
this.binding.accountJid.setFocusableInTouchMode(editable);
diff --git a/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java b/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java
index af7b965af..f3f294828 100644
--- a/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/MagicCreateActivity.java
@@ -31,9 +31,11 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad
private boolean useOwnProvider = false;
public static final String EXTRA_DOMAIN = "domain";
public static final String EXTRA_PRE_AUTH = "pre_auth";
+ public static final String EXTRA_USERNAME = "username";
private ActivityMagicCreateBinding binding;
private String domain;
+ private String username;
private String preAuth;
@Override
@@ -60,6 +62,7 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad
final Intent data = getIntent();
this.domain = data == null ? null : data.getStringExtra(EXTRA_DOMAIN);
this.preAuth = data == null ? null : data.getStringExtra(EXTRA_PRE_AUTH);
+ this.username = data == null ? null : data.getStringExtra(EXTRA_USERNAME);
if (getResources().getBoolean(R.bool.portrait_only)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@@ -76,20 +79,37 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
setSupportActionBar((Toolbar) this.binding.toolbar);
configureActionBar(getSupportActionBar(), this.domain == null);
- if (domain != null) {
+ if (username != null && domain != null) {
+ binding.title.setText(R.string.your_server_invitation);
+ binding.instructions.setText(getString(R.string.magic_create_text_fixed, domain));
+ binding.username.setEnabled(false);
+ binding.username.setText(this.username);
+ updateFullJidInformation(this.username);
+ } else if (domain != null) {
binding.instructions.setText(getString(R.string.magic_create_text_on_x, domain));
}
binding.createAccount.setOnClickListener(v -> {
try {
final String username = binding.username.getText().toString();
- if (domain == null && !useOwnProvider) {
- domain = Config.MAGIC_CREATE_DOMAIN;
- }
- if (useOwnProvider) {
- domain = "your-domain.com";
+ final boolean fixedUsername;
+ final Jid jid;
+ if (this.domain != null && this.username != null) {
+ fixedUsername = true;
+ jid = Jid.ofLocalAndDomain(this.username, this.domain);
+ } else if (this.domain != null) {
+ fixedUsername = false;
+ jid = Jid.ofLocalAndDomain(username, this.domain);
+ } else {
+ fixedUsername = false;
+ if (domain == null && !useOwnProvider) {
+ domain = Config.MAGIC_CREATE_DOMAIN;
+ }
+ if (useOwnProvider) {
+ domain = "your-domain.com";
+ }
+ jid = Jid.ofLocalAndDomain(username, domain);
}
- Jid jid = Jid.of(username.toLowerCase(), domain, null);
- if (!jid.getEscapedLocal().equals(jid.getLocal()) || username.length() < 3) {
+ if (!jid.getEscapedLocal().equals(jid.getLocal()) || (this.username == null && username.length() < 3)) {
binding.username.setError(getString(R.string.invalid_username));
binding.username.requestFocus();
} else {
@@ -101,6 +121,7 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad
account.setOption(Account.OPTION_REGISTER, true);
account.setOption(Account.OPTION_DISABLED, true);
account.setOption(Account.OPTION_MAGIC_CREATE, true);
+ account.setOption(Account.OPTION_FIXED_USERNAME, fixedUsername);
if (this.preAuth != null) {
account.setKey(Account.PRE_AUTH_REGISTRATION_TOKEN, this.preAuth);
}
@@ -134,8 +155,6 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad
}
});
builder.create().show();
- StartConversationActivity.addInviteUri(intent, getIntent());
- startActivity(intent);
}
} catch (IllegalArgumentException e) {
binding.username.setError(getString(R.string.invalid_username));
@@ -157,37 +176,37 @@ public class MagicCreateActivity extends XmppActivity implements TextWatcher, Ad
@Override
public void afterTextChanged(Editable s) {
- generateJID(s.toString());
+ updateFullJidInformation(s.toString());
}
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
- generateJID(binding.username.getText().toString());
+ updateFullJidInformation(binding.username.getText().toString());
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
- generateJID(binding.username.getText().toString());
+ updateFullJidInformation(binding.username.getText().toString());
}
- private void generateJID(String s) {
- domain = binding.server.getSelectedItem().toString();
- if (s.trim().length() > 0) {
+ private void updateFullJidInformation(String username) {
+ this.domain = binding.server.getSelectedItem().toString();
+ if (username.trim().isEmpty()) {
+ binding.fullJid.setVisibility(View.INVISIBLE);
+ } else {
try {
binding.fullJid.setVisibility(View.VISIBLE);
final Jid jid;
if (this.domain == null) {
- jid = Jid.ofLocalAndDomain(s, Config.MAGIC_CREATE_DOMAIN);
+ jid = Jid.ofLocalAndDomain(username, Config.MAGIC_CREATE_DOMAIN);
} else {
- jid = Jid.ofLocalAndDomain(s, this.domain);
+ jid = Jid.ofLocalAndDomain(username, this.domain);
}
binding.fullJid.setText(getString(R.string.your_full_jid_will_be, jid.toEscapedString()));
} catch (IllegalArgumentException e) {
binding.fullJid.setVisibility(View.INVISIBLE);
}
- } else {
- binding.fullJid.setVisibility(View.INVISIBLE);
}
}
diff --git a/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java b/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java
index 9d30cdeb6..59a5665f1 100644
--- a/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java
+++ b/src/main/java/de/pixart/messenger/ui/UriHandlerActivity.java
@@ -27,6 +27,7 @@ public class UriHandlerActivity extends AppCompatActivity {
public static final String ACTION_SCAN_QR_CODE = "scan_qr_code";
private static final int REQUEST_SCAN_QR_CODE = 0x1234;
private static final int REQUEST_CAMERA_PERMISSIONS_TO_SCAN = 0x6789;
+ private static final Pattern VCARD_XMPP_PATTERN = Pattern.compile("\nIMPP([^:]*):(xmpp:.+)\n");
private boolean handled = false;
public static void scan(Activity activity) {
@@ -90,15 +91,16 @@ public class UriHandlerActivity extends AppCompatActivity {
final String preauth = xmppUri.getParamater("preauth");
final Jid jid = xmppUri.getJid();
if (xmppUri.isAction(XmppUri.ACTION_REGISTER)) {
- if (jid.isDomainJid()) {
- intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), preauth);
- startActivity(intent);
+ if (jid.getEscapedLocal() != null && accounts.contains(jid.asBareJid())) {
+ Toast.makeText(this, R.string.account_already_exists, Toast.LENGTH_LONG).show();
return;
}
+ intent = SignupUtils.getTokenRegistrationIntent(this, jid, preauth);
+ startActivity(intent);
return;
}
if (xmppUri.isAction(XmppUri.ACTION_ROSTER) && "y".equals(xmppUri.getParamater("ibr"))) {
- intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), preauth);
+ intent = SignupUtils.getTokenRegistrationIntent(this, Jid.ofDomain(jid.getDomain()), preauth);
intent.putExtra(StartConversationActivity.EXTRA_INVITE_URI, xmppUri.toString());
startActivity(intent);
return;
@@ -181,8 +183,6 @@ public class UriHandlerActivity extends AppCompatActivity {
finish();
}
- private static final Pattern VCARD_XMPP_PATTERN = Pattern.compile("\nIMPP([^:]*):(xmpp:.+)\n");
-
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, requestCode, intent);
diff --git a/src/main/java/de/pixart/messenger/utils/SignupUtils.java b/src/main/java/de/pixart/messenger/utils/SignupUtils.java
index 2c0418a19..52534b89d 100644
--- a/src/main/java/de/pixart/messenger/utils/SignupUtils.java
+++ b/src/main/java/de/pixart/messenger/utils/SignupUtils.java
@@ -12,6 +12,7 @@ import de.pixart.messenger.ui.MagicCreateActivity;
import de.pixart.messenger.ui.ManageAccountActivity;
import de.pixart.messenger.ui.StartConversationActivity;
import de.pixart.messenger.ui.WelcomeActivity;
+import rocks.xmpp.addr.Jid;
public class SignupUtils {
@@ -19,13 +20,22 @@ public class SignupUtils {
return true;
}
- public static Intent getTokenRegistrationIntent(final Activity activity, String domain, String preAuth) {
+ public static Intent getTokenRegistrationIntent(final Activity activity, Jid jid, String preAuth) {
final Intent intent = new Intent(activity, MagicCreateActivity.class);
- intent.putExtra(MagicCreateActivity.EXTRA_DOMAIN, domain);
+ if (jid.isDomainJid()) {
+ intent.putExtra(MagicCreateActivity.EXTRA_DOMAIN, jid.getDomain());
+ } else {
+ intent.putExtra(MagicCreateActivity.EXTRA_DOMAIN, jid.getDomain());
+ intent.putExtra(MagicCreateActivity.EXTRA_USERNAME, jid.getEscapedLocal());
+ }
intent.putExtra(MagicCreateActivity.EXTRA_PRE_AUTH, preAuth);
return intent;
}
+ public static Intent getSignUpIntent(Activity activity, boolean ignored) {
+ return getSignUpIntent(activity);
+ }
+
public static Intent getSignUpIntent(final Activity activity) {
final Intent intent = new Intent(activity, WelcomeActivity.class);
return intent;