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(); } }