<% ' ==== Bagian yang disesuaikan dengan aplikasi ============================ ' Ganti APP_DB_CONN, nama tabel dan kolom, dan nama Session dengan yang dipakai aplikasi Anda. ' Dipanggil sesudah X-Guard memastikan identitas pengguna. Tugasnya: ' 1. memutuskan pengguna ini boleh masuk atau tidak, ' 2. mengisi Session yang sudah dipakai aplikasi selama ini. ' xgSub: ID pengguna di X-Guard (klaim sub), tidak pernah berubah walau email berubah. ' Hasil: "" bila boleh masuk, selain itu pesan penolakan untuk pengguna. Function xgLoginLokal(xgSub, email, nama, emailTerverifikasi) Dim conn, cmd, rs, userId Set conn = Server.CreateObject("ADODB.Connection") conn.Open APP_DB_CONN ' ganti dengan koneksi database aplikasi ' Selalu pakai parameter (?), jangan menggabung teks ke dalam SQL. Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "SELECT id FROM users WHERE xguard_sub = ?" cmd.Parameters.Append cmd.CreateParameter("sub", 200, 1, 64, xgSub) ' 200 = adVarChar, 1 = adParamInput Set rs = cmd.Execute If Not rs.EOF Then userId = rs("id") rs.Close ' Login pertama: tautkan lewat email, hanya bila X-Guard menyatakan email itu terverifikasi. If IsEmpty(userId) Then If Not emailTerverifikasi Then conn.Close xgLoginLokal = "Email akun Anda belum terverifikasi di X-Guard. Hubungi admin organisasi." Exit Function End If Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "SELECT id FROM users WHERE email = ? AND xguard_sub IS NULL" cmd.Parameters.Append cmd.CreateParameter("email", 200, 1, 255, email) Set rs = cmd.Execute If Not rs.EOF Then userId = rs("id") rs.Close If IsEmpty(userId) Then conn.Close xgLoginLokal = "Akun " & email & " belum terdaftar di aplikasi ini. Hubungi admin aplikasi." Exit Function End If Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "UPDATE users SET xguard_sub = ? WHERE id = ?" cmd.Parameters.Append cmd.CreateParameter("sub", 200, 1, 64, xgSub) cmd.Parameters.Append cmd.CreateParameter("id", 3, 1, , userId) ' 3 = adInteger cmd.Execute , , 128 ' 128 = adExecuteNoRecords End If conn.Close ' Isi Session yang sama dengan yang diisi halaman login lama. Session("user_id") = userId Session("user_nama") = nama xgLoginLokal = "" End Function ' Dipanggil webhook.asp untuk setiap event yang tanda tangannya sah. idEvent unik per kiriman: simpan yang sudah ' diproses dan abaikan pengulangan. sub tidak dikenal = abaikan (kembalikan ""). ' user.disabled, user.deleted : tangguhkan akun lokal; sesinya berakhir saat cek ulang berikutnya ' user.enabled : pulihkan, hanya bila penangguhan berasal dari X-Guard ' user.updated : perbarui nama atau email ' user.apps_changed : akses "granted" atau "revoked" ke aplikasi ini ' Hasil: "" = diterima; selain itu pesan galat, dan X-Guard mencoba lagi nanti. Function xgTerimaEvent(idEvent, tipe, xgSub, email, akses) Dim conn, cmd Select Case tipe Case "user.disabled", "user.deleted" Set conn = Server.CreateObject("ADODB.Connection") conn.Open APP_DB_CONN Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "UPDATE users SET aktif = 0, nonaktif_oleh_xguard = 1 WHERE xguard_sub = ?" cmd.Parameters.Append cmd.CreateParameter("sub", 200, 1, 64, xgSub) cmd.Execute , , 128 conn.Close Case "user.enabled" Set conn = Server.CreateObject("ADODB.Connection") conn.Open APP_DB_CONN Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "UPDATE users SET aktif = 1, nonaktif_oleh_xguard = 0 WHERE xguard_sub = ? AND nonaktif_oleh_xguard = 1" cmd.Parameters.Append cmd.CreateParameter("sub", 200, 1, 64, xgSub) cmd.Execute , , 128 conn.Close End Select xgTerimaEvent = "" End Function %>