refactor omniauth callbacks with metaprogramming