459 lines
13 KiB
PHP
459 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use Carbon\Carbon;
|
|
|
|
class PengaturanAkunController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
// =====================================================
|
|
// CEK SESSION LOGIN
|
|
// =====================================================
|
|
|
|
if (!session()->has('petugas_id')) {
|
|
|
|
return redirect('/')
|
|
->with('error', 'Silakan login terlebih dahulu.');
|
|
}
|
|
|
|
// =====================================================
|
|
// AMBIL DATA PETUGAS
|
|
// =====================================================
|
|
|
|
$petugas = DB::table('petugas')
|
|
->where('id_petugas', session('petugas_id'))
|
|
->first();
|
|
|
|
// =====================================================
|
|
// JIKA DATA PETUGAS TIDAK DITEMUKAN
|
|
// =====================================================
|
|
|
|
if (!$petugas) {
|
|
|
|
session()->flush();
|
|
|
|
return redirect('/')
|
|
->with('error', 'Data akun tidak ditemukan.');
|
|
}
|
|
|
|
// =====================================================
|
|
// TAMPILKAN HALAMAN
|
|
// =====================================================
|
|
|
|
return view('pengaturan-akun', compact('petugas'));
|
|
}
|
|
|
|
public function updatePasswordLangsung(Request $request)
|
|
{
|
|
// 1. Cek Session
|
|
if (!session()->has('petugas_id')) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Sesi Anda telah berakhir, silakan login kembali.'
|
|
]);
|
|
}
|
|
|
|
// 2. Ambil Data Petugas
|
|
$petugas = DB::table('petugas')
|
|
->where('id_petugas', session('petugas_id'))
|
|
->first();
|
|
|
|
// 3. Validasi Password Saat Ini
|
|
if (!Hash::check($request->current_password, $petugas->password)) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Password saat ini yang Anda masukkan salah!'
|
|
]);
|
|
}
|
|
|
|
// 4. Validasi Password Baru (Minimal 8 Karakter)
|
|
if (strlen($request->password) < 8) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Password baru minimal harus 8 karakter.'
|
|
]);
|
|
}
|
|
|
|
// 5. Cek jika password baru sama dengan password lama
|
|
if (Hash::check($request->password, $petugas->password)) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Password baru tidak boleh sama dengan password lama.'
|
|
]);
|
|
}
|
|
|
|
// 6. Update ke Database
|
|
DB::table('petugas')
|
|
->where('id_petugas', $petugas->id_petugas)
|
|
->update([
|
|
'password' => Hash::make($request->password),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
'id_petugas' => $petugas->id_petugas,
|
|
'aktivitas' => 'Ganti Password',
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Password Anda telah berhasil diperbarui.'
|
|
]);
|
|
}
|
|
|
|
public function update(Request $request)
|
|
{
|
|
$petugas = DB::table('petugas')
|
|
->where('id_petugas', session('petugas_id'))
|
|
->first();
|
|
|
|
$request->validate([
|
|
'nama_petugas' => 'required',
|
|
'email' => 'required|email'
|
|
]);
|
|
|
|
$data = [
|
|
'nama_petugas' => $request->nama_petugas,
|
|
'email' => $request->email,
|
|
'updated_at' => now()
|
|
];
|
|
|
|
if (!empty($request->password)) {
|
|
|
|
if (Hash::check($request->password, $petugas->password)) {
|
|
|
|
return redirect('/pengaturan-akun')
|
|
->with('error', 'Password baru tidak boleh sama dengan password lama.');
|
|
}
|
|
|
|
$data['password'] = Hash::make($request->password);
|
|
}
|
|
|
|
DB::table('petugas')
|
|
->where('id_petugas', $petugas->id_petugas)
|
|
->update($data);
|
|
|
|
DB::table('log_aktivitas')->insert([
|
|
'id_petugas' => $petugas->id_petugas,
|
|
'aktivitas' => 'Ganti Password (via OTP)',
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
|
|
session([
|
|
'nama_petugas' => $request->nama_petugas
|
|
]);
|
|
|
|
return redirect('/pengaturan-akun')
|
|
->with('success', 'Pengaturan akun berhasil diperbarui');
|
|
}
|
|
|
|
public function kirimOtp(Request $request)
|
|
{
|
|
// =====================================================
|
|
// CEK LOGIN
|
|
// =====================================================
|
|
|
|
if (!session()->has('petugas_id')) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Session login tidak ditemukan.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// VALIDASI EMAIL SAJA
|
|
// =====================================================
|
|
|
|
$request->validate([
|
|
'email' => 'required|email'
|
|
]);
|
|
|
|
// =====================================================
|
|
// AMBIL AKUN YANG SEDANG LOGIN
|
|
// =====================================================
|
|
|
|
$petugas = DB::table('petugas')
|
|
->where('id_petugas', session('petugas_id'))
|
|
->first();
|
|
|
|
if (!$petugas) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Data akun tidak ditemukan.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// EMAIL HARUS SESUAI DENGAN AKUN LOGIN
|
|
// =====================================================
|
|
|
|
if (
|
|
strtolower(trim($petugas->email))
|
|
!= strtolower(trim($request->email))
|
|
) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Email tidak sesuai dengan akun login.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// GENERATE OTP
|
|
// =====================================================
|
|
|
|
$otp = rand(100000, 999999);
|
|
|
|
DB::table('petugas')
|
|
->where('id_petugas', $petugas->id_petugas)
|
|
->update([
|
|
'otp_code' => $otp,
|
|
'otp_expired_at' => Carbon::now()->addMinutes(5)
|
|
]);
|
|
|
|
try {
|
|
|
|
$html = '
|
|
|
|
<div style="font-family:Poppins,sans-serif;padding:30px;background:#f5f5f5;">
|
|
|
|
<div style="
|
|
max-width:500px;
|
|
margin:auto;
|
|
background:white;
|
|
border-radius:20px;
|
|
padding:40px;
|
|
box-shadow:0 5px 20px rgba(0,0,0,0.08);
|
|
">
|
|
|
|
<div style="text-align:center;">
|
|
|
|
<div style="
|
|
width:75px;
|
|
height:75px;
|
|
background:#fff3f3;
|
|
border-radius:50%;
|
|
margin:auto;
|
|
line-height:75px;
|
|
font-size:35px;
|
|
">
|
|
🔐
|
|
</div>
|
|
|
|
<h2 style="
|
|
color:#b30000;
|
|
margin-top:20px;
|
|
margin-bottom:10px;
|
|
">
|
|
Reset Password
|
|
</h2>
|
|
|
|
<p style="
|
|
color:#666;
|
|
font-size:14px;
|
|
line-height:1.7;
|
|
">
|
|
Gunakan kode OTP berikut untuk reset password akun Anda.
|
|
</p>
|
|
|
|
</div>
|
|
|
|
<div style="
|
|
text-align:center;
|
|
margin:35px 0;
|
|
">
|
|
|
|
<div style="
|
|
display:inline-block;
|
|
background:#fff5f5;
|
|
color:#b30000;
|
|
padding:18px 35px;
|
|
border-radius:15px;
|
|
font-size:34px;
|
|
font-weight:bold;
|
|
letter-spacing:8px;
|
|
">
|
|
'.$otp.'
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<p style="
|
|
text-align:center;
|
|
color:#666;
|
|
font-size:14px;
|
|
">
|
|
OTP berlaku selama <b>5 menit</b>.
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
';
|
|
|
|
Mail::html($html, function ($message) use ($petugas) {
|
|
|
|
$message->to(trim($petugas->email))
|
|
->subject('OTP Reset Password Sistem TB');
|
|
|
|
});
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Detail Error: ' . $e->getMessage()
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'OTP berhasil dikirim.'
|
|
]);
|
|
}
|
|
|
|
public function verifyOtp(Request $request)
|
|
{
|
|
// =====================================================
|
|
// CEK LOGIN
|
|
// =====================================================
|
|
|
|
if (!session()->has('petugas_id')) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Session login tidak ditemukan.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// VALIDASI
|
|
// =====================================================
|
|
|
|
$request->validate([
|
|
'email' => 'required|email',
|
|
'otp' => 'required'
|
|
]);
|
|
|
|
// =====================================================
|
|
// AMBIL AKUN LOGIN
|
|
// =====================================================
|
|
|
|
$petugas = DB::table('petugas')
|
|
->where('id_petugas', session('petugas_id'))
|
|
->first();
|
|
|
|
if (!$petugas) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Data akun tidak ditemukan.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// EMAIL HARUS SESUAI
|
|
// =====================================================
|
|
|
|
if (
|
|
strtolower(trim($petugas->email))
|
|
!= strtolower(trim($request->email))
|
|
) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Email tidak sesuai dengan akun login.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// CEK OTP
|
|
// =====================================================
|
|
|
|
if ($petugas->otp_code != $request->otp) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Kode OTP salah.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// OTP KADALUARSA
|
|
// =====================================================
|
|
|
|
if (
|
|
Carbon::now()->gt(
|
|
Carbon::parse($petugas->otp_expired_at)
|
|
)
|
|
) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Kode OTP sudah kadaluarsa.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// JIKA HANYA CEK OTP
|
|
// =====================================================
|
|
|
|
if ($request->has('cek_otp')) {
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'OTP valid.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// VALIDASI PASSWORD BARU
|
|
// =====================================================
|
|
|
|
$request->validate([
|
|
'password' => 'required|min:8'
|
|
]);
|
|
|
|
// PASSWORD TIDAK BOLEH SAMA
|
|
if (Hash::check($request->password, $petugas->password)) {
|
|
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Password baru tidak boleh sama dengan password lama.'
|
|
]);
|
|
}
|
|
|
|
// =====================================================
|
|
// UPDATE PASSWORD
|
|
// =====================================================
|
|
|
|
DB::table('petugas')
|
|
->where('id_petugas', $petugas->id_petugas)
|
|
->update([
|
|
|
|
'password' => bcrypt($request->password),
|
|
|
|
'otp_code' => null,
|
|
|
|
'otp_expired_at' => null
|
|
|
|
]);
|
|
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Password berhasil diperbarui.'
|
|
]);
|
|
}
|
|
} |