|
@@ -1,10 +1,12 @@ |
|
|
package com.wireguard.android.activity; |
|
|
package com.wireguard.android.activity; |
|
|
|
|
|
|
|
|
|
|
|
import androidx.annotation.Nullable; |
|
|
import androidx.lifecycle.Observer; |
|
|
import androidx.lifecycle.Observer; |
|
|
import androidx.lifecycle.ViewModelProvider; |
|
|
import androidx.lifecycle.ViewModelProvider; |
|
|
|
|
|
|
|
|
import android.content.Intent; |
|
|
import android.content.Intent; |
|
|
import android.os.Bundle; |
|
|
import android.os.Bundle; |
|
|
|
|
|
import android.security.KeyChain; |
|
|
import android.util.Log; |
|
|
import android.util.Log; |
|
|
import android.view.View; |
|
|
import android.view.View; |
|
|
import android.view.View.OnClickListener; |
|
|
import android.view.View.OnClickListener; |
|
@@ -18,6 +20,10 @@ import com.wireguard.android.repository.DataRepository; |
|
|
import com.wireguard.android.resource.StatusResource; |
|
|
import com.wireguard.android.resource.StatusResource; |
|
|
import com.wireguard.android.viewmodel.LoginViewModel; |
|
|
import com.wireguard.android.viewmodel.LoginViewModel; |
|
|
|
|
|
|
|
|
|
|
|
import javax.security.cert.CertificateEncodingException; |
|
|
|
|
|
import javax.security.cert.CertificateException; |
|
|
|
|
|
import javax.security.cert.X509Certificate; |
|
|
|
|
|
|
|
|
public class LoginActivity extends BaseActivityBubble { |
|
|
public class LoginActivity extends BaseActivityBubble { |
|
|
|
|
|
|
|
|
private LoginViewModel loginViewModel; |
|
|
private LoginViewModel loginViewModel; |
|
@@ -29,6 +35,8 @@ public class LoginActivity extends BaseActivityBubble { |
|
|
private static final String BASE_URL_PREFIX = "https://"; |
|
|
private static final String BASE_URL_PREFIX = "https://"; |
|
|
private static final String BASE_URL_SUFFIX = ":1443/api/"; |
|
|
private static final String BASE_URL_SUFFIX = ":1443/api/"; |
|
|
private static final String SEPARATOR = "\\."; |
|
|
private static final String SEPARATOR = "\\."; |
|
|
|
|
|
private static final int REQUEST_CODE = 1555; |
|
|
|
|
|
private static final String CERTIFICATE_NAME = "Bubble Certificate"; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
|
protected void onCreate(Bundle savedInstanceState) { |
|
@@ -47,17 +55,16 @@ public class LoginActivity extends BaseActivityBubble { |
|
|
sign.setOnClickListener(new OnClickListener() { |
|
|
sign.setOnClickListener(new OnClickListener() { |
|
|
@Override public void onClick(final View v) { |
|
|
@Override public void onClick(final View v) { |
|
|
final String url = BASE_URL_PREFIX + bubbleName.getText().toString() + BASE_URL_SUFFIX; |
|
|
final String url = BASE_URL_PREFIX + bubbleName.getText().toString() + BASE_URL_SUFFIX; |
|
|
if(url.split(SEPARATOR).length!=3){ |
|
|
|
|
|
Toast.makeText(LoginActivity.this,getResources().getText(R.string.hostname_not_valid),Toast.LENGTH_LONG).show(); |
|
|
|
|
|
|
|
|
if (url.split(SEPARATOR).length != 3) { |
|
|
|
|
|
Toast.makeText(LoginActivity.this, getResources().getText(R.string.hostname_not_valid), Toast.LENGTH_LONG).show(); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
if(DataRepository.getRepositoryInstance()==null) { |
|
|
|
|
|
|
|
|
if (DataRepository.getRepositoryInstance() == null) { |
|
|
loginViewModel.buildRepositoryInstance(LoginActivity.this, url); |
|
|
loginViewModel.buildRepositoryInstance(LoginActivity.this, url); |
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
|
|
|
} else { |
|
|
loginViewModel.buildClientService(url); |
|
|
loginViewModel.buildClientService(url); |
|
|
} |
|
|
} |
|
|
loginViewModel.setUserURL(LoginActivity.this,url); |
|
|
|
|
|
|
|
|
loginViewModel.setUserURL(LoginActivity.this, url); |
|
|
final String usernameInput = userName.getText().toString().trim(); |
|
|
final String usernameInput = userName.getText().toString().trim(); |
|
|
final String passwordInput = password.getText().toString().trim(); |
|
|
final String passwordInput = password.getText().toString().trim(); |
|
|
showLoadingDialog(); |
|
|
showLoadingDialog(); |
|
@@ -78,23 +85,50 @@ public class LoginActivity extends BaseActivityBubble { |
|
|
@Override public void onChanged(final StatusResource<User> userStatusResource) { |
|
|
@Override public void onChanged(final StatusResource<User> userStatusResource) { |
|
|
switch (userStatusResource.status) { |
|
|
switch (userStatusResource.status) { |
|
|
case SUCCESS: |
|
|
case SUCCESS: |
|
|
Toast.makeText(LoginActivity.this, "Success", Toast.LENGTH_SHORT).show(); |
|
|
|
|
|
Log.d("TAG", "Success"); |
|
|
|
|
|
closeLoadingDialog(); |
|
|
|
|
|
Intent intent = new Intent(LoginActivity.this, MainActivity.class); |
|
|
|
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); |
|
|
|
|
|
startActivity(intent); |
|
|
|
|
|
|
|
|
loginViewModel.getCertificate(LoginActivity.this).observe(LoginActivity.this, new Observer<String>() { |
|
|
|
|
|
@Override public void onChanged(final String s) { |
|
|
|
|
|
closeLoadingDialog(); |
|
|
|
|
|
final byte[] cert = s.getBytes(); |
|
|
|
|
|
final Intent intent = KeyChain.createInstallIntent(); |
|
|
|
|
|
X509Certificate x509Certificate = null; |
|
|
|
|
|
try { |
|
|
|
|
|
x509Certificate = X509Certificate.getInstance(cert); |
|
|
|
|
|
} catch (final CertificateException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
try { |
|
|
|
|
|
intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509Certificate.getEncoded()); |
|
|
|
|
|
} catch (final CertificateEncodingException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
intent.putExtra(KeyChain.EXTRA_NAME, CERTIFICATE_NAME); |
|
|
|
|
|
startActivityForResult(intent, REQUEST_CODE); |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
break; |
|
|
break; |
|
|
case LOADING: |
|
|
case LOADING: |
|
|
Log.d("TAG", "Loading"); |
|
|
Log.d("TAG", "Loading"); |
|
|
break; |
|
|
break; |
|
|
case ERROR: |
|
|
case ERROR: |
|
|
closeLoadingDialog(); |
|
|
closeLoadingDialog(); |
|
|
Toast.makeText(LoginActivity.this, "Login Failed", Toast.LENGTH_SHORT).show(); |
|
|
|
|
|
|
|
|
Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_SHORT).show(); |
|
|
Log.d("TAG", "Error"); |
|
|
Log.d("TAG", "Error"); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override protected void onActivityResult(final int requestCode, final int resultCode, @Nullable final Intent data) { |
|
|
|
|
|
super.onActivityResult(requestCode, resultCode, data); |
|
|
|
|
|
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { |
|
|
|
|
|
Toast.makeText(this, getString(R.string.success), Toast.LENGTH_SHORT).show(); |
|
|
|
|
|
Log.d("TAG", "Success"); |
|
|
|
|
|
final Intent mainActivityIntent = new Intent(this, MainActivity.class); |
|
|
|
|
|
mainActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); |
|
|
|
|
|
startActivity(mainActivityIntent); |
|
|
|
|
|
} else { |
|
|
|
|
|
Toast.makeText(this, getString(R.string.cerificate_install), Toast.LENGTH_LONG).show(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |