update: add ctx.ip and ctx.redirect()