135 lines
4.6 KiB
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();
|
|
}
|
|
} |