Skip to content
This repository was archived by the owner on Jul 25, 2024. It is now read-only.

Commit 16740c6

Browse files
committed
Save realmName, serverUrl in asynLogin
1 parent 2b776a4 commit 16740c6

File tree

5 files changed

+96
-16
lines changed

5 files changed

+96
-16
lines changed

app/src/main/java/com/zulip/android/activities/DevAuthActivity.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ protected void onCreate(Bundle savedInstanceState) {
3030
super.onCreate(savedInstanceState);
3131
setContentView(R.layout.activity_dev_auth);
3232
String json = getIntent().getStringExtra(AsyncDevGetEmails.EMAIL_JSON);
33+
final String realmName = getIntent().getStringExtra(AsyncDevGetEmails.REALM_NAME_JSON);
34+
final String serverURL = getIntent().getStringExtra(AsyncDevGetEmails.SERVER_URL_JSON);
35+
final boolean startedFromAddRealm = getIntent().getBooleanExtra(AsyncDevGetEmails.ADD_REALM_BOOLEAN_JSON, false);
3336
recyclerView = (RecyclerView) findViewById(R.id.devAuthRecyclerView);
3437
List<String> emails = new ArrayList<>();
3538
int directAdminSize = 1;
@@ -55,7 +58,7 @@ protected void onCreate(Bundle savedInstanceState) {
5558
authEmailAdapter.setOnItemClickListener(new AuthClickListener() {
5659
@Override
5760
public void onItemClick(String email) {
58-
AsyncLogin asyncLogin = new AsyncLogin(DevAuthActivity.this, email, null, true);
61+
AsyncLogin asyncLogin = new AsyncLogin(DevAuthActivity.this, email, null, realmName, startedFromAddRealm, serverURL, true);
5962
asyncLogin.execute();
6063
connectionProgressDialog.show();
6164
}

app/src/main/java/com/zulip/android/activities/LoginActivity.java

Lines changed: 64 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.support.v4.app.FragmentActivity;
99
import android.support.v7.app.AppCompatActivity;
1010
import android.support.v7.widget.Toolbar;
11+
import android.text.TextUtils;
1112
import android.util.Log;
1213
import android.util.Patterns;
1314
import android.view.View;
@@ -33,6 +34,8 @@
3334
import org.json.JSONException;
3435
import org.json.JSONObject;
3536

37+
import java.net.URI;
38+
import java.net.URISyntaxException;
3639
import java.util.List;
3740

3841
public class LoginActivity extends AppCompatActivity implements View.OnClickListener,
@@ -41,13 +44,15 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList
4144
private static final int REQUEST_CODE_RESOLVE_ERR = 9000;
4245
private static final int REQUEST_CODE_SIGN_IN = 9001;
4346

47+
private boolean startedFromAddRealm = false;
4448
private ProgressDialog connectionProgressDialog;
4549
private GoogleApiClient mGoogleApiClient;
4650
private EditText mServerEditText;
4751
private EditText mUserName;
4852
private EditText mPassword;
4953
private EditText serverIn;
5054
private EditText realmNameET;
55+
String serverURL;
5156

5257
private View mGoogleSignInButton;
5358
@Override
@@ -165,6 +170,43 @@ protected void onStop() {
165170
super.onStop();
166171
}
167172

173+
private String getServerURL() {
174+
if (ZulipApp.get().serverStringSet.contains(realmNameET.getText().toString())) {
175+
Toast.makeText(LoginActivity.this, R.string.realm_exists, Toast.LENGTH_SHORT).show();
176+
return null;
177+
}
178+
179+
String serverURL = mServerEditText.getText().toString();
180+
int errorMessage = R.string.invalid_server_domain;
181+
182+
if (serverURL.isEmpty()) {
183+
serverIn.setError(getString(errorMessage));
184+
return "";
185+
}
186+
187+
// add http if scheme is not included
188+
if (!serverURL.contains("://")) {
189+
serverURL = "http://" + serverURL;
190+
}
191+
192+
Uri serverUri = Uri.parse(serverURL);
193+
if (serverUri.isRelative()) {
194+
serverUri = serverUri.buildUpon().scheme("http").build();
195+
}
196+
197+
// if does not begin with "api.zulip.com" and if the path is empty, use "/api" as first segment in the path
198+
List<String> paths = serverUri.getPathSegments();
199+
if (!serverUri.getHost().startsWith("api.") && paths.isEmpty()) {
200+
serverUri = serverUri.buildUpon().appendEncodedPath("api/").build();
201+
}
202+
serverIn.setText(serverUri.toString());
203+
mServerEditText.setText(serverUri.toString());
204+
mServerEditText.setEnabled(false);
205+
((ZulipApp) getApplication()).setServerURL(serverUri.toString());
206+
Toast.makeText(this, getString(R.string.logging_into_server, serverUri.toString()), Toast.LENGTH_SHORT).show();
207+
return serverUri.toString();
208+
}
209+
168210
private boolean checkForError() {
169211
String serverURL = serverIn.getText().toString();
170212
int errorMessage = R.string.invalid_server_domain;
@@ -208,7 +250,7 @@ private void handleSignInResult(GoogleSignInResult result) {
208250
return;
209251
}
210252

211-
final AsyncLogin loginTask = new AsyncLogin(LoginActivity.this, "google-oauth2-token", account.getIdToken(), false);
253+
final AsyncLogin loginTask = new AsyncLogin(LoginActivity.this, "google-oauth2-token", account.getIdToken(), getRealmName(), startedFromAddRealm, serverURL, false);
212254
loginTask.setCallback(new AsyncTaskCompleteListener() {
213255
@Override
214256
public void onTaskComplete(String result, JSONObject object) {
@@ -236,6 +278,20 @@ public void onTaskFailure(String result) {
236278
}
237279
}
238280

281+
private String getRealmName() {
282+
if (TextUtils.isEmpty(realmNameET.getText())) {
283+
String server = ZulipApp.get().getServerURI();
284+
URI uri = null;
285+
try {
286+
uri = new URI(server);
287+
} catch (URISyntaxException e) {
288+
return server;
289+
}
290+
return uri.getHost();
291+
}
292+
return realmNameET.getText().toString();
293+
}
294+
239295
protected void openLegal() {
240296
Intent i = new Intent(this, LegalActivity.class);
241297
startActivityForResult(i, 0);
@@ -305,14 +361,15 @@ public void onClick(View v) {
305361
setupGoogleSignIn();
306362
break;
307363
case R.id.zulip_login:
308-
if (!isInputValid()) {
309-
return;
310-
}
311-
Toast.makeText(this, getString(R.string.logging_into_server, ZulipApp.get().getServerURI()), Toast.LENGTH_SHORT).show();
364+
if (!isInputValid()) return;
365+
serverURL = getServerURL();
366+
if (serverURL == null) return;
312367
connectionProgressDialog.show();
313368

314369
AsyncLogin alog = new AsyncLogin(LoginActivity.this,
315-
mUserName.getText().toString(), mPassword.getText().toString(), false);
370+
mUserName.getText().toString(), mPassword.getText().toString(),
371+
getRealmName(), startedFromAddRealm, serverURL, false);
372+
316373
// Remove the CPD when done
317374
alog.setCallback(new AsyncTaskCompleteListener() {
318375
@Override
@@ -334,7 +391,7 @@ public void onTaskFailure(String result) {
334391
case R.id.local_server_button:
335392
if (!isInputValidForDevAuth()) return;
336393
connectionProgressDialog.show();
337-
AsyncDevGetEmails asyncDevGetEmails = new AsyncDevGetEmails(LoginActivity.this);
394+
AsyncDevGetEmails asyncDevGetEmails = new AsyncDevGetEmails(LoginActivity.this, getServerURL(), getRealmName(), startedFromAddRealm);
338395
asyncDevGetEmails.setCallback(new AsyncTaskCompleteListener() {
339396
@Override
340397
public void onTaskComplete(String result, JSONObject jsonObject) {

app/src/main/java/com/zulip/android/networking/AsyncDevGetEmails.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,21 @@
1515

1616
public class AsyncDevGetEmails extends ZulipAsyncPushTask {
1717
private static final String DISABLED = "dev_disabled";
18+
public static final String SERVER_URL_JSON = "server_url";
19+
public static final String REALM_NAME_JSON = "realm_json";
20+
public static final String ADD_REALM_BOOLEAN_JSON = "add_realm_bool_json";
1821
Context context;
1922
public final static String EMAIL_JSON = "emails_json";
23+
private String serverURL;
24+
private String realmName;
25+
private boolean startedFromAddRealm;
2026

21-
public AsyncDevGetEmails(LoginActivity loginActivity) {
27+
public AsyncDevGetEmails(LoginActivity loginActivity, String serverURL, String realmName, boolean startedFromAddRealm) {
2228
super((ZulipApp) loginActivity.getApplication());
2329
context = loginActivity;
30+
this.serverURL = serverURL;
31+
this.realmName = realmName;
32+
this.startedFromAddRealm = startedFromAddRealm;
2433
}
2534

2635
public final void execute() {
@@ -34,6 +43,9 @@ protected void onPostExecute(String result) {
3443
if (obj.getString("result").equals("success")) {
3544
Intent intent = new Intent(context, DevAuthActivity.class);
3645
intent.putExtra(EMAIL_JSON, result);
46+
intent.putExtra(REALM_NAME_JSON, realmName);
47+
intent.putExtra(SERVER_URL_JSON, serverURL);
48+
intent.putExtra(ADD_REALM_BOOLEAN_JSON, startedFromAddRealm);
3749
context.startActivity(intent);
3850
}
3951
} catch (JSONException e) {

app/src/main/java/com/zulip/android/networking/AsyncLogin.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,19 @@ public class AsyncLogin extends ZulipAsyncPushTask {
1818

1919
Activity activity;
2020
boolean devServer = true; //If this is a DevAuthBackend server!
21-
private LoginActivity context;
21+
private Activity context;
2222
private boolean userDefinitelyInvalid = false;
23+
boolean startedFromAddRealm = false;
24+
private String realmName;
25+
private String username;
26+
private String serverURL;
2327

24-
public AsyncLogin(Activity activity, String username, String password, boolean devServer) {
25-
super(ZulipApp.get());
26-
this.activity = activity;
27-
if (username.contains("@")) {
28+
public AsyncLogin(Activity loginActivity, String username, String password, String realmName, boolean startedFromAddRealm, String serverURL, boolean devServer) {
29+
super((ZulipApp) loginActivity.getApplication());
30+
this.startedFromAddRealm = startedFromAddRealm;
31+
context = loginActivity;
32+
this.username = username;
33+
if (username.contains("@") && !startedFromAddRealm) {
2834
// @-less usernames are used as indicating special cases, for
2935
// example in OAuth2 authentication
3036
this.app.setEmail(username);
@@ -34,6 +40,9 @@ public AsyncLogin(Activity activity, String username, String password, boolean d
3440
this.setProperty("password", password);
3541
this.devServer = false;
3642
}
43+
this.setProperty("password", password);
44+
this.realmName = realmName;
45+
this.serverURL = serverURL;
3746
}
3847

3948
public final void execute() {

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@
8080
<string name="please_wait">Please wait</string>
8181
<string name="realm_add">Add Realm</string>
8282
<string name="realm_name">Name of a realm (Optional)</string>
83-
84-
83+
<string name="realm_exists">Realm Name already exists, please change.</string>
8584

8685
</resources>

0 commit comments

Comments
 (0)