Issue:
refactor: Separate out recovery codes from TOTP

Even though recovery codes is dependent entity on TOTP. But the new findings suggest that TOTP is a part of entity called 2FA and TOTP is depended on the 2FA entity not the TOTP entity.

This will be more clear when we add multiple 2FAs like SMS OTP.

So, we want to separate out recovery codes from the TOTP. This means `begin_totp` should not return the recovery codes anymore.

Resolution:
<think>
PR Context:
- Title: feat(users): Create generate recovery codes API
- Merged: 2024-05-22T08:42:47Z
- Files changed: 11 files
- Commits: 3 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [x] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
Currently recovery code are being generated in `begin_totp` API. We want to make a separate out recovery codes and TOTP, so this PR creates a new API which generates the recovery codes.

This API will also be used to regenerate recovery code
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(users): Create generate recovery codes API (#4708)
Files to modify:


**crates/api_models/src/events/user.rs**
  Modify existing code

**crates/api_models/src/user.rs**
  Add:
    - struct: pub::RecoveryCodes

**crates/router/src/consts/user.rs**
  Modify existing code

**crates/router/src/core/errors/user.rs**
  Modify existing code

**crates/router/src/core/user.rs**
  Add:
    - function: pub::generate_recovery_codes

**crates/router/src/routes/app.rs**
  Modify existing code

**crates/router/src/routes/lock_utils.rs**
  Modify existing code

**crates/router/src/routes/user.rs**
  Add:
    - function: pub::generate_recovery_codes

**crates/router/src/utils/user.rs**
  Remove:
    - function: pub::generate_default_totp
  Add:
    - mod: pub::two_factor_auth

**crates/router/src/utils/user/two_factor_auth.rs**
  Add:
    - function: pub::generate_default_totp
    - function: pub::check_totp_in_redis
    - function: private::get_redis_connection

**crates/router_env/src/logger/types.rs**
  Modify existing code