How to implement MVC in Go

Go makes programming fun again.

 

Go programming language (Golang) is a high performance programming language. It’s developed by experts working in Google. Go is powerful yet beautiful language that worth to learn, especially if you have experience in C or PHP. In short, Go makes programming fun again.

In this short post, I will show some code snippets to give overview of how to program in Go using Model View and Controller (MVC) pattern.

Firstly, it is important to know the flow of HTTP request and response.

Here is the flow of request:

Browser -> Request -> Route -> (Middleware/opt)-> Controller -> Model -> Database Query

And here’s the flow of response:

Query Result -> Model -> Controller -> View -> Response -> Browser

Next, we will start exploring the backend code.

For example, we will create a simple Notes App.

First, we want to read our note list at http://localhost/notepad. So we design our route as follow:

r.GET("/notepad", hr.Handler(alice.
New(acl.DisallowAnon).
ThenFunc(controller.NotepadReadGET)))

So if our app receive a request at this URL, then we will call a acl.DisallowAnon middleware and then call controller.NotepadReadGET. DisallowAnon function within the acl package is a middleware that checks user session. If the user has logged in, then user will be allowed to continue the process (go to NotepadReadGET method), otherwise, user will not be able to access the page.


// DisallowAnon does not allow anonymous users to access the page
func DisallowAnon(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Get session
sess := session.Instance(r)

// If user is not authenticated, don't allow them to access the page
if sess.Values["id"] == nil {
http.Redirect(w, r, "/", http.StatusFound)
return
}

h.ServeHTTP(w, r)
})
}

Upon successful, the app will call a NotepadReadGET controller.


// NotepadReadGET displays the notes in the notepad
func NotepadReadGET(w http.ResponseWriter, r *http.Request) {
// Get session
sess := session.Instance(r)

userID := fmt.Sprintf("%s", sess.Values["id"])

notes, err := model.NotesByUserID(userID)
if err != nil {
log.Println(err)
notes = []model.Note{}
}

// Display the view
v := view.New(r)
v.Name = "notepad/read"
v.Vars["first_name"] = sess.Values["first_name"]
v.Vars["notes"] = notes
v.Render(w)
}

This controller call another function in model package, named model.NotesByUserID(userID). This function takes userID as its parameter. Here’s the code of NotesByUserID

 // NotesByUserID gets all notes for a user

func NotesByUserID(userID string) ([]Note, error) {

var err error

var result []Note

err = database.SQL.Select(&result, "SELECT id, content, user_id, created_at, updated_at, deleted FROM note WHERE user_id = ?", userID)

return result, standardizeError(err)

}

This model will execute a query selecting all notes of this user and return the results and the error message (if any).

Next, the result will be served as HTML page using notepad/read template:

<h1>{{.first_name}}'s Notepad</h1>
</div>
<p>
   <a title="Add Note" class="btn btn-primary" role="button" href="{{$.BaseURI}}notepad/create">
      <span class="fa fa-plus" aria-hidden="true"></span> Add Note
   </a>
</p>

{{range $n := .notes}}
   <div class="panel panel-default">
      <div class="panel-body">
         <p>{{.Content}}</p>
         <div style="display: inline-block;">
            <a title="Edit Note" class="btn btn-warning" role="button" href="{{$.BaseURI}}notepad/update/{{.NoteID}}">
               <span class="fa fa-edit" aria-hidden="true"></span> Edit
            </a>
            <a title="Delete Note" class="btn btn-danger" role="button" href="{{$.BaseURI}}notepad/delete/{{.NoteID}}">
               <span class="fa fa-trash" aria-hidden="true"></span> Delete
            </a>
         </div>
         <span class="pull-right" style="margin-top: 14px;">{{.UpdatedAt | PRETTYTIME}}</span>
      </div>
   </div>
{{end}}

 

And finally, the page will show the following result

Easy, isn’t it?

Happy coding!

Mari bicara…

Di tahun 2015, saya pernah menulis essay  sederhana yang berjudul “Is Indonesia Ready for E-Participation?“. Ditulis dengan bahasa yang agak berantakan, inti dari penelitian sederhana itu menunjukkan bahwa masyarakat Indonesia saat ini sangat siap untuk berpartisipasi dalam pembangunan nasional melalui jalur elektronik (e-participation).

In conclusion, it is strongly believed that Indonesia is ready to implement e-participation. This is supported by the statistical data showing the improvement of the Telecommunication Development Index and the high number of internet and social media users in Indonesia potentially boosts e-participation. Moreover, Indonesia has made progress to establish e-participation. For e-information, this is shown by numbers of governmental registered domain names and data provided by Indonesian agencies on Open Data Portal (data.go.id). In terms of e-consultation, the government has run national online complaint handling system (lapor.go.id). However, Indonesia has not had any suitable example of e-decision making. Therefore, the current Indonesia’s progress leaves significant room for improvement for making a better implementation of e-participation.

Kesimpulan ini berdasarkan pada meningkatnya Telecommunication Infrastructure Index (TII) yang merupakan salah satu komponen dari E-Government Index yang disusun oleh United Nations setiap dua tahun, disamping Online Service Index (OSI) dan Human Capital Index (HCI).  Saat ini, memang semakin banyak masyarakat yang memiliki akses ke internet dan semakin gencar pula instansi pemerintah kita memberikan layanan berbasis internet. Tentu ini suatu indikasi dan potensi besar untuk memberikan layanan yang lebih baik kepada masyarakat.

Mundur ke tahun 2012, kami di Unit Kerja Presiden bidang Pengawasan dan Pengendalian Pembangunan (UKP4) di bawah kepemimpinan Bpk. Kuntoro Mangkusubroto dan era Bpk. SBY, diberi tugas untuk membangun Layanan Aspirasi dan Pengaduan Online Rakyat (Lapor!) dengan tujuan menampung, mengurai, dan menyelesaikan permasalahan yang dilaporkan langsung oleh masyarakat secara online, didisposisikan ke instansi terkait, dan dalam pengawasan langsung UKP4. Bekerja bersama dengan rekan-rekan developer internal, website lapor.ukp.go.id di-launching pada 2012 yang kini berubah menjadi https://lapor.go.id.

Pada masa itu, saya sendiri memiliki role sebagai System Administrator yang menyiapkan server, operating system, storage, database dan domain. Kemudian role ini harus berevolusi menjadi DevOps Engineer (mengatur mekanisme development life cycle dengan mengimplementasikan code versioning hingga autodeploy ke development dan production environment), dan juga sebagai Quality Assurance Engineer yang melakukan functionality and non-functionality testing pada aplikasi tersebut. Tidak hanya untuk aplikasi Lapor, saat itu pengembangan berbarengan dengan pembuatan Data.go.id dan OpenGovIndonesia.org

Yang menarik dari fungsi tersebut adalah ketika menjadi seorang system tester, kita dituntut melaporkan permasalahan yang terjadi untuk ditindak lanjuti oleh teman-teman programmer. Mungkin fungsi inilah yang paling ‘dibenci’ oleh programmer karena setiap temuan kita, berarti pekerjaan yang banyak untuk mereka. Pun demikian, tester-lah yang menentukan apakah suatu update boleh dirilis atau tidak. Hubungan saling melengkapi inilah yang memicu semangat kerja dan menciptakan sistem yang akuntabel.

Sejak dulu saya cenderung memilih untuk bersuara bila memiliki aspirasi atau mendapati ada sesuatu yang perlu diperbaiki. Karena saya yakin hal tersebut dapat mendorong perubahan ke arah yang lebih baik.

Berikut beberapa contoh aspirasi yang pernah saya sampaikan melalui Twitter.

  • Mesin ATM yang masih pakai Sistem Operasi yang sudah kadaluwarsa dan bajakan:

  • Website KPU yang error pada masa pemilu

  • Intrusive Ads dari XL

  • Kontak penanggung jawab e-ktp yang tidak bisa dihubungi

  • Komplain Pelayanan Bank Mandiri dan PIN ATM-nya maksimal masih 4 digit

Dan banyak juga laporan di Sistem Lapor sendiri:

  1. https://www.lapor.go.id/pengaduan/800124/infrastruktur/saran-penambahan-jembatan-penyeberangan-di-stasiun-juanda.html
  2. https://www.lapor.go.id/pengaduan/1110023/infrastruktur/informasi-posisi-stasiun-di-dalam-kereta-commuter-line.html
  3. https://www.lapor.go.id/pengaduan/1199735/infrastruktur/tumpukan-sampah-di-stasiun-depok-lama.html
  4. https://www.lapor.go.id/pengaduan/1251415/infrastruktur/kacaunya-waktu-perjalanan-commuter-line-.html
  5. https://www.lapor.go.id/pengaduan/1285650/reformasi-birokrasi-dan-tata-kelola/saran-pencantuman-masa-kerja-dan-waktu-kenaikan-pangkat-berkala-berikutnya-di-website-bkn.html
  6. https://www.lapor.go.id/pengaduan/1275589/lingkungan-hidup-dan-penanggulangan-bencana/taman-tidak-terawat-di-jalan-juanda-gambir-.html
  7. https://www.lapor.go.id/pengaduan/1931607/kepegawaian/konsultasi-penilaian-kinerja-pegawai-yang-melaksanakan-tugas-belajar-di-luar-negeri.html

Lalu bagaimana hasilnya:

  • Sekarang sudah banyak ATM Mandiri yang menggunakan Sistem baru menggantikan Win XP (dan pastinya tidak bajakan lagi 🙂 )
  • Web KPU lebih jarang mati (setidaknya pas saya akses, hehe)
  • Sudah tidak ada lagi Intrusive Ads XL di Smart Phone
  • Saya sudah dapat Kontak Call Center E-KTP di Kemdagri (1500357)
  • Terakhir ke Mandiri Cab. Juanda pelayanannya lebih ramah
  • PIN ATM Mandiri sekarang minimal 6 digit lho..
  • Jembatan penyeberangan Juanda sudah sampai tepi jalan
  • Sekarang di semua KRL, sudah terdengar informasi posisi saat ini dan pemberhentian selanjutnya dari speaker (joss!)
  • Tempat sampah di Stasiun Depok Lama sudah tidak ada sampahnya
  • KRL sudah jarang tersendat waktu masuk stasiun Manggarai karena jalurnya semakin banyak dan terowongan sudah jadi (saluut..)
  • BKN sudah bikin aplikasi baru untuk profil PNS, https://apps.bkn.go.id/ (tapi sepertinya masih tahap uji coba) – mantap
  • Taman Jalan Juanda makin bersih
  • Kalkulasi nilai akademik menjadi SKP sudah saya sampaikan dan menjadi pertimbangan instansi terkait

Walaupun mungkin tidak semua realisasi itu dikarenakan keluhan saya, namun setidaknya saya turut membantu menyuarakan aspirasi orang-orang yang merasakan hal yang sama dan memberi keyakinan pada stakeholder bahwa hal tersebut memang perlu diperbaiki.

JPO Juanda

Jembatan Penyeberangan Juanda

Saat studi di Australia, saya lebih fokus untuk mencoba (experiencing) sistem dan belajar bagaimana penyedia layanan menampung serta merespon feedback dari customer. Seperti:

  • Bagaimana AGL merespon saat saya mencoba pindah ke provider lain yang menawarkan harga lebih murah, AGL pun memberi diskon lebih besar agar tetap menggunakan AGL sebagai provider listrik dan gas
  • Bagaimana AGL merespon dengan cepat hanya dengan saya melakukan chat di website mereka
  • Bagaimana UOW Security merespon ketika saya mengirim foto perbaikan jalan yang menyebabkan seorang mahasiswa Malaysia jatuh dari sepeda
  • Bagaimana UOW Academic merespon ketika saya protes SOLS nya error tidak bisa melakukan pengaturan Major 1 dan 2 yang akhirnya ditambahkan manual melalui admin side
  • Bagaimana UOW Wellbeing merespon dengan menawarkan ruangannya untuk dijadikan tempat sholat, ketika saya kirim email bahwa mahasiswa di area timur kampus biasa sholat di tangga karena tidak ada ruangan untuk sholat
  • Bagaimana UOW ITMS merespon dalam beberapa jam ketika saya kirim screenshot website clubs UOW yang error dan tidak bisa diakses
  • Bagaimana UOW ITMS merespon dengan blasting email kepada semua karyawan ketika saya kirim contoh email yang terindikasi phising
  • Bagaimana Mister Minit merespon dengan menawarkan penggantian baterai gratis setelah saya protes jam tangan saya terlambat selesai di-servis
  • dan banyak lagi

Hasilnya, pelanggan menjadi respect dan membuat kita loyal kepada mereka. Kita senang, mereka pun senang.

Akhir kata, sebagai warga negara, saya mengajak saudara saya semua untuk menyampaikan suaranya dan tidak hanya diam saat melihat kesalahan yang bisa diperbaiki. Yang terpenting, bersuara tidak berarti berkeluh kesah, minta dihargai, mengganggap hanya kita yang mengerti, membandingkan dengan negara lain, atau minta sekejap jadi, karena semua proses itu pasti.

Dan untuk rekan-rekan sesama aparatur negara, suara dari masyarakat adalah cermin untuk memperbaiki diri. Kadang kita berpikir “no feedback means we’re doing great things“, padahal belum tentu, bisa jadi masyarakat sudah putus asa, tidak mau menggunakan layanan kita, tidak percaya dan tidak peduli dengan institusi kita. Bukankah itu menyedihkan? We’re working for nothing.

Mereka yang menyampaikan aspirasi itu seharusnya kita hargai, ucapkan terima kasih, mintai saran dan bila perlu konsultasikan solusi kita kepada mereka, karena mereka berharga. Tidak seharusnya dihalangi, dihindari, diabaikan, di-bully, apalagi dipersekusi. Bukankah karena terlihat mendengar rakyat, orang-orang bisa dapat kursi? hehe..

Mari berpikir positif, it’s not an offence it’s a free advice.

e-KTP yang rumit

Beberapa waktu terakhir, kita menyaksikan banyak berita terkait kasus KTP elektronik. Sepertinya kasus korupsi e-KTP ini sangat rumit dan proses hukumnya pun masih panjang.

Kerumitan e-KTP ternyata tidak hanya di sisi korupsi pengadaannya. Sistem di lapangan, khususnya sistem e-KTP dan Sistem Informasi Administrasi Kependudukan (SIAK) pada umumnya, ternyata sangat rumit. Entah, apakah kerumitan sistem itu karena desainnya yang kurang baik, atau implementasinya tidak mengikuti desain karena anggarannya sudah dikorupsi. Yang jelas, di banyak sisi, sistem e-KTP perlu perbaikan yang signifikan. Proses pelayanan e-KTP di berbagai tingkat tingkat kota (namanya PTSP) juga masih jauh dari kata efektif dan efisien.

Saya merasakan bagaimana rumitnya pembuatan e-KTP. Saya melakukan rekam data e-KTP pada tahun 2012. Kemudian, tahun 2013, untuk keperluan pindah domisili, pertama-tama dilakukan proses pisah KK. Pada proses ini, ada perbaikan bulan lahir sekaligus pembuatan NIK lain yang berbeda dengan NIK pada saat perekaman e-KTP. Mulai dari pengurusan surat pengantar RT, RW, kelurahan cempaka putih barat, hingga tingkat kota Jakarta Pusat saya lalui, dan akhirnya NIK berhasil dipindahkan ke Depok, Jawa Barat. Akhirnya, KTP dan KK Depok pun keluar, tetapi belum e-KTP karena pada saat itu katanya blanko e-KTP tidak ada di kelurahan. Saya diminta untuk mencoba datang lagi setelah beberapa bulan. Bulan demi bulan berlalu, hingga tahun ini, 2017 saya mencoba lagi untuk mengurus e-KTP. Alhamdulillah blanko sudah ada.

Tragis, saat hendak dicetak, NIK yang 4 tahun lalu dipindahkan ke Depok ternyata bukan yang memiliki rekam data e-KTP. NIK e-KTP masih ada di Jakarta Pusat. Menemukan kontak orang yang bisa ditanyai mengenai hal ini juga tidak mudah. Banyak kontak/telepon yang beredar ternyata tidak bisa dihubungi. Sampai akhirnya ketemu nomor call center Dukcapil Kemendagri yang bisa dihubungi.

Berbagai kontak instansi pemerintah

Setelah menunggu sekitar 15 menit untuk loading aplikasi yang hang, Operator e-KTP kelurahan Jatimulya pun menyampaikan, saya harus ke Jakarta Pusat dan meminta agar NIK e-KTP yang ada di sana dipindahkan juga ke Depok. Pergilah saya ke sana, mumpung belum masuk kerja. Sesampainya di kantor Walikota Jakarta Pusat, oleh petugas PTSP saya diminta langsung ke gedung D lantai 2 untuk bertemu operator e-KTP tingkat walikota. Setelah bertemu operatornya, dia menyampaikan bahwa NIK e-KTP tidak bisa langsung dipindahkan karena terkunci. NIK yang sudah terlanjur dipindahkan ke Depok harus dikembalikan ke Jakpus untuk kemudian di proses agar NIK e-KTP bisa dipindahkan ke Depok. Prosesnya pun harus mengikuti proses normal menggunakan surat pindah. Jadi saya harus pindah secara administrasi dari Depok kembali ke Jakarta Pusat, lalu dari Jakarta Pusat pindah lagi ke Depok. Semoga Anda belum pusing sampai sini ya. Cerita saya lanjutkan….

Bapak operator Jakarta Pusat menelpon operator e-KTP Depok mengenai kronologisnya dan meminta saya bertemu dengan rekannya tersebut sambil menulis pesan pada secarik kertas. Kertas bertulis tangan tersebut saya antar ke walikota depok. Operator e-KTP kemudian menulis kembali pada secarik kertas dan meminta saya mengantarkan lagi kertas tersebut ke pelayan di loket pelayanan pindah WNI lantai 1. Ini dikenal dengan teknologi ‘Antarnet’. Setelah kertas saya berikan, saya menerima kertas biru untuk pengambilan surat pindah dari Depok ke Jakarta. Saya bisa mengambil 3 hari berikutnya, 15 Desember 2017.

Teknologi Antarnet

Jum’at pagi, 15 Desember saya kembali ke loket, menyerahkan kertas biru dan siap mengambil surat pindah. Malang, saya diminta untuk menulis alamat tujuan di Jakarta di secarik kertas dan diminta untuk kembali lagi hari Senin karena berkas belum jadi (pastinya, mungkin karena baru hari ini diminta alamat tujuan Jakarta). Saya menanyakan apa alasan mengapa tidak sesuai dengan waktu yang dijanjikan, pelayan menjawab server mati dan baru bisa diakses hari ini. Sebenarnya ada keinginan untuk komplain lebih jauh, tapi alasan server mati sepertinya sudah jadi alasan pamungkas yang sulit dipertanyakan…

Proses masih panjaaang….. Nanti setelah surat pindah ke Jakarta jadi, saya ke operator e-KTP Jakpus untuk memproses NIK ganda saya. Kemudian, membuat surat pindah lagi dari Jakarta ke Depok untuk memindahkan NIK e-KTP. Lalu ke kantor Walikota Depok untuk memasukkan NIK saya kembali bersama KK keluarga. Dilanjutkan ke pak RT 004 minta surat pengantar cetak KK dan e-KTP dan akhirnya ke kelurahan Jatimulya untuk cetak e-KTP dan KK. Itupun kalau semuanya lancar.

Itu hanya satu contoh case dari pengurusan e-KTP, mungkin ada banyak case lainnya yang mungkin lebih rumit. Sepertinya, proses penanganan kasus dengan cara begini, terlalu rumit untuk sebuah sistem yang katanya ‘electronic’.  Menjalani proses ini, bagi sebagian masyarakat akan sangat melelahkan dan ‘sakit’. Jadi tidak hanya para tersangka yang ‘sakit’ menjalani proses hukum. Masyarakat pun sebenarnya ‘sakit’ hanya untuk mengurus kartu yang satu ini.

Berbicara solusi, ada 3 saran dalam kerangka governance e-KTP:

  1. Structure: perlu dibuat satu unit / kantor yang menjalankan fungsi khusus pengelolalaan e-KTP, menangani hal terkait e-KTP yang memiliki kewenangan lintas daerah administrasi. Melihat keadaan sekarang, saya sarankan struktur ini tidak berada di bawah Kementerian Dalam Negeri, agar lebih fokus dan powerful dalam menyukseskan program e-KTP. Sebutlah misalnya Unit Kerja Presiden bidang Percepatan Implementasi E-KTP (UKP-PIE) 🙂 . Yang jelas, semangat melayani warga negara harus menjadi organization culture dalam struktur ini.
  2. Process: perlu dibuat dokumen kebijakan berisi proses standar semua hal terkait e-KTP, termasuk special case handling. Prosesnya pun harus transparan dan dapat dibaca oleh masyarakat melalui website. Pada kasus khusus, semestinya prosesnya dihandle secara terpisah, tidak mengikuti proses normal dan harus diberi prioritas. Mengapa? Sebab dalam kasus normal, proses bisa selesai dalam 1-2 kali kedatangan atau mungkin dalam kurun waktu seminggu. Tapi dalam kasus khusus, seseorang bisa bolak balik berkali-kali, lempar sana lempar sini, menguras waktu dan biaya yang semestinya tidak perlu. Kita bisa belajar dari beberapa perusahaan swasta yang sepertinya sangat paham dengan pemberian prioritas pada special case demi memberikan customer satisfaction.
  3. Relational mechanism: Case management perlu melibatkan berbagai pihak di daerah dan level yang berbeda. Mereka perlu dikoordinir dalam suatu task force dan dalam aktivitasnya mengandalkan online system berbasis Internet, bukan lagi Antarnet berbasis kenalan. Orang-orang dalam tim ini didedikasikan khusus sebagai perwakilan organisasi yang berbeda untuk memfasilitasi dan membantu menyelesaikan masalah warga negara terkait e-KTP, dan bekerja mengikuti business process yang baku. Paradigma lama tentang pemisahan back office dan front office seperti saat ini pelan-pelan harus mulai ditinggalkan. Tidak perlu lagi pelayan loket menerima berkas, taruh di meja operator, lalu operator input, modifikasi, dan print data dan diserahkan kembali ke pelayan. Petugas front office dalam tim ini, di daerah manapun, sudah saatnya berhadapan dengan komputer, mengakses antarmuka sistem, melakukan verifikasi dan modifikasi data pada sistem yang memiliki audit trail. Tentu ini akan meningkatkan efisiensi dan efektivitas pelayanan e-KTP.

Tetep optimis, kita pasti bisa jadi lebih baik.

 

Do’a Qunut

اَللّهُمَّ اهْدِنِىْ فِيْمَنْ هَدَيْتَ
وَعَافِنِى فِيْمَنْ عَافَيْتَ
وَتَوَلَّنِىْ فِيْمَنْ تَوَلَّيْتَ
وَبَارِكْ لِىْ فِيْمَا اَعْطَيْتَ
وَقِنِيْ شَرَّمَا قََضَيْتَ،
فَاِ نَّكَ تَقْضِىْ وَلاَ يُقْضَى عَلَيْكَ
وَاِ نَّهُ لاَ يَذِلُّ مَنْ وَالَيْتَ
وَلاَ يَعِزُّ مَنْ عَادَيْتَ
تَبَارَكْتَ رَبَّنَا وَتَعَالَيْتَ
فَلَكَ الْحَمْدُ عَلَى مَا قَضَيْتَ
وَاَسْتَغْفِرُكَ وَاَتُوْبُ اِلَيْكَ
وَصَلَّى اللهُ عَلَى سَيِّدَنَا مُحَمَّدٍ النَّبِيِّ اْلاُمِّيِّ وَعَلَى آلِهِ وَصَحْبِهِ وَسَلَّمَ

Allah hummah dinii fiiman hadait.
Wa’aa finii fiiman ‘aafait.

Watawallanii fiiman tawal-laiit.
Wabaariklii fiimaa a’thait.
Waqinii syarramaa qadhait.
Fainnaka taqdhii walaa yuqdha ‘alaik.
Wainnahu laayadzilu man walait.
Walaa ya’izzu man ‘aadait.
Tabaa rakta rabbanaa wata’aalait.
Falakalhamdu ‘alaa maaqadhait.
Astaghfiruka wa’atuubu ilaik.
Wasallallahu ‘ala Sayyidina Muhammadin nabiyyil ummiyyi. Wa’alaa aalihi washahbihi Wasallam.Artinya :

Ya Allah tunjukkanlah kepadaku sebagaimana mereka yang telah Engkau tunjukkan
Dan berilah kesehatan kepadaku sebagaimana mereka yang Engkau telah berikan kesehatan
Dan peliharalah aku sebagaimana orang yang telah Engkau peliharakan
Dan berilah keberkatan bagiku pada apa-apa yang telah Engkau karuniakan
Dan selamatkan aku dari bahaya kejahatan yang Engkau telah tentukan
Maka sesungguhnya Engkaulah yang menghukum dan bukan kena hukum
Maka sesungguhnya tidak hina orang yang Engkau pimpin
Dan tidak mulia orang yang Engkau memusuhinya
Maha Suci Engkau wahai Tuhan kami dan Maha tinggi Engkau
Maha bagi Engkau segala pujian di atas yang Engkau hukumkan
Aku memohon ampun dari Engkau dan aku bertaubat kepada Engkau
(Dan semoga Allah) mencurahkan rahmat dan sejahtera ke atas junjungan kami Nabi Muhammad, keluarga dan sahabatnya.

 

Do’a Setelah Sholat Witir

Do’a setelah sholat Witir adalah sebagai berikut:

اَللهُمَّ إِنَّا نَسْـأَلُكَ اِيْمَانًا دَائِمًا، وَنَسْأَلُكَ قَلْبًا خَاشِعًا، وَنَسْأَلُكَ عِلْمًا نَافِعًا، وَنَسْأَلُكَ يَقِيْنًا صَادِقًا، وَنَسْأَلُكَ عَمَلاً صَالِحًا، وَنَسْأَلُكَ دِيْنًاقَيِّمًا، وَنَسْأَلُكَ خَيْرًا كَثِيْرًا، وَنَسْأَلُكَ الْعَفْوَ وَالْعَافِيَةَ، وَنَسْأَلُكَ تَمَامَ الْعَافِيَةِ، وَنَسْأَلُكَ الشُّكْرَ عَلَى الْعَافِيَةِ، وَنَسْأَلُكَ الْغِنَاءَ عَنِ النَّاسِ، اَللهُمَّ رَبَّنَا تَقَبَّلْ مِنَّا صَلاَتَنَا وَصِيَامَنَا وَقِيَامَنَا وَتَخُشُّعَنَا وَتَضَرُّعَنَا وَتَعَبُّدَنَا وَتَمِّمْ تَقْصِيْرَنَا يَا اَللهُ يَااَللهُ يَااَللهُ يَااَرْحَمَ الرَّحِمِيْنَ. وَصَلَّى اللهُ عَلَى خَيْرِ خَلْقِهِ مُحَمَّدٍ وَعَلَى اَلِهِ وَصَحْبِهِ اَجْمَعِيْنَ، وَالْحَمْدُ ِللهِ رَبِّ الْعَالَمِيْنَ.
ALLAHUMMA INNAA NAS’ALUKA IIMAANAN DAA’IMAN, WANAS’ALUKA QALBAN KHAASYI’AN, WANAS’ALUKA ‘ILMAN NAAFI’AN, WANAS’ALUKA YAQIINAN SHAADIQON, WANAS’ALUKA ‘AMALAN SHAALIHAN, WANAS’ALUKA DIINAN QAYYIMAN, WANAS’ALUKA KHAIRAN KATSIIRAN, WANAS’ALUKAL ‘AFWA WAL’AAFIYATA, WANAS’ALUKA TAMAAMAL ‘AAFIYATI, WANAS’ALUKASY SYUKRA ‘ALAL ‘AAFIYATI, WANAS’ALUKAL GHINAA’A ‘ANINNAASI. ALLAAHUMMA RABBANAA TAQABBAL MINNAA SHALAATANAA WASHIYAAMANAA WAQIYAAMANAA WATAKHUSY-SYU’ANAA WATADHORRU’ANAA WATA’ABBUDANAA WATAMMIM TAQSHIIRANAA YAA ALLAAHU YAA ALLAAHU YAA ALLAAHU YAA ARHAMAR RAAHIMIINA. WASHALLALLAAHU ‘ALAA KHAIRI KHALQIHI MUHAMMADIN WA’ALAA AALIHI WASHAHBIHI AJMA’IINA, WALHAMDU LILLAAHI RABBIL ‘AALAMIINA.
Wahai Allah. Sesungguhnya kami memohon kepada-Mu iman yang tetap, kami memohon kepada-Mu hati yang khusyu’, kami memohon kepada-Mu ilmu yang bermanfaat, kami memohon kepada-Mu keyakinan yang benar, kami memohon kepada-Mu amal yang shaleh, kami memohon kepada-Mu agama yang lurus, kami memohon kepada-Mu kebaikan yang banyak, kami memohon kepada-Mu ampunan dan afiat, kami memohon kepada-Mu kesehatan yang sempurna, kami memohon kepada-Mu syukur atas kesehatan, dan kami memohon kepada-Mu terkaya dari semua manusia. Ya Allah, Tuhan kami. Terimalah dari kami shalat kami, puasa kami, shalat malam kami, kekhusyu’an kami, kerendahan hati kami, ibadah kami. Sempurnakanlah kelalaian atau kekurangan kami, Wahai Allah Wahai Allah Wahai Allah Wahai Dzat yang Paling Penyayang diantara para penyayang. Semoga rahmat Allah tercurahkan kepada sebaik-baiknya makhluk-Nya, Muhammad, keluarga dan sahabatnya semua, dan segala puji milik Allah, Tuhan semesta alam.
%d bloggers like this: