1
0
AES-secured-notepad/app/src/main/java/com/example/bsm_notatnik/Register.java

135 lines
4.6 KiB
Java

package com.example.bsm_notatnik;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Base64;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Register extends AppCompatActivity {
private static final String SHARED_NAME_CREDENTIALS = "Credentials";
EditText editTextEmail, editTextPassword;
Button buttonReg;
TextView loginNowTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
editTextEmail = findViewById(R.id.username);
editTextPassword = findViewById(R.id.password);
buttonReg = findViewById(R.id.btn_register);
loginNowTextView = findViewById(R.id.loginNow);
loginNowTextView.setOnClickListener(view -> {
Intent intent = new Intent(getApplicationContext(), Login.class);
startActivity(intent);
finish();
});
buttonReg.setOnClickListener(view -> {
String email, hashedEmail, password, hashedPassword;
email = String.valueOf(editTextEmail.getText());
password = String.valueOf(editTextPassword.getText());
if (TextUtils.isEmpty(email)){
Toast.makeText(Register.this, "Enter email!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(password)){
Toast.makeText(Register.this, "Enter password!", Toast.LENGTH_SHORT).show();
return;
}
hashedEmail = Utility.hashEmail(email);
if (checkIfUserExists(hashedEmail)){
editTextEmail.setText("");
editTextPassword.setText("");
Toast.makeText(Register.this, "Account with this username already exists!", Toast.LENGTH_SHORT).show();
return;
}
if (!validateEmail(email)){
editTextPassword.setText("");
Toast.makeText(Register.this, "Email format not correct!", Toast.LENGTH_SHORT).show();
return;
}
if (!Utility.validatePassword(password)){
Toast.makeText(Register.this, "Password to short! Must have at least 7 characters.", Toast.LENGTH_SHORT).show();
return;
}
byte[] salt1 = Utility.generateSalt();
saveSaltForUser(hashedEmail, salt1);
hashedPassword = Utility.hashCredential(password, salt1);
saveNewUser(hashedEmail, hashedPassword);
Toast.makeText(Register.this, "Created account with email: " + email, Toast.LENGTH_SHORT).show();
editTextEmail.setText("");
editTextPassword.setText("");
});
}
private boolean checkIfUserExists(String hashedEmail){
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_NAME_CREDENTIALS, MODE_PRIVATE);
return sharedPreferences.contains("user_" + hashedEmail);
}
private boolean validateEmail(String email){
final String EMAIL_PATTERN = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
Pattern pattern = Pattern.compile(EMAIL_PATTERN);
Matcher matcher = pattern.matcher(email);
return matcher.matches();
}
private boolean validatePassword(String password){
final String PASSWORD_PATTERN = "^(?=.*[0-9])(?=.*[A-Z])(.{8,})$";
Pattern pattern = Pattern.compile(PASSWORD_PATTERN);
Matcher matcher = pattern.matcher(password);
return matcher.matches();
}
private void saveSaltForUser(String hashedEmail, byte[] salt1){
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_NAME_CREDENTIALS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
String salt1String = Base64.getEncoder().encodeToString(salt1);
editor.putString("salt_" + hashedEmail, salt1String);
editor.apply();
}
private void saveNewUser(String hashedEmail, String password){
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_NAME_CREDENTIALS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("user_" + hashedEmail, password);
editor.apply();
}
}