This is actually decent, especially for a beginner. This is the first review over three (3) stars I have given in a long while. The code is actually clean and isn't a complete shit show, etc. I would like to see you make a custom whitelisting system though.