Tahun baru 2015

Selamat datang tahun baru dengan gemerlap kembang api dan sorak sorai terompet, Dengan ramai petasan bak sedang ada ditengah peperangan, memang terus terang saya tidak bisa tidur karena suara itu namun saya cukup terkesima dengan warna-warna kembang api meskipun hanya melihat dari jendela rumah saja.

Ada banyak hal yang menarik dan tidak terduga pada tahun sebelumnya (2014), mulai dari pekerjaan baru meskipun pada tempat yang lama :D, belajar hal-hal baru, bertemu dengan orang yang spesial bagi saya 🙂 dan berbagai hal-hal baik yang positif sebagai acuan untuk dikembangkan dan yang negatif untuk diperbaiki.

Memang cukup terasa sedih dan haru karena ada terdesir pertanyaan didalam hati “Saya sudah ngapain dan apa saja yang didapat pada satu tahun ini ?”, memang bercampur aduk rasanya pada saat menapak tilas jika ditarik lagi tahun ke tahun sebelumnya. Saya akan menjadikan saya yang dahulu sebagai pelajaran dan ukuran saya untuk kedepannya, masih ada janji besar yang tertunda.

Secara garis besar resolusi saya ditahun baru ini adalah untuk meningkatkan kualitas dan kuantitas dari sisi ibadah, pergaulan & silaturahmi, mempelajari hal-hal baru. dimana tiada hentinya dengan harapan semoga Allah mempermudah saya dalam mewujudnya harapan-harapan yang sudah terdaftar pada checklist saya :). Aminnn

Sekilas Menggunakan Session pada YII

Session pada YII selain digunakan untuk menyimpan sesi user login juga dapat digunakan sebagai penyimpanan data sementara hingga session tersebut dihapus/destroy, untuk berinteraksi dengan session Yii menggunakan objek Yii::app()->session, berikut ini beberapa catatan kecil tentang penggunakan session pada Yii:

– Set data pada session dengan variable nama, objek juga bisa dimasukan

Yii::app()->session['nama'] = 'Omar Mochtar';
Yii::app()->session['loket'] = new loket();

– Cek apakah session exist

if (Yii::app()->session['nama'])
    echo "Terdapat session dengan key nama";

– Menghapus session berdasarkan key

unset(Yii::app()->session['nama']);

– Membersihkan semua session (termasuk dengan user session)

Yii::app()->session->clear();

Pada saat user logout menggunakan

Yii::app()->user->logout();

maka semua session yang ada akan hilang pula sama seperti menggunakan clear();, jika tertarik mengenal lebih jauh session pada Yii bisa dilihat pada page dokumentasinya disini

Semoga bermanfaat 🙂

Django Custom Authentication

Sometime user authentication not always looked up through database, such in my case for authentication through all user that exists in an email server (zimbra) with goals as below:

1. When username admin or auditor then do normal authentication to database.
2. Other than admin and auditor, authentication against IMAP server.
3. Due all user that logged in must be exist in django database the check to django user database so there will be auto user creation if user not exists.

so here are the steps:

1. Modify your django apps setting, then add custom authentication code. i will put in file namely auth on app jssp.

$ vim settings.py
....
AUTHENTICATION_BACKENDS = (
   'jssp.auth.CustAuth',
)
....

2. Here are the code to achieve my goals:

from imaplib import IMAP4_SSL
from django.contrib.auth.models import User
from django.conf import settings
from django.contrib.auth.backends import ModelBackend

class CustAuth(ModelBackend):

    def authenticate(self, username=None, password=None):
        # special user admin and auditor will be authenticate to database
        if username == 'admin' or username == 'auditor':
            return ModelBackend.authenticate(self, username=username, password=password)

        try:
            # IMAP server configuration implant in django configuration with name IMAP_HOST
            c = IMAP4_SSL(settings.IMAP_HOST)
            c.login(username, password)
            c.logout()
        except:
            # if IMAP login was failed then just return None as mark of failed authentication on django side
            return None

        # all authentication process must return User object, 
        # try to get one base on username if doesn't exist then create it on the fly
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            user = User.objects.create_user(username, password=password)

        return user

Just modified the code if you have another custom authentication scenario, Enjoy 🙂

Bash: read file with ignoring new line

Usually i always read file in bash by iterating through for loop like following

 
for line in `cat /path/to/file`;do
   echo "Processing => $line"
done

but sometime the file that i need to open has special character that make mess every line in file that i read, for example if i open with command line editor such as vim the words within line looks line a normal one:
Hello this is a normal line
but when i use the normal for loop it will be like this

Hello
this
is
a
normal
line

After searching in google i found the solution in stackoverflow by using read command and the file the will be opened as stdin:

MACLIST='/etc/ethers'

DONE=false
until $DONE ;do
        read || DONE=true
        # ignore every thing that begin with shebang
        echo $REPLY | grep '^#' > /dev/null && continue

        MACADDR=`echo $REPLY | awk '{print $1}'`
        IPADDR=`echo $REPLY | awk '{print $2}'`

        # if there is no macaddr or ipaddr then ignore it
        if [ -z $MACADDR ] || [ -z $IPADDR ];then
                continue
        fi

        echo "$MACADDR => $IPADDR"
done < $MACLIST

The variable REPLY contains current line of loop process.