[feat] add user input validation