Issue:
feat: Add new auth type to allow both SPTs and Login Tokens for 2FA APIs

The following APIs are needed in both with Sign In and in the dashboard.
- `/2fa/totp/verify`
- `/2fa/recovery_code/verify`
- `/2fa/recovery_code/generate`

Currently these APIs use SPT as auth, which makes them unable to access using Login Tokens.

We need a new Auth type which allows us to do this.

Resolution:
<think>
PR Context:
- Title: feat(auth): Create and use `SinglePurposeOrLoginTokenAuth`
- Merged: 2024-06-04T11:27:55Z
- Files changed: 6 files
- Commits: 11 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 -->
This PR adds new auth type `SinglePurposeOrLoginTokenAuth`, which will allow both SPTs and Login Tokens to be used as auth token for APIs.

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the databas
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(auth): Create and use `SinglePurposeOrLoginTokenAuth` (#4830)
Co-authored-by: hyperswitch-bot[b
Files to modify:


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

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

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

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

**crates/router/src/services/authentication.rs**
  Remove:
    - function: private::get_user_id
    - function: private::authenticate_and_fetch
    - impl: impl GetUserIdFromAuth for UserFromSinglePurposeToken
    - impl: impl AuthenticateAndFetch<Box<dyn GetUserIdFromAuth>, A> for DashboardNoPermissionAuth

**crates/router/src/services/authentication/blacklist.rs**
  Add:
    - function: private::check_in_blacklist
    - impl: impl BlackList for SinglePurposeOrLoginToken