Anda di halaman 1dari 28

Ringkasan UAS Web Programming

1. Autentikasi adalah proses untuk mengindentifikasi seseorang,


biasanya berdasarkan username atau password.

2. Autentikasi berfungsi untuk pembuktian identitas bahwa pelaku


adalah benar – benar pelaku.

3. Contoh autentikasi :
 Ketika user login, user menginput username dan password.
 Data username dan password yang diinput, dicek ke
database apakah ada dan cocok.
 Jika cocok, maka user bisa mengakses ke homepage dan bisa
menggunakan lebih jauh fitur dari sebuah aplikasi.

4. Pada laravel, autentikasi user bisa menggunakan Auth::attempt.


Contoh :
If(Auth::attempt(array(‘email’=>$email,
‘password’=>$password))){
Return Redirect::intended(‘dashboard’);
}

5. Kondisi pada authenticated user :


 Menentukan jika user terotentikasi  menentukan jika user
telah login ke aplikasi atau belum.
 Otentikasi user kemudian mengingat mereka.

Timothy Orvin Edwardo – LK01 – 1901456205


 Menentukan jika user otentikasi lewat “Remember”  bisa
menggunakan method untuk menentukan bahwa user
diotentikasi dengan “remember me” cookie. Menggunakan
method Auth::viaRemember()
 Otentikasi user dengan kondisi  bisa menambahkan
kondisi extra untuk otentikasi query.
 Akses logged in user  ketika user diotentikasi, kita bisa
akses user model / record. Disini kita juga bisa validasi
credentials menggunakan method Auth::validate().
 Logging user untuk single request  menggunakan once
method untuk log user ke aplikasi untuk single request.
Tidak ada session atau cookie yang diutilisasi. Methodnya
Auth::once($credentials).
 Logout user  keluar dari akunnya. Menggunakan method :
Auth::logout().

6. Selain itu, kita juga bisa secara manual login user. Disini kita login
existing user ke aplikasi menggunakan login dengan instance.
Contoh :
$user = User::find(1);
Auth::login($user);

Ini sama saja dengan login user melalui credentials menggunakan


attempt method.

7. Http basic authentication :


 Protect route dengan HTTP basic  menggunakan filter
kolom email pada user record ketika otentikasi. Jika ingin
pakai kolom lain, bisa pass nama kolom sebagai parameter
pertama.

Timothy Orvin Edwardo – LK01 – 1901456205


 Setup HTTP basic filter  bisa menggunakan HTTP basic
authentication tanpa setting user identifier cookie pada sesi
dimana berguna untuk autentikasi API. Disini menggunakan
Route::filter(‘basic.once’, function(){
Return Auth::onceBasic();
});

8. Validasi  proses memastikan bahwa data yang dimasukkan


sesuai dan benar. Disini mengecek kebenaran data,
kebermaknaan, dan keamanan data yang dimasukkan kedalam
sistem. Contoh validasi :
 Validasi nama harus berupa kumpulan huruf, tidak boleh
mengandung angka.
 Validasi password harus mengandung huruf kapital, karakter
spesial, serta minimal 8 digit.
 Validasi input tanggal harus dalam format dd/mm/yyyy.
 Contoh pada laravel untuk validasi nama harus minimal 5
karakter dan maximal 20 karakter :

$this->validate(
[‘nama’=>min:5 | max:20]
);

9. Validasi password di laravel  bisa menggunakan method


Password::validator() dimana disini menerima closure. Dengan
closure ini, kita bisa memilih validasi password yang kita inginkan.
Disini juga tidak perlu verifikasi apakah password match, karena
dilakukan secara otomatis oleh framework. Contoh :
Password::validator(function($credentials){

Timothy Orvin Edwardo – LK01 – 1901456205


Return strlen($credentials[‘password’]) >= 6;
});

10. Security  mekanisme yang dilakukan sebagai keamanan


dalam sistem komputer dan aplikasinya. Disini yang dijaga
keamanannya antara lain perlindungan informasi, pemeliharan
ketersediaan.

11. Pada laravel, beberapa hal yang bisa diterapkan untuk


security adalah :
 Protecting routes  route filter bisa digunakan untuk
otentikasi user untuk akses route. Laravel menyediakan filter
auth dan didefinisikan pada app/filters.php. Contoh :
Route::get(‘profile’,array(‘before’=>’auth’,function(){
//hanya user terotentikasi yang bisa masuk
}));
 CSRF protection  ini berfungsi untuk protect aplikasi dari
cross – site request forgeries. Disini dilakukan hal berikut :
 Memasukkan CSRF token ke form
<input type=”hidden” name=”_token”
value=”{{csrf_token()}}”>
 Validasi CSRF token
Route::post(‘register’,array(‘before’=>’csrf’,function(){
Return ‘Valid CSRF token’;
}));
 Password reminder dan reset  ini harus dilakukan dengan
benar agar jika seseorang mengaku lupa password, yang kita
ingatkan adalah orang yang benar memiliki sebuah akun
tersebut, bukan orang lain. Dilakukan menggunakan :

Timothy Orvin Edwardo – LK01 – 1901456205


 Model dan tabel  laravel menyediakan method
untuk mengirim password reminder dan password
reset.
o Verifikasi user model implement ke
Illuminate\Auth\Reminders\RemindableInterface
o User model yang sudah termasuk dalam
framework sudah implementasi interface ini.
o Menggunakan
Illuminate\Auth\Reminders\RemindabeTrait
untuk include method yang dibutuhkan untuk
implement interface.
 Implementasi RemindableInterface 
mengimplementasikan RemindaleInterface, kemudian
menggunakan use RemindableTrait.
 Generate Reminder Table Migration  tabel harus
dibuat untuk menyimpan password reset token. Untuk
generate migration tabel ini, eksekusi auth:reminders-
table di command artisan.
php artisan auth:reminders-table
php artisan migrate
 Password Reminder Controller
o Menggunakan php artidan auth:reminders-
controller
o Controller ini sudah punya getRemind method
yang handle memperlihatkan password reminder
form.
o Membuat password.remind di form. Contoh :
<form
action=”{{action(‘RemindersController@postRem
ind’)}}” method=”post”>

Timothy Orvin Edwardo – LK01 – 1901456205


<input type=”text” name=”email”>
<input type=”submit” value=”send reminder”>
</form>
o Selanjutnya, method postRemind handle
mengirim password reminder e-mail ke user. Jika
sukses, maka status message akan flash ke
sessions. Jika gagal, error message akan flash.
o Dengan postRemind controller, kita bisa
modifikasi message instance sebelum dikirim ke
user.
o Password reset  menggunakan password.reset.
Disini kita menggunakan method postReset,
kemudian di view meminta inputan email dan
password baru serta bisa ditambahkan konfirmasi
password dan tombol untuk reset password.
o Method postReset berfungsi mengganti
password di storage. Closure melewati
Password::reset, kemudian set password atribut
di user dan memanggil save method. Jika sukses
reset, maka user didirect ke root aplikasi.

12. Cara secure aplikasi kita (khususnya aplikasi web) :


 Autentikasi  proses pembuktian identitas seseorang.
Contohnya : login dengan username dan password
 Autorisasi  proses memberikan wewenang ke objek di
aplikasi kepada seseorang. Sehingga disini kita bisa
meminimalisir terjadinya penyalahgunaan wewenang dalam
aplikasi.
 Encryption  proses mengamankan suatu informasi dengan
membuat informasi tersebut tidak dapat dibaca tanpa

Timothy Orvin Edwardo – LK01 – 1901456205


pengetahuan khusus. Pada Laravel, autentikasi memberikan
fasilitas enkripsi AES yang kuat melalui mcrypt PHP
extension.
 Contoh encrypt value
$encrypted = Crypt::encrypt(‘secret’);
 Contoh decrypt value
$decrypted = Crypt::decrypt($encryptedValue);
 Validasi data input  menyaring data yang masuk. Disini
validasi data dalam kode PHP dan JavaScript.
 Menjaga dari serangan CSRF (Cross Site Request Forgery) 
penyerang biasa mengelabui korban untuk memuat
informasi sensitif atau melakukan transaksi tanpa
sepengetahuan. Biasanya ini terjadi pada menggunakan GET.
 Menjaga serangan dari SQL injection  seringkali terjadi
penyuntikkan atau penyisipan SQL berbahaya. Menghindari
hal ini, kita menggunakan parameter untuk pembersihan
dari karakter yang tidak diizinkan.
 Melindungi file system  menulis kode sedemikian rupa
agar tidak ada operasi yang menempatkan sistem file dalam
resiko. Disini juga dilakukan pembatasan layanan file dari
direktori tertentu saja.
 Melindungi data session  melakukan enkripsi informasi
yang disimpan dalam sesi.

13. Testing environment :


 Ketika running test, laravel secara otomatis set konfigurasi
environment untuk testing.
 Laravel secara otomatis konfigurasi session dan cache ke
array driver ketika testing. Tidak ada session atau cache data
bertahan saat testing.

Timothy Orvin Edwardo – LK01 – 1901456205


14. Mendefinisikan dan menjalankan test :
 Gunakan make:test artisan command (php artisan make:test
UserTest)
 Command ini menempatkan UserTest class di test directory.
Kita bisa definisikan test method seperti menggunakan
PHPUnit.
 Untuk menjalankan test, tinggal eksekusi phpunit command
dari terminal.

15. Testing aplikasi :


 Interaksi aplikasi  cek apakah ketika membuat request ke
aplikasi akan berjalan. Contoh : test link, test forms, test
attachment.

Timothy Orvin Edwardo – LK01 – 1901456205


 Click Link  ketika link di klik, kita sampai di page yang
benar.

 Form  bisa tes interaksi dari semua input form.

 Method yang tersedia untuk interaksi aplikasi :

Timothy Orvin Edwardo – LK01 – 1901456205


 Testing JSON API’s  testing API JSON dan responnya,
contohnya method get, post, put, patch, delete yang
digunakan untuk request berbagai HTTP verb. Method
seeJson konversi array ke JSON dan verifikasi fragmen JSON
terjadi di semua tempat didalam response JSON yang
direturn oeh aplikasi. Tes nya akan lewat selama fragmen
yang diberikan ada.

 Verify exact JSON match (gambar bawahnya) 


verifikasi array yang diberikan exact match ke JSON.
Pakai method seeJsonEquals.

Timothy Orvin Edwardo – LK01 – 1901456205


 Verify structural JSON match  verifikasi JSON
response ke struktur spesifik. Pakai method
seeJsonStructure. Juga bisa pakai notasi * untuk assert
returned JSON structure punya list dimana tiap item
list mengandung atribut yang ditemukan di set value
(lihat gambar 2). Bisa pakai nested * notasi untuk
assert setiap user di respon JSON mengandung
attribute tersebut dan tiap pet di tiap user
mengandung set attribut itu juga (lihat gambar 3)

Timothy Orvin Edwardo – LK01 – 1901456205


Timothy Orvin Edwardo – LK01 – 1901456205
 Session / authentication
 Test apakah session / authentication bekerja.
 Set session data ke array yang diberikan dengan
method withSession()

 Penggunaan session adalah untuk maintain user state


seperti user yang terautentikasi. Disini kita pakai
method actingAs untuk autentikasi user yang diberikan
sebagai user saat ini.

Timothy Orvin Edwardo – LK01 – 1901456205


 Kita juga bisa spesifikasikan guard yang mana yang
harus digunakan untuk autentikasi user yang diberikan
dengan passing nama guard sebagai argumen kedua ke
actingAs method.

 Custom HTTP request


 Jika ingin membuat custom HTTP request ke aplikasi
dan mendapat full Illuminate\Http\Response object
kita pakai call method.

 Jika kita membuat POST, PUT, PATCH request, kita bisa


pass array input data dengan request. Data akan
tersedia di route dan controller yang ada visa request
instance.

 PHPUnit assertions
Timothy Orvin Edwardo – LK01 – 1901456205
Timothy Orvin Edwardo – LK01 – 1901456205
 Mocking
 Ketika membuat heavy use laravel event system, kita
mungkin berharap untuk mock /silent event tertentu
untuk testing.
 Contoh : jika kita testing user registration, kita mungkin
tidak ingin semua event UserRegistered firing, seperti
email welcome.
 Laravel menyediakan method expectsEvents untuk
verifikasi event yang mana yang akan kita fire, tetapi
menghindari handler lain untuk event tersebut untuk
berjalan.

 Bisa juga pakai doesntExpectEvents untuk verifikasi


event yang diberikan tidak fired.

 Jika ingin menghindari semua event handler berjalan,


kita gunakan withoutEvents method.
Timothy Orvin Edwardo – LK01 – 1901456205
 Mocking jobs  test route / controller dalam isolasi –
set apart dari job’s logic. Kita bisa test job itu sendiri
dalam test class terpisah. Disini ada method
expectsJobs yang verifikasi expected job dikirim, tapi
job itu sendiri tidak dieksekusi.

 Mocking facades  kita bisa mock call ke cache


facades menggunakan method shouldReceive yang
akan return instance Mockery mock. Sejak facades
sebenarnya telah resolved dan dimanage oleh laravel
service container, mereka bisa di tes dibanding static
class biasa.

Timothy Orvin Edwardo – LK01 – 1901456205


16. Key factor untuk merancang model bisnis :
 Customer  entrepreneur harus mampu mengerti apa yang
customer akan lakukan.
 Value creation dan capture  menguji berapa banyak value
yang produk kita berikan ke customer dan kapan. Lalu
tentukan bagaimana cara capture value yang cocok dengan
baik.
 Kompetisi  identifikasi apa kompetisi yang terjadi.
 Distribusi  memastikan channel distribusi memiliki insentif
baik untuk menjual produk kita.

17. Tipe – tipe umum model bisnis :


 One time up front charge plus maintenance  customer
membayar biaya besar didepan untuk produk, kemudian
boleh memilih untuk melakukan upgrade / maintenance
produk dengan recurring fee.
 Cost plus  customer membayar beberapa persen lebih
besar dari biaya membuat produk.

Timothy Orvin Edwardo – LK01 – 1901456205


 Hourly rates  lebih cocok untuk service firms. Contoh :
sewa mobil.
 Subscription / leasing  pembayaran per periode waktu.
Contoh : tahunan atau bulanan.
 Licensing  memberikan lisensi ke properti kita ke customer
dan menerima royalty. Tidak harus membuat investasi besar
pada produksi dan distribusi.
 Advertising  menggunakan pihak ketiga untuk akses
kepada customer.
 Usage based  customer membayar sesuai pemakaian saja
diukur dengan pengukuran tertentu.

18. Ketika kita telah menentukan model bisnis, tidak mudah


untuk mengubahnya. Untuk itu, pilih model bisnis yang
membedakan kita dari kompetitor dan beri kelebihan dibanding
kompetitor.

19. Reordering dan nesting items :


 Jika model kita memiliki field yang proper, bisa pakai
reorder. Hanya perlu enable reorder di konstruktor
EntityCrudController. Parameternya adalah kolom db yang
ingin ditampilkan di elemen dan banyaknya level yang ingin
di nesting. Disini MAX_TREE_LEVEL adalah maximum
number dari elemen nesting dari parent. Jika infinit level, set
ke 0.

Timothy Orvin Edwardo – LK01 – 1901456205


20. Media library (file manager) :
 Menggunakan elFinder. Ini terintergrasi di sistem ke :
> TinyMCE (sebagai CRUD “tinymce” fieldtype)
> CKEditor (sebagai CRUD “ckeditor” fieldtype)
> CRUD “browse” fieldtype
> standalone, di your-project/admin/elfinder route
(Ex : for the integration, barryvdh's laravel-elfinder
package is used)

21. Detail row – revision export buttons :


 Detail row memberikan info detail dari CRUD tabel view
 Ketika kita tekan tombol + akan terlihat semua row dan
ketika diklik detail akan keluar informasi tambahan

Timothy Orvin Edwardo – LK01 – 1901456205


 Caranya :
 Klik AJAX request yang dikirim ke entity/{id}/details
route, yang memanggil showDetailsRow() di
EntityCrudController.
 Semuanya yang di return method ini dimunculkan di
detail row. Kita bisa overwrite method ini untuk
memunculkan info di detail row.
 Izinkan fungsionalitas :

 Izinkan akses ke semua users :

 Overwrite method ini atau


yang secara langsung
memanggil showDetailsRow($id).
 Revision mengizinkan kita store semua perubahan entry
dalam tabel dan revert ke value tertentu. Bekerja seperti
sistem backup dan accountability system untuk admin.
 Ketika diizinkan, akan memperlihatkan tombol lain di table
view diantara edit dan delete. Setelah itu, tombol ini buka
page lain yang mengizinkan admin untuk melihat perubahan
dan siapa yang melakukan.

Timothy Orvin Edwardo – LK01 – 1901456205


 Caranya :
 Buat revision table
(cpvendor/venturecraft/revisionable/src/migrations/2
013_04_09_062329_create_revisions_table.php
database/migrations/ && php artisan migrate)
 Gunakan venturecraft / revisionable didalam model.
Jika menggunakan bootable trait lain, pastikan
override method tersebut didalam model. (namespace
MyApp\Models;
class Article extends Eloquent { use
\Backpack\CRUD\CrudTrait,
\Venturecraft\Revisionable\RevisionableTrait; // If you
are using another bootable trait the be sure to
override the boot method in your model public static
function boot() { parent::boot(); } })
 Di dalam EntityCrudController, izinkan akses revision.
$this->crud->allowAccess('revisions');
 Kalau mau menambahkan table view agar load lebih
cepat.
$this->crud->with('revisionHistory');
 Export data tabel ke pdf, xls, csv, hanya menambahkan
$this->crud->enableExportButtons(); di constructor.

Timothy Orvin Edwardo – LK01 – 1901456205


22. Extras (fake field, stored sebagai JSON di database)
 Definisikan beberapa field sebagai fake.
 Didalam database valuenya tidak di store ke meta_title,
meta_description, meta_keywords.
 Mereka akan distore sebagai kolom meta di array JSON.

 Jika store_in tidak di define, maka akan distore di kolom


ekstra.
 Jika kita tidak memilih kolom lain selain extra, definisikan
fakeColumns didalam model. Haruslah sebuah array of
columns dimana kita store fake fields.
 Gunakan : Entity::find(1)->withFakes();

Timothy Orvin Edwardo – LK01 – 1901456205


23. Column, field, dan order :
 Bisa gunakan beforeColumn, afterColumn, beforeField,
afterField untuk mengubah urutan field setelah fact.

24. Translatable models dan multi language CRUD :


 Harus memakai MySQL 5.7 + atau PosgreSQL dengan JSON
column support.
 Install spatie/laravel-translatable
Timothy Orvin Edwardo – LK01 – 1901456205
 Buat semua kolom yang ingin di translate, di JSON atau
TEXT.
 Gunakan translation trait di model dan definisikan field apa
yang bisa di terjemahkan didalam properti $translatable.

25. Tabbed forms dan inline error :


 Bisa split input create / edit ke multiple table

Timothy Orvin Edwardo – LK01 – 1901456205


 Dalam menggunakan fitur ini kita harus specify tab name
untuk tiap field.

 Sebagai tambahan ke top error (grouped), form backpack


(create dan edit) bisa memperlihatkan highlight tiap input
yang error. Bisa diatur didalam crud.php. Ini bisa
meningkatkan admin UX ketika membuat kesalahan

Timothy Orvin Edwardo – LK01 – 1901456205


26. Customize view untuk CRUD panel :
 Jika kita ingin membuat custom create.blade.php, bisa
overwrite create method. Lakukan hal yang sama untuk edit,
list, revision, reorder.
 Bisa specify custom view di setup() method :

27. Custom CSS dan JS untuk operasi CRUD :


 Disini kita bisa meletakkan operasi custom javascripts dan
styles. Ada di folder public/vendor/backpack/crud.
 Dalam folder tersebut kita bisa menempatkan operation
code tanpa bloating general file CSS, JS, blade files.

Timothy Orvin Edwardo – LK01 – 1901456205


28. Extra CRUD routes :
 Kita bisa pakai method with() dalam CRUD::resource untuk
mengatur route dengan lebih baik.
 Contoh :
CRUD::resource(‘teams’, ‘Admin\TeamCrudController’)-
>with(function()
{
// add extra routes to this resource

Route::get('teams/ajax-name-options',

'Admin\TeamCrudController@nameOptions');
Route::get('teams/ajax-category-options',

'Admin\TeamCrudController@categoryOptions');
});

Timothy Orvin Edwardo – LK01 – 1901456205

Anda mungkin juga menyukai