172 lines
6.5 KiB
PHP
172 lines
6.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Auth;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\View\View;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class RegisterController extends Controller
|
|
{
|
|
public function showRegistrationForm(): View
|
|
{
|
|
return view('auth.register');
|
|
}
|
|
|
|
public function register(Request $request): RedirectResponse
|
|
{
|
|
// Validasi dasar terlebih dahulu
|
|
$validator = Validator::make($request->all(), [
|
|
'name' => 'required|string|min:8|max:255',
|
|
'email' => 'required|string|email|max:255|unique:users|regex:/@gmail\.com$/|regex:/^\S+$/',
|
|
'phone' => 'required|string|min:10|max:20',
|
|
'address' => 'required|string|min:20|max:500',
|
|
'password' => 'required|string|min:8|confirmed',
|
|
'agree' => 'required|accepted',
|
|
], [
|
|
'name.required' => 'Nama wajib diisi.',
|
|
'name.min' => 'Nama minimal harus 8 karakter.',
|
|
'email.required' => 'Email wajib diisi.',
|
|
'email.email' => 'Format email tidak valid.',
|
|
'email.unique' => 'Email sudah digunakan.',
|
|
'email.regex' => 'Email harus menggunakan domain @gmail.com dan tidak boleh mengandung spasi.',
|
|
'phone.required' => 'Nomor telepon wajib diisi.',
|
|
'phone.min' => 'Nomor telepon minimal 10 karakter.',
|
|
'address.required' => 'Alamat wajib diisi.',
|
|
'address.min' => 'Alamat terlalu pendek, minimal 20 karakter. Harap isi lengkap.',
|
|
'password.required' => 'Password wajib diisi.',
|
|
'password.min' => 'Password minimal harus 8 karakter.',
|
|
'password.confirmed'=> 'Konfirmasi password tidak cocok.',
|
|
'agree.required' => 'Anda harus menyetujui syarat dan ketentuan.',
|
|
'agree.accepted' => 'Anda harus menyetujui syarat dan ketentuan.',
|
|
]);
|
|
|
|
// Validasi password familiar
|
|
// Validasi password familiar & pernah dipakai user lain
|
|
// $validator->after(function ($validator) use ($request) {
|
|
// if ($request->has('password')) {
|
|
// if ($this->isCommonPassword($request->password)) {
|
|
// $validator->errors()->add('password', 'Password yang Anda gunakan terlalu umum. Silakan pilih password yang lebih unik.');
|
|
// }
|
|
|
|
// if ($this->isPasswordAlreadyUsed($request->password)) {
|
|
// $validator->errors()->add('password', 'Password ini sudah pernah digunakan oleh akun lain. Silakan gunakan password yang berbeda.');
|
|
// }
|
|
// }
|
|
|
|
// if ($request->has('phone') && $request->phone) {
|
|
// if ($this->isPhoneAlreadyUsed($request->phone)) {
|
|
// $validator->errors()->add('phone', 'Nomor telepon sudah terdaftar di sistem kami.');
|
|
// }
|
|
// }
|
|
// });
|
|
|
|
if ($validator->fails()) {
|
|
return redirect()->back()->withErrors($validator)->withInput();
|
|
}
|
|
|
|
$validated = $validator->validated();
|
|
|
|
$user = User::create([
|
|
'name' => $validated['name'],
|
|
'email' => $validated['email'],
|
|
'phone' => $validated['phone'],
|
|
'address' => $validated['address'],
|
|
'password' => Hash::make($validated['password']),
|
|
'is_admin' => false, // Pastikan user biasa bukan admin
|
|
]);
|
|
|
|
// Arahkan ke login dengan pesan sukses
|
|
return redirect()->route('login')->with('success', 'Registrasi berhasil! Silakan login dengan akun Anda.');
|
|
}
|
|
|
|
/**
|
|
* Cek apakah password termasuk password yang umum/familiar
|
|
*/
|
|
// private function isCommonPassword(string $password): bool
|
|
// {
|
|
// $commonPasswords = [
|
|
// // Password numerik umum
|
|
// '12345678', '123456789', '1234567890',
|
|
// '87654321', '11111111', '22222222', '33333333', '44444444', '55555555',
|
|
// '66666666', '77777777', '88888888', '99999999', '00000000',
|
|
|
|
// // Password alfabetik umum
|
|
// 'password', 'Password', 'PASSWORD', 'password123', 'Password123',
|
|
// 'qwerty123', 'qwertyui', 'asdfghjk', 'zxcvbnm123',
|
|
// 'abcd1234', 'admin123', 'user1234', 'welcome123',
|
|
|
|
// // Password Indonesia umum
|
|
// 'indonesia', 'Indonesia', 'garuda123', 'nusantara',
|
|
// 'jakarta123', 'bali2023', 'surabaya', 'bandung123',
|
|
// 'password1', 'rahasia123', 'bismillah',
|
|
|
|
// // Kombinasi tanggal umum
|
|
// '01011990', '01011995', '01012000', '17081945',
|
|
// '12345abc', 'abc12345', '123qwe123', 'qwe12345',
|
|
|
|
// // Pattern keyboard umum
|
|
// 'qwerty12', 'asdf1234', 'zxcv1234', '1qaz2wsx',
|
|
// '1q2w3e4r', 'qazwsxed', 'plokijuh',
|
|
|
|
// // Password dengan nama umum
|
|
// 'admin1234', 'guest1234', 'test1234', 'demo1234',
|
|
// 'sample123', 'example123', 'default123',
|
|
|
|
// // Password sosial media umum
|
|
// 'facebook', 'instagram', 'whatsapp', 'twitter123',
|
|
// 'gmail123', 'yahoo123', 'google123',
|
|
|
|
// // Password gaming umum
|
|
// 'minecraft', 'roblox123', 'fortnite', 'pubg1234',
|
|
// 'mobilelegend', 'freefire', 'valorant',
|
|
|
|
// // Password device umum
|
|
// 'android123', 'iphone123', 'samsung123', 'nokia1234',
|
|
|
|
// // Tahun umum
|
|
// '20232023', '20242024', '19901990', '20002000',
|
|
// ];
|
|
|
|
// return in_array(strtolower($password), array_map('strtolower', $commonPasswords));
|
|
// }
|
|
|
|
/**
|
|
* Cek apakah password sudah pernah dipakai oleh user lain di database
|
|
*/
|
|
// private function isPasswordAlreadyUsed(string $password): bool
|
|
// {
|
|
// $users = User::whereNotNull('password')->get(['password']);
|
|
|
|
// foreach ($users as $user) {
|
|
// if (Hash::check($password, $user->password)) {
|
|
// return true;
|
|
// }
|
|
// }
|
|
|
|
// return false;
|
|
}
|
|
|
|
/**
|
|
* Cek nomor telepon sudah terdaftar dalam berbagai format
|
|
*/
|
|
// private function isPhoneAlreadyUsed(string $phone): bool
|
|
// {
|
|
// $digitsOnly = preg_replace('/\D/', '', $phone);
|
|
|
|
// $formats = [
|
|
// $phone, // +6281234567890
|
|
// $digitsOnly, // 6281234567890
|
|
// '+' . $digitsOnly, // +6281234567890
|
|
// '0' . substr($digitsOnly, 2), // 081234567890
|
|
// ];
|
|
|
|
// return User::whereIn('phone', $formats)->exists();
|
|
// }
|
|
|