Sistem Certificate Authority (CA) internal kampus untuk penerbitan sertifikat digital, tanda tangan elektronik, manajemen dokumen, audit trail, dan portal verifikasi publik.
CA UMC adalah sistem Certificate Authority berbasis web yang dirancang khusus untuk Universitas Muhammadiyah Cirebon. Sistem ini memungkinkan penerbitan dan pengelolaan sertifikat digital untuk dokumen resmi kampus dengan standar keamanan tinggi.
- β Autentikasi Google SSO - Login menggunakan akun Google dengan whitelist
- β Manajemen Sertifikat Digital - Penerbitan, pencabutan, dan pemantauan sertifikat
- β Tanda Tangan Digital (PAdES) - Dokumen PDF dengan tanda tangan yang valid di Adobe Reader
- β Portal Verifikasi Publik - Verifikasi keaslian dokumen tanpa perlu login
- β QR Code Generator - Setiap dokumen dilengkapi QR code untuk verifikasi
- β Multi-Role Management - Admin, Dosen, Rektor, Dekan dengan hak akses berbeda
- β Audit Trail - Pencatatan seluruh aktivitas sistem
- β Certificate Revocation List (CRL) - Pengelolaan sertifikat yang dicabut
- β Modern UI/UX - Desain responsif dengan palet warna UMC
- Maroon (#800000) - Warna utama/primary
- Abu-abu (#808080) - Background sidebar
- Hitam (#000000) - Teks utama
- Putih (#FFFFFF) - Background konten
- Modern Minimalis dengan clean layout
- Glassmorphism Effect pada card dan modal
- Responsive Design untuk desktop dan mobile
- Sidebar Navigation dengan icon dan label
- Penerbitan sertifikat untuk semua pengguna
- Manajemen dokumen: CRUD untuk semua pengguna
- Pencabutan (revoke) sertifikat
- Manajemen pengguna sistem
- Audit trail lengkap
- Verifikasi dokumen
- Manajemen dokumen pribadi
- Tanda tangan dokumen dengan sertifikat sendiri
- Verifikasi dokumen
- Melihat sertifikat pribadi
- Portal verifikasi dokumen
- Scan QR code dari dokumen
- Download dokumen yang terverifikasi
- React 18 dengan TypeScript
- Vite untuk build tool
- Tailwind CSS untuk styling
- Shadcn/ui untuk component library
- Lucide React untuk icons
- React Router untuk routing
- Supabase (PostgreSQL)
- Supabase Auth untuk autentikasi
- Supabase Storage untuk file storage
- Edge Functions untuk digital signature
- Digital Signature (PAdES) - PDF Advanced Electronic Signatures
- RSA-2048 encryption untuk sertifikat
- QR Code dengan unique ID untuk verifikasi
- Certificate Revocation List (CRL)
id uuid NOT NULL DEFAULT gen_random_uuid(),
email text NOT NULL UNIQUE,
name text,
role USER-DEFINED NOT NULL,
google_id text UNIQUE,
certificate_id uuid,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
nidn text, id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
serial_number text NOT NULL UNIQUE,
public_key text NOT NULL,
private_key text NOT NULL,
issued_at timestamp with time zone DEFAULT now(),
expires_at timestamp with time zone NOT NULL,
status USER-DEFINED DEFAULT 'active'::certificate_status,
revoked_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
certificate_code text, id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
title text NOT NULL,
file_url text,
signed boolean DEFAULT false,
signed_at timestamp with time zone,
qr_code_url text,
status USER-DEFINED DEFAULT 'pending'::document_status,
certificate_id uuid,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
content text,
signed_document_url text, id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
action text NOT NULL,
timestamp timestamp with time zone DEFAULT now(),
description text,
created_at timestamp with time zone DEFAULT now(),- Node.js versi 18 atau lebih baru
- npm atau yarn
- Akun Supabase (untuk backend)
- Akun Google Cloud Console (untuk OAuth)
git clone <repository-url>
cd ca-umc-systemnpm install
# atau
yarn install-
Buat Project Baru di Supabase
- Kunjungi supabase.com
- Buat project baru dengan nama "CA-UMC"
-
Setup Database
-- Jalankan script SQL berikut di Supabase SQL Editor: -- Enable UUID extension CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Create enum types CREATE TYPE user_role AS ENUM ('admin', 'dosen', 'rektor', 'dekan'); CREATE TYPE cert_status AS ENUM ('active', 'expired', 'revoked'); CREATE TYPE doc_status AS ENUM ('pending', 'signed', 'revoked'); -- Create users table CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), email TEXT UNIQUE NOT NULL, name TEXT NOT NULL, role user_role NOT NULL DEFAULT 'dosen', google_id TEXT UNIQUE, certificate_id UUID, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create certificates table CREATE TABLE certificates ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES users(id) ON DELETE CASCADE, serial_number TEXT UNIQUE NOT NULL, public_key TEXT NOT NULL, private_key TEXT NOT NULL, -- akan dienkripsi di aplikasi issued_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), expires_at TIMESTAMP WITH TIME ZONE NOT NULL, status cert_status DEFAULT 'active', revoked_at TIMESTAMP WITH TIME ZONE, algorithm TEXT DEFAULT 'RSA-2048' ); -- Create documents table CREATE TABLE documents ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES users(id) ON DELETE CASCADE, title TEXT NOT NULL, file_url TEXT, signed BOOLEAN DEFAULT FALSE, signed_at TIMESTAMP WITH TIME ZONE, qr_code_url TEXT, status doc_status DEFAULT 'pending', certificate_id UUID REFERENCES certificates(id), document_hash TEXT, signature_data JSONB, created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(), updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() ); -- Create audit_trail table CREATE TABLE audit_trail ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES users(id), action TEXT NOT NULL, timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(), description TEXT, ip_address INET, user_agent TEXT ); -- Create indexes CREATE INDEX idx_users_email ON users(email); CREATE INDEX idx_certificates_user_id ON certificates(user_id); CREATE INDEX idx_documents_user_id ON documents(user_id); CREATE INDEX idx_audit_trail_user_id ON audit_trail(user_id); CREATE INDEX idx_audit_trail_timestamp ON audit_trail(timestamp);
-
Setup Storage Bucket
-- Buat storage bucket untuk dokumen INSERT INTO storage.buckets (id, name, public) VALUES ('documents', 'documents', true); INSERT INTO storage.buckets (id, name, public) VALUES ('qr-codes', 'qr-codes', true); -- Policy untuk akses file CREATE POLICY "Public read access" ON storage.objects FOR SELECT USING (bucket_id = 'documents'); CREATE POLICY "Authenticated upload access" ON storage.objects FOR INSERT WITH CHECK (bucket_id = 'documents' AND auth.role() = 'authenticated');
-
Google Cloud Console
- Buka Google Cloud Console
- Buat project baru atau pilih yang sudah ada
- Aktifkan Google+ API dan People API
-
Credentials OAuth 2.0
- Buat OAuth 2.0 Client ID
- Authorized JavaScript origins:
http://localhost:5173,https://yourdomain.com - Authorized redirect URIs:
http://localhost:5173/auth/callback
-
Aktivasi Integrasi Supabase
- Klik tombol Supabase hijau di pojok kanan atas Lovable
- Masukkan Supabase URL dan ANON KEY
- Masukkan Google OAuth Client ID
-
Setup Environment Variables
VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key VITE_GOOGLE_CLIENT_ID=your_google_client_id
# Development mode
npm run dev
# Build untuk production
npm run build
# Preview production build
npm run preview-
Tambahkan Admin User
INSERT INTO users (email, name, role) VALUES ('admin@umc.ac.id', 'Administrator UMC', 'admin');
-
Tambahkan Sample Users
INSERT INTO users (email, name, role) VALUES ('rektor@umc.ac.id', 'Prof. Dr. Ahmad Zain, M.Pd.', 'rektor'), ('dekan.teknik@umc.ac.id', 'Dr. Siti Fatimah, S.T., M.T.', 'dekan'), ('dosen1@umc.ac.id', 'Ahmad Hidayat, S.Kom., M.T.', 'dosen');
- Login dengan akun Google yang terdaftar
- Dashboard menampilkan statistik sistem
- Kelola sertifikat: terbitkan, lihat, cabut
- Kelola dokumen semua pengguna
- Monitor audit trail
- Login dengan akun Google
- Upload dokumen pribadi
- Tanda tangani dokumen dengan sertifikat
- Verifikasi dokumen
- Download dokumen yang sudah ditandatangani
- Akses
/verifytanpa login - Masukkan ID dokumen atau scan QR code
- Lihat status verifikasi (VALID/INVALID/REVOKED)
- Download dokumen jika valid
- Menggunakan standar PAdES (PDF Advanced Electronic Signatures)
- Algoritma RSA-2048 untuk enkripsi
- Private key disimpan terenkripsi di database
- Validasi signature di Adobe Reader
- Google OAuth 2.0 dengan whitelist email
- Session management dengan Supabase Auth
- Role-based access control (RBAC)
- Semua aktivitas tercatat dengan timestamp
- IP address dan User Agent tracking
- Log untuk sertifikat, dokumen, dan verifikasi
- β UI/UX Design System
- β Authentication flow
- β Basic dashboard
- β Public verification portal
- π Supabase integration
- π Certificate management
- π Document upload & signing
- π QR code generation
- β³ Digital signature (PAdES)
- β³ Mobile app
- β³ Bulk operations
- β³ Advanced reporting
Untuk berkontribusi pada project ini:
- Fork repository
- Buat branch feature (
git checkout -b feature/nama-fitur) - Commit perubahan (
git commit -m 'Tambah fitur baru') - Push ke branch (
git push origin feature/nama-fitur) - Buat Pull Request
- Email: admin@umc.ac.id
- Website: https://umc.ac.id
- GitHub: [Repository CA UMC]
Β© 2025 Universitas Muhammadiyah Cirebon - Certificate Authority
Sistem ini dikembangkan untuk mendukung transformasi digital kampus dengan standar keamanan tinggi dan user experience yang modern.