# HTML Pages Reference

## Overview
This document lists all HTML pages in the OBP-API application and their route mappings.

---

## Main Application Pages

### 1. Home & Landing Pages

#### index.html
- **Path:** `/index`
- **File:** `obp-api/src/main/webapp/index.html`
- **Route:** `Menu.i("Home") / "index"`
- **Authentication:** Not required
- **Purpose:** Main landing page for the API

#### index-en.html
- **Path:** `/index-en`
- **File:** `obp-api/src/main/webapp/index-en.html`
- **Route:** `Menu.i("index-en") / "index-en"`
- **Authentication:** Not required
- **Purpose:** English version of landing page

#### introduction.html
- **Path:** `/introduction`
- **File:** `obp-api/src/main/webapp/introduction.html`
- **Route:** `Menu.i("Introduction") / "introduction"`
- **Authentication:** Not required
- **Purpose:** Introduction to the API

---

## Authentication & User Management Pages

### 2. Login & User Information

#### already-logged-in.html
- **Path:** `/already-logged-in`
- **File:** `obp-api/src/main/webapp/already-logged-in.html`
- **Route:** `Menu("Already Logged In", "Already Logged In") / "already-logged-in"`
- **Authentication:** Not required
- **Purpose:** Shows message when user is already logged in

#### user-information.html
- **Path:** `/user-information`
- **File:** `obp-api/src/main/webapp/user-information.html`
- **Route:** `Menu("User Information", "User Information") / "user-information"`
- **Authentication:** Not required
- **Purpose:** Displays user information

### 3. Password Reset

#### Lost Password / Password Reset (Dynamically Generated)
- **Path:** `/user_mgt/lost_password` (lost password form)
- **Path:** `/user_mgt/reset_password/{TOKEN}` (reset password form)
- **File:** None (dynamically generated by Lift Framework)
- **Route:** Handled by `AuthUser.lostPassword` and `AuthUser.passwordReset` methods
- **Source:** `obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala`
- **Authentication:** Not required (public password reset)
- **Purpose:** Request and reset forgotten passwords
- **Note:** These are not static HTML files but are rendered by Lift's user management system
- **Links from:** 
  - `oauth/authorize.html` (line 30): "Forgotten password?" link
  - `templates-hidden/_login.html` (line 31): "Forgotten password?" link

**API Endpoint for Password Reset URL:**
- **Path:** `POST /obp/v4.0.0/management/user/reset-password-url`
- **Role Required:** `CanCreateResetPasswordUrl`
- **Purpose:** Programmatically create password reset URLs
- **Property:** Controlled by `ResetPasswordUrlEnabled` (default: false)

### 4. User Invitation Pages

#### user-invitation.html
- **Path:** `/user-invitation`
- **File:** `obp-api/src/main/webapp/user-invitation.html`
- **Route:** `Menu("User Invitation", "User Invitation") / "user-invitation"`
- **Authentication:** Not required
- **Purpose:** User invitation form/page

#### user-invitation-info.html
- **Path:** `/user-invitation-info`
- **File:** `obp-api/src/main/webapp/user-invitation-info.html`
- **Route:** `Menu("User Invitation Info", "User Invitation Info") / "user-invitation-info"`
- **Authentication:** Not required
- **Purpose:** Information about user invitations

#### user-invitation-invalid.html
- **Path:** `/user-invitation-invalid`
- **File:** `obp-api/src/main/webapp/user-invitation-invalid.html`
- **Route:** `Menu("User Invitation Invalid", "User Invitation Invalid") / "user-invitation-invalid"`
- **Authentication:** Not required
- **Purpose:** Shows when invitation is invalid

#### user-invitation-warning.html
- **Path:** `/user-invitation-warning`
- **File:** `obp-api/src/main/webapp/user-invitation-warning.html`
- **Route:** `Menu("User Invitation Warning", "User Invitation Warning") / "user-invitation-warning"`
- **Authentication:** Not required
- **Purpose:** Shows warnings about invitations

---

## OAuth & Consent Pages

### 5. OAuth Flow Pages

#### oauth/authorize.html
- **Path:** `/oauth/authorize`
- **File:** `obp-api/src/main/webapp/oauth/authorize.html`
- **Route:** `Menu.i("OAuth") / "oauth" / "authorize"`
- **Authentication:** Not required (starts OAuth flow)
- **Purpose:** OAuth authorization page where users approve access

#### oauth/thanks.html
- **Path:** `/oauth/thanks` (via OAuthWorkedThanks.menu)
- **File:** `obp-api/src/main/webapp/oauth/thanks.html`
- **Route:** `OAuthWorkedThanks.menu`
- **Authentication:** Not required
- **Purpose:** OAuth completion page that performs redirect

### 6. Consent Management Pages

#### consent-screen.html
- **Path:** `/consent-screen`
- **File:** `obp-api/src/main/webapp/consent-screen.html`
- **Route:** `Menu("Consent Screen", Helper.i18n("consent.screen")) / "consent-screen" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** OAuth consent screen for approving permissions

#### consents.html
- **Path:** `/consents`
- **File:** `obp-api/src/main/webapp/consents.html`
- **Route:** `Menu.i("Consents") / "consents"`
- **Authentication:** Not required
- **Purpose:** View/manage consents

### 7. Berlin Group Consent Pages

#### confirm-bg-consent-request.html
- **Path:** `/confirm-bg-consent-request`
- **File:** `obp-api/src/main/webapp/confirm-bg-consent-request.html`
- **Route:** `Menu.i("confirm-bg-consent-request") / "confirm-bg-consent-request" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Berlin Group consent confirmation

#### confirm-bg-consent-request-sca.html
- **Path:** `/confirm-bg-consent-request-sca`
- **File:** `obp-api/src/main/webapp/confirm-bg-consent-request-sca.html`
- **Route:** `Menu.i("confirm-bg-consent-request-sca") / "confirm-bg-consent-request-sca" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Berlin Group consent with SCA (Strong Customer Authentication)

#### confirm-bg-consent-request-redirect-uri.html
- **Path:** `/confirm-bg-consent-request-redirect-uri`
- **File:** `obp-api/src/main/webapp/confirm-bg-consent-request-redirect-uri.html`
- **Route:** `Menu.i("confirm-bg-consent-request-redirect-uri") / "confirm-bg-consent-request-redirect-uri" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Berlin Group consent with redirect URI

### 8. VRP (Variable Recurring Payments) Consent Pages

#### confirm-vrp-consent-request.html
- **Path:** `/confirm-vrp-consent-request`
- **File:** `obp-api/src/main/webapp/confirm-vrp-consent-request.html`
- **Route:** `Menu.i("confirm-vrp-consent-request") / "confirm-vrp-consent-request" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** VRP consent request confirmation

#### confirm-vrp-consent.html
- **Path:** `/confirm-vrp-consent`
- **File:** `obp-api/src/main/webapp/confirm-vrp-consent.html`
- **Route:** `Menu.i("confirm-vrp-consent") / "confirm-vrp-consent" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** VRP consent confirmation

---

## Developer & Admin Pages

### 9. Consumer Management

#### consumer-registration.html
- **Path:** `/consumer-registration`
- **File:** `obp-api/src/main/webapp/consumer-registration.html`
- **Route:** `Menu("Consumer Registration", Helper.i18n("consumer.registration.nav.name")) / "consumer-registration" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Register new API consumers (OAuth applications)

### 10. Testing & Development

#### dummy-user-tokens.html
- **Path:** `/dummy-user-tokens`
- **File:** `obp-api/src/main/webapp/dummy-user-tokens.html`
- **Route:** `Menu("Dummy user tokens", "Get Dummy user tokens") / "dummy-user-tokens" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Get dummy user tokens for testing

#### create-sandbox-account.html
- **Path:** `/create-sandbox-account`
- **File:** `obp-api/src/main/webapp/create-sandbox-account.html`
- **Route:** `Menu("Sandbox Account Creation", "Create Bank Account") / "create-sandbox-account" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Create sandbox accounts for testing
- **Note:** Only available if `allow_sandbox_account_creation=true` in properties

---

## Security & Authentication Context Pages

### 11. User Authentication Context

#### add-user-auth-context-update-request.html
- **Path:** `/add-user-auth-context-update-request`
- **File:** `obp-api/src/main/webapp/add-user-auth-context-update-request.html`
- **Route:** `Menu.i("add-user-auth-context-update-request") / "add-user-auth-context-update-request"`
- **Authentication:** Not required
- **Purpose:** Add user authentication context update request

#### confirm-user-auth-context-update-request.html
- **Path:** `/confirm-user-auth-context-update-request`
- **File:** `obp-api/src/main/webapp/confirm-user-auth-context-update-request.html`
- **Route:** `Menu.i("confirm-user-auth-context-update-request") / "confirm-user-auth-context-update-request"`
- **Authentication:** Not required
- **Purpose:** Confirm user authentication context update

### 12. OTP (One-Time Password)

#### otp.html
- **Path:** `/otp`
- **File:** `obp-api/src/main/webapp/otp.html`
- **Route:** `Menu("Validate OTP", "Validate OTP") / "otp" >> AuthUser.loginFirst`
- **Authentication:** **Required** (AuthUser.loginFirst)
- **Purpose:** Validate one-time passwords

---

## Legal & Information Pages

### 13. Legal Pages

#### terms-and-conditions.html
- **Path:** `/terms-and-conditions`
- **File:** `obp-api/src/main/webapp/terms-and-conditions.html`
- **Route:** `Menu("Terms and Conditions", "Terms and Conditions") / "terms-and-conditions"`
- **Authentication:** Not required
- **Purpose:** Terms and conditions

#### privacy-policy.html
- **Path:** `/privacy-policy`
- **File:** `obp-api/src/main/webapp/privacy-policy.html`
- **Route:** `Menu("Privacy Policy", "Privacy Policy") / "privacy-policy"`
- **Authentication:** Not required
- **Purpose:** Privacy policy

---

## Documentation & Reference Pages

### 14. Documentation

#### sdks.html
- **Path:** `/sdks`
- **File:** `obp-api/src/main/webapp/sdks.html`
- **Route:** `Menu.i("SDKs") / "sdks"`
- **Authentication:** Not required
- **Purpose:** SDK documentation and downloads

#### static.html
- **Path:** `/static`
- **File:** `obp-api/src/main/webapp/static.html`
- **Route:** `Menu.i("Static") / "static"`
- **Authentication:** Not required
- **Purpose:** Static resource documentation

#### main-faq.html
- **Path:** Not directly routed (likely included/embedded)
- **File:** `obp-api/src/main/webapp/main-faq.html`
- **Route:** None (component file)
- **Authentication:** N/A
- **Purpose:** FAQ content

---

## Debug & Testing Pages

### 15. Debug Pages

#### debug.html
- **Path:** `/debug`
- **File:** `obp-api/src/main/webapp/debug.html`
- **Route:** `Menu.i("Debug") / "debug"`
- **Authentication:** Not required
- **Purpose:** Main debug page

#### debug/awake.html
- **Path:** `/debug/awake`
- **File:** `obp-api/src/main/webapp/debug/awake.html`
- **Route:** `Menu.i("awake") / "debug" / "awake"`
- **Authentication:** Not required
- **Purpose:** Test if API is running/responsive

#### debug/debug-basic.html
- **Path:** `/debug/debug-basic`
- **File:** `obp-api/src/main/webapp/debug/debug-basic.html`
- **Route:** `Menu.i("debug-basic") / "debug" / "debug-basic"`
- **Authentication:** Not required
- **Purpose:** Basic debug information

#### debug/debug-default-header.html
- **Path:** `/debug/debug-default-header`
- **File:** `obp-api/src/main/webapp/debug/debug-default-header.html`
- **Route:** `Menu.i("debug-default-header") / "debug" / "debug-default-header"`
- **Authentication:** Not required
- **Purpose:** Test default header template

#### debug/debug-default-footer.html
- **Path:** `/debug/debug-default-footer`
- **File:** `obp-api/src/main/webapp/debug/debug-default-footer.html`
- **Route:** `Menu.i("debug-default-footer") / "debug" / "debug-default-footer"`
- **Authentication:** Not required
- **Purpose:** Test default footer template

#### debug/debug-localization.html
- **Path:** `/debug/debug-localization`
- **File:** `obp-api/src/main/webapp/debug/debug-localization.html`
- **Route:** `Menu.i("debug-localization") / "debug" / "debug-localization"`
- **Authentication:** Not required
- **Purpose:** Test localization/i18n

#### debug/debug-plain.html
- **Path:** `/debug/debug-plain`
- **File:** `obp-api/src/main/webapp/debug/debug-plain.html`
- **Route:** `Menu.i("debug-plain") / "debug" / "debug-plain"`
- **Authentication:** Not required
- **Purpose:** Plain debug page without templates

#### debug/debug-webui.html
- **Path:** `/debug/debug-webui`
- **File:** `obp-api/src/main/webapp/debug/debug-webui.html`
- **Route:** `Menu.i("debug-webui") / "debug" / "debug-webui"`
- **Authentication:** Not required
- **Purpose:** Test WebUI properties

---

## Template Files (Not Directly Accessible)

### 16. Template Components

#### templates-hidden/_login.html
- **Path:** N/A (template component)
- **File:** `obp-api/src/main/webapp/templates-hidden/_login.html`
- **Route:** None (included by Lift framework)
- **Purpose:** Login form template component
- **Note:** Contains "Forgotten password?" link to `/user_mgt/lost_password`

#### templates-hidden/default.html
- **Path:** N/A (template)
- **File:** `obp-api/src/main/webapp/templates-hidden/default.html`
- **Route:** None (Lift framework template)
- **Purpose:** Default page template

#### templates-hidden/default-en.html
- **Path:** N/A (template)
- **File:** `obp-api/src/main/webapp/templates-hidden/default-en.html`
- **Route:** None (Lift framework template)
- **Purpose:** English default page template

#### templates-hidden/default-header.html
- **Path:** N/A (template)
- **File:** `obp-api/src/main/webapp/templates-hidden/default-header.html`
- **Route:** None (Lift framework template)
- **Purpose:** Default header template

#### templates-hidden/default-footer.html
- **Path:** N/A (template)
- **File:** `obp-api/src/main/webapp/templates-hidden/default-footer.html`
- **Route:** None (Lift framework template)
- **Purpose:** Default footer template

---

## Other Pages

### 17. Miscellaneous

#### basic.html
- **Path:** Not directly routed (likely used programmatically)
- **File:** `obp-api/src/main/webapp/basic.html`
- **Route:** None found
- **Purpose:** Basic HTML page template

---

## Route Configuration

All routes are defined in:
- **File:** `obp-api/src/main/scala/bootstrap/liftweb/Boot.scala`
- **Method:** `boot` method in `Boot` class
- **Framework:** Lift Web Framework's SiteMap

### Authentication Guards

- `>> AuthUser.loginFirst` - Requires user to be logged in
- `>> Admin.loginFirst` - Requires admin user to be logged in
- No guard - Public access

### Conditional Routes

Some routes are conditionally added based on properties:
- Sandbox account creation requires: `allow_sandbox_account_creation=true`

---

## URL Structure

All pages are served at:
```
https://[hostname]/[path]
```

For example:
- Home page: `https://api.example.com/index`
- OAuth: `https://api.example.com/oauth/authorize`
- Consent: `https://api.example.com/consent-screen`

---

## Summary Statistics

**Total HTML Files:** 43
- **Public Pages:** 27
- **Authenticated Pages:** 13
- **Template Components:** 5
- **Debug Pages:** 9
- **Dynamically Generated:** 2 (password reset pages)

**Page Categories:**
- Authentication & User Management: 7 pages
- Password Reset: 2 dynamically generated pages
- OAuth & Consent: 9 pages
- Developer & Admin: 3 pages
- Legal & Information: 4 pages
- Documentation: 4 pages
- Debug & Testing: 9 pages
- Templates: 5 files
- Miscellaneous: 2 pages

---

## Notes

1. **Lift Framework:** The application uses Lift Web Framework for routing and page rendering
2. **SiteMap:** Routes are configured via Lift's SiteMap in Boot.scala
3. **Templates:** Pages in `templates-hidden/` are not directly accessible but are used as layout templates
4. **Localization:** Some pages support internationalization (i18n) via `Helper.i18n()`
5. **Security:** Many pages require authentication via `AuthUser.loginFirst` or `Admin.loginFirst`
6. **OAuth Flow:** The OAuth authorization flow involves multiple pages: authorize → consent-screen → thanks
7. **Consent Types:** Different consent screens for different standards (Berlin Group, VRP, generic OAuth)
8. **Password Reset:** The password reset flow is handled dynamically by Lift's user management system, not static HTML files
   - Lost password form: `/user_mgt/lost_password`
   - Reset password form: `/user_mgt/reset_password/{TOKEN}`
   - Implementation in: `code/model/dataAccess/AuthUser.scala`

---

## Related Files

- **Boot Configuration:** `obp-api/src/main/scala/bootstrap/liftweb/Boot.scala`
- **Menu Helpers:** Various classes in `code` package
- **Templates:** Lift framework `templates-hidden` directory
- **Static Resources:** JavaScript, CSS, and images in `webapp` directory
- **User Management:** `obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala` (password reset, validation)
- **Password Reset API:** `obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala` (resetPasswordUrl endpoint)