Living life and Make it Better

life, learn, contribute

Endy Muhardin

Software Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux.

Switch User dengan Spring Security

Alhamdulillah, aplikasi kita sudah naik production, dan digunakan oleh banyak user. Aplikasi sudah kita rancang dengan baik, sehingga data yang tampil di aplikasi sesuai dengan user yang sedang login.

Masalah timbul ketika ada pertanyaan atau laporan dari user dalam penggunaan aplikasi. Sebagai administrator, kita tidak tahu data apa yang sedang tampil di layar user, karena aplikasi hanya bisa menampilkan data user yang sedang login. Apabila kita login dengan akun administrator, kita tidak bisa melihat apa yang dilihat user, sehingga kita sulit untuk mendebug aplikasi.

Biasanya, orang-orang mengatasi isu ini dengan meminta password user. Programmer/administrator kemudian mencoba aplikasi dengan cara login sebagai user. Praktek seperti ini sangat tidak dianjurkan. Pertama karena programmer/administrator menjadi tahu password user. Mayoritas user di dunia, menggunakan password yang sama di berbagai aplikasi, sehingga password yang diberikan ke programmer/administrator ini ada kemungkinan bisa dipakai di akunnya yang lain (internet banking, online shop, dan sebagainya). Kedua, karena ini belum tentu bisa digunakan pada sistem single sign on, seperti yang kita sudah pernah buat di artikel terdahulu.

Solusinya, kita harus buatkan di aplikasi kita fitur untuk administrator supaya dia bisa pindah menjadi user lain. Dengan demikian, dia bisa melihat apa yang dilihat user lain tersebut. Tentunya fitur ini harus dijaga dengan baik, jangan sampai disalahgunakan oleh administrator. Caranya bisa dengan mengimplementasikan audit log untuk mencatat aktifitas administrator selama pindah menjadi user lain.

Nah, demikian konsepnya secara garis besar, sekarang mari kita langsung ke kode program.

Lanjut membaca ...


2019 Masih Debat Database Transaction?

Beberapa waktu yang lalu, salah satu seleb programmer di Yutub bikin video yang menyatakan bahwa pengetahuan tentang database transactional itu wajib bagi senior programmer.

<grammar-police> Well, sebelumnya saya koreksi dulu, yang tepat adalah database transaction, bukan transactional. Kalopun mau pakai akhiran al, maka yang pas itu transactional database. </grammar-police>

Netijen pun bereaksi keras Maklumlah namanya juga netijen, bebas aja. Di antara komentar netijen, ada satu yang tertangkap mata saya. Itupun karena ditag. Berikut komentarnya,

Yaa kenapa gitu? Ada aja kok senior software developer gatahu dependency injection, github repo, sama continous integration tapi bikin programnya jago dan enak dibaca. Jangan main nge judge gitu lah statement nya

Sebetulnya saya tidak mau menanggapinya. Sudah pernah saya tulis masalah ini 8 tahun yang lalu di blog ini juga. Silahkan dibaca.

Tapi apa boleh buat, saya sudah ditag, dan sebagai sesama netijen jaman now sudah sepantasnya kalau kita bersikap julid, FOMO, dan YOLO.

Dan lagipula, ini blog sudah lama gak diupdate, jadi mumpung ada bahan, here we go.

Lanjut membaca ...


Hapus Partisi dengan Command Line

Meneruskan kebiasaan pada waktu menggunakan Ubuntu, kadang saya masih melakukan format ulang terhadap laptop, yang sudah 4 tahun ini menggunakan MacOS. Cara format ulangnya mirip, yaitu:

  • Unduh image installer sistem operasi. Untuk MacOs, kita harus membuatnya sendiri menggunakan laptop/komputer Mac juga :D. Caranya bisa di-google, tidak akan saya tulis karena tiap rilis perintahnya agak berbeda. Lagipula, biasanya ada yang sudah membuatkan scriptnya.

  • Tulis image tersebut ke flashdisk. Biasanya saya pakai perintah dd saja di commandline. dd if=/file/image.iso of=/dev/diskN bs=1m. Ganti nama device diskN sesuai yang terdeteksi di sistem operasi.

  • Booting dari flashdisk dengan cara menekan tombol Option (⌥) sambil menyalakan komputer.

  • Next .. next .. selesai.

Nah masalahnya adalah, flashdisk bekas menginstal tersebut agak susah dibersihkan partisinya. Sudah dihapus menggunakan aplikasi Disk Utility, diskutil command line, tetap menyisakan partisi boot.

Ini terutama disebabkan karena filesystem Mac tidak lazim ditemui di Windows dan Linux, sehingga untuk menghapusnya tidak bisa menggunakan aplikasi GUI biasa. Hal ini juga berlaku untuk filesystem yang aneh, seperti misalnya ZFS.

Untuk itu, google dan stack overflow tidak kekurangan jawaban. Ternyata kita cukup menghapus 3 blok pertama di flashdisk tersebut, karena tabel partisinya ada di situ. Bila partisi kita banyak (misalnya 10), yang harus dihapus 5 blok.

Perintahnya sebagai berikut

dd if=/dev/zero of=/dev/diskN bs=512 count=3

Demikianlah ini menjadi catatan buat saya pribadi, supaya kalau besok-besok instal ulang, tidak perlu repot lagi mencari command untuk membersihkan flashdisk. Semoga bermanfaat untuk pembaca sekalian.


Live Streaming dengan Nginx RTMP Module

Di era milenial seperti sekarang ini, segala kegiatan harus dipublish supaya eksis. Gak cukup dengan posting foto dan rekaman video, harus instan real time live show. Para raksasa sosmed berlomba-lomba menyediakan fasilitas tayangan langsung seperti Instagram Stories, Facebook Live, Youtube Live, dan masih banyak yang lainnya.

Karena banyak platform berbeda, tapi tujuannya sama, maka sayapun mencari aplikasi untuk membantu publikasi untuk melakukan tayangan langsung. Pengennya satu kali pasang kamera, langsung live di berbagai sosmed. Cari punya cari, ada beberapa alternatif untuk mengabstraksi tayangan langsung multi platform ini:

Pada artikel kali ini, kita akan membahas setup Nginx RTMP Module dengan Raspberry Pi.

Raspi Resource Usage

Lanjut membaca ...


Implementasi Single Sign On dengan Google

Jaman sekarang eranya integrasi antar aplikasi. Aplikasi A ingin mengakses data di Aplikasi B. Apalagi dengan mewabahnya arsitektur microservice, bahkan sesama aplikasi yang kita buat juga ingin berkomunikasi antar aplikasi.

Dengan sekian banyak aplikasi, tentunya akan sangat mengganggu user kalau dia harus login berkali-kali di tiap aplikasi tersebut. Untuk itu kita harus membuat semacam login server, di mana semua user akan login di sana dan semua aplikasi akan mengecek di sana apakah user tersebut sudah login atau belum.

Biasanya, hal ini kita menggunakan standar protokol OAuth 2.0 dan atau OpenID Connect. Lebih detail tentang protokol ini bisa ditonton di video saya di Youtube.

Dalam Spring Security 4 dan Spring Boot 1, kita mendapatkan fitur untuk membuat Authorization Server, Resource Server, dan Client Application. Akan tetapi, di Spring Security 5, mereka berencana untuk melakukan perombakan besar-besaran. Di Spring Security versi 5.0, para pengembang Spring sudah menyediakan dukungan Client Application yang baru. Ini sudah masuk dalam Spring Boot 2.0.

Dukungan terhadap Resource Server yang baru direncanakan akan launching di Spring Security versi 5.1 dan dibundel dalam Spring Boot 2.1. Pada saat artikel ini ditulis, Spring Security 5.1 dan Spring Boot 2.1 belum dirilis.

Pada artikel kali ini, kita akan mengimplementasikan Client Application (atau Relying Party dalam istilah OpenID Connect) dengan fitur login dengan Google. Kita juga akan membuat tabel di aplikasi kita yang memuat setting permission. Kita akan mapping username dari Google dengan permission yang kita kelola di aplikasi kita sendiri.

Lanjut membaca ...