DRYing up OTP url generation