Deploy Laravel rebuild via Coolify

Point Docker and Coolify compose to the Laravel rebuild app so mahasiswa, dosen, and admin flows are served from the new Laravel public entrypoint.
This commit is contained in:
Power BI Dev
2026-05-03 18:50:29 +07:00
parent 89ce9d30a7
commit dab8ea396b
107 changed files with 17544 additions and 20 deletions

View File

@@ -0,0 +1,272 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class LegacyAuthController extends Controller
{
public function showRoleLogin(): View
{
return view('auth.role-login', [
'title' => 'Masuk ke SPOTA Rebuild',
'intro' => [
'eyebrow' => 'Portal Masuk SPOTA',
'heading' => 'Satu halaman masuk untuk memahami SPOTA sebelum memilih akun.',
'description' => 'SPOTA adalah Sistem Pendukung Outline Tugas Akhir yang dipakai di Informatika UNTAN untuk mengelola alur usulan judul, review dosen, penawaran judul, bimbingan, pengumuman, dan monitoring progres mahasiswa.',
'details' => [
'Mahasiswa menggunakan SPOTA untuk mengusulkan judul, melihat tanggapan dosen, memantau status, dan mengikuti jadwal akademik terkait tugas akhir.',
'Dosen menggunakan SPOTA untuk meninjau usulan, memantau mahasiswa bimbingan, mengelola penawaran judul, dan melihat peringatan progres studi.',
'Admin menggunakan SPOTA untuk mengelola data dasar, praoutline, pengumuman, jadwal seminar/sidang, dan pengaturan program studi.',
'Halaman masuk rebuild ini tetap terhubung ke data aktif sistem lama agar transisi ke tampilan baru tidak memutus alur kerja yang sudah berjalan.',
],
],
'roles' => [
['slug' => 'mahasiswa', 'name' => 'Masuk sebagai Mahasiswa', 'summary' => 'Untuk akses usulan judul, status review, dan jadwal terkait tugas akhir.'],
['slug' => 'dosen', 'name' => 'Masuk sebagai Dosen', 'summary' => 'Untuk akses review usulan, penawaran judul, bimbingan, dan early warning.'],
['slug' => 'admin', 'name' => 'Masuk sebagai Admin', 'summary' => 'Untuk akses manajemen data, praoutline, pengumuman, jadwal, dan pengaturan prodi.'],
],
]);
}
public function showLegacyLogin(string $role): View
{
abort_unless(in_array($role, ['mahasiswa', 'dosen', 'admin'], true), 404);
$roleMeta = [
'mahasiswa' => [
'title' => 'Login Mahasiswa | SPOTA Rebuild',
'heading' => 'Masuk sebagai Mahasiswa',
'eyebrow' => 'Akses Mahasiswa',
'description' => 'Gunakan akun SPOTA mahasiswa yang sudah ada. Dashboard setelah login akan memakai data real dari basis data legacy.',
'input' => 'NIM',
'placeholder' => 'Masukkan NIM',
'status' => 'Login aktif',
'status_note' => 'Autentikasi mahasiswa sudah terhubung ke data SPOTA lama.',
'summary_title' => 'SPOTA untuk Mahasiswa',
'summary_points' => [
'Mengelola usulan judul tugas akhir dan membaca tanggapan dosen pembimbing atau reviewer.',
'Memantau status proses outline, hasil review, dan informasi penting yang berhubungan dengan tugas akhir.',
'Menggunakan akun mahasiswa yang sama dengan sistem SPOTA sebelumnya agar tidak perlu registrasi ulang.',
],
'help_note' => 'Masukkan NIM dan password akun SPOTA mahasiswa yang sudah aktif.',
],
'dosen' => [
'title' => 'Login Dosen | SPOTA Rebuild',
'heading' => 'Masuk sebagai Dosen',
'eyebrow' => 'Akses Dosen',
'description' => 'Gunakan akun SPOTA dosen yang sudah aktif. Dashboard setelah login akan menampilkan ringkasan review, mahasiswa binaan, dan jadwal terdekat.',
'input' => 'NIP',
'placeholder' => 'Masukkan NIP',
'status' => 'Login aktif',
'status_note' => 'Autentikasi dosen sudah terhubung ke data SPOTA lama.',
'summary_title' => 'SPOTA untuk Dosen',
'summary_points' => [
'Meninjau usulan judul, membaca diskusi review, dan memantau antrean bimbingan mahasiswa.',
'Mengelola penawaran judul, melihat pengumuman, dan memantau early warning progres studi.',
'Tetap memakai akun dosen pada sistem SPOTA yang sudah aktif sebelumnya.',
],
'help_note' => 'Masukkan NIP dan password akun dosen yang aktif pada SPOTA.',
],
'admin' => [
'title' => 'Login Admin | SPOTA Rebuild',
'heading' => 'Masuk sebagai Admin',
'eyebrow' => 'Akses Admin',
'description' => 'Gunakan akun admin SPOTA aktif. Dashboard admin rebuild menjaga link dan fungsi tetap mengikuti halaman administrator lama.',
'input' => 'Username',
'placeholder' => 'Masukkan username',
'status' => 'Login aktif',
'status_note' => 'Autentikasi admin sudah terhubung ke tabel tbadmin legacy.',
'summary_title' => 'SPOTA untuk Admin',
'summary_points' => [
'Mengelola data mahasiswa, dosen, kelompok keahlian, dan data akademik sesuai hak akses admin.',
'Mengelola praoutline, pengumuman, jadwal seminar/sidang, pengguna admin, dan pengaturan prodi.',
'Fungsi detail tetap diarahkan ke modul legacy agar tidak memutus proses yang sudah berjalan.',
],
'help_note' => 'Masukkan username dan password admin SPOTA yang aktif.',
],
];
return view('auth.legacy-login', [
'role' => $role,
'meta' => $roleMeta[$role],
]);
}
public function authenticate(Request $request, string $role): RedirectResponse
{
abort_unless(in_array($role, ['mahasiswa', 'dosen', 'admin'], true), 404);
$credentials = $request->validate([
'identifier' => ['required', 'string'],
'password' => ['required', 'string'],
]);
if ($role === 'mahasiswa') {
$mahasiswa = DB::table('tbmhs as tm')
->leftJoin('tbprodi as tp', 'tm.idProdi', '=', 'tp.idProdi')
->select([
'tm.nim',
'tm.idmhs',
'tm.password',
'tm.nmLengkap',
'tm.idProdi',
'tp.nmProdi',
'tm.status',
])
->where('tm.nim', $credentials['identifier'])
->whereIn('tm.status', ['A', 'P'])
->first();
if (! $mahasiswa) {
return back()->withInput()->withErrors([
'identifier' => 'Username Anda tidak terdaftar.',
]);
}
if ($mahasiswa->password !== md5($credentials['password'])) {
return back()->withInput()->withErrors([
'password' => 'Password anda tidak sesuai atau salah.',
]);
}
$request->session()->regenerate();
$request->session()->put('legacy_auth', [
'role' => 'mahasiswa',
'user' => [
'nim' => $mahasiswa->nim,
'prodi' => (string) $mahasiswa->idProdi,
'nmprodi' => $mahasiswa->nmProdi,
'nama_lengkap' => $mahasiswa->nmLengkap,
'id' => (string) $mahasiswa->idmhs,
'status' => $mahasiswa->status,
],
]);
return redirect()->route('dashboard.mahasiswa');
}
if ($role === 'dosen') {
$dosen = DB::table('tbdosen as td')
->leftJoin('tbprodi as tp', 'td.idProdi', '=', 'tp.idProdi')
->select([
'td.iddosen',
'td.nip',
'td.password',
'td.nmLengkap',
'td.email',
'td.idProdi',
'td.kelompokKeahlian',
'td.jenis',
'td.status',
'tp.nmProdi',
])
->where('td.nip', $credentials['identifier'])
->where('td.status', 'A')
->first();
if (! $dosen) {
return back()->withInput()->withErrors([
'identifier' => 'Username Anda tidak terdaftar.',
]);
}
if ($credentials['identifier'] === '0000' || $credentials['identifier'] === '123456') {
return back()->withInput()->withErrors([
'identifier' => 'Akun dummy tidak dapat digunakan untuk login.',
]);
}
if ($dosen->password !== md5($credentials['password'])) {
return back()->withInput()->withErrors([
'password' => 'Password anda tidak sesuai atau salah.',
]);
}
$request->session()->regenerate();
$request->session()->put('legacy_auth', [
'role' => 'dosen',
'user' => [
'nip' => $dosen->nip,
'prodi' => (string) $dosen->idProdi,
'nmprodi' => $dosen->nmProdi,
'nama_lengkap' => $dosen->nmLengkap,
'id' => (string) $dosen->iddosen,
'jenisdosen' => $dosen->jenis,
'kelompokKeahlian' => $dosen->kelompokKeahlian,
'email' => $dosen->email,
'status' => $dosen->status,
],
]);
return redirect()->route('dashboard.dosen');
}
$admin = DB::table('tbadmin as ta')
->leftJoin('tbprodi as tp', 'ta.idProdi', '=', 'tp.idProdi')
->select([
'ta.idAdmin',
'ta.username',
'ta.password',
'ta.nmLengkap',
'ta.jabatan',
'ta.email',
'ta.idProdi',
'ta.jenisAdmin',
'ta.aktif',
'tp.nmProdi',
])
->where('ta.username', $credentials['identifier'])
->where('ta.aktif', 'Y')
->first();
if (! $admin) {
return back()->withInput()->withErrors([
'identifier' => 'Username Anda tidak terdaftar.',
]);
}
if (strtolower($credentials['identifier']) === 'dummyadmin') {
return back()->withInput()->withErrors([
'identifier' => 'Akun dummy tidak dapat digunakan untuk login.',
]);
}
if ($admin->password !== md5($credentials['password'])) {
return back()->withInput()->withErrors([
'password' => 'Password anda tidak sesuai atau salah.',
]);
}
$request->session()->regenerate();
$request->session()->put('legacy_auth', [
'role' => 'admin',
'user' => [
'username' => $admin->username,
'prodi' => (string) $admin->idProdi,
'nmprodi' => $admin->nmProdi ?: 'Semua Program Studi',
'lvl' => $admin->jenisAdmin,
'nama_lengkap' => $admin->nmLengkap,
'id' => (string) $admin->idAdmin,
'jabatan' => $admin->jabatan,
'email' => $admin->email,
'status' => $admin->aktif,
],
]);
return redirect()->route('dashboard.admin');
}
public function logout(Request $request): RedirectResponse
{
$request->session()->forget('legacy_auth');
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect()->route('role-login');
}
}