# Phase A+B — TEST-ready Upload Guide
**Revised:** 2026-07-22  
**Target folder:** `/public_html/test_erp/`  
**Target database:** Test database only — Live DB নয়

## এই Revision-এ যা ঠিক হয়েছে

1. `config/config.php` সরাসরি browser দিয়ে খোলা এখন root rule এবং `config/.htaccess`—দুই স্তরে বন্ধ।
2. `csrf_token()` function যোগ হয়েছে; token endpoint আর 500 error দেবে না।
3. `_core.php` ব্যবহারকারী POST/PUT/PATCH/DELETE API-গুলোতে CSRF guard স্বয়ংক্রিয়ভাবে চালু।
4. পুরনো UI ভাঙা ঠেকাতে আপাতত same-origin compatibility fallback আছে; ভুল token দিলে 419 হবে।
5. `ui/js/erp_csrf.js` বর্তমান `/test_erp/` path নিজে শনাক্ত করে; আর ভুল `/api/...` root path ব্যবহার করে না।
6. Mobile network-এর IP বদলালে আর automatic logout হবে না।
7. Test cookie host-only এবং Live ERP cookie থেকে সম্পূর্ণ আলাদা।

## ZIP-এর ফাইল

| ZIP path | কাজ |
|---|---|
| `.htaccess` | Root security rules |
| `config/.htaccess` | Config folder direct access block |
| `config/config.php` | Test environment config |
| `config/session.php` | Stable and isolated test session |
| `api/_core.php` | Automatic CSRF integration for core-based APIs |
| `api/_csrf_guard.php` | CSRF validation helper |
| `api/auth/login_action.php` | Login lockout + token rotation |
| `api/auth/csrf_token.php` | Session-bound token endpoint |
| `ui/js/erp_csrf.js` | Correct-path automatic fetch protection |
| `migrations/2026_07_21_phase_b_users_auth_hardening.sql` | Test users table migration |

## নিরাপদ Upload Order

### 1. Backup
- Test DB Export করুন।
- `/public_html/test_erp/` folder ZIP backup নিন।

### 2. Test DB Migration
phpMyAdmin-এ **Test DB select আছে নিশ্চিত করে** এই file-এর SQL চালান:

`migrations/2026_07_21_phase_b_users_auth_hardening.sql`

Live database-এ চালাবেন না।

### 3. File Upload
cPanel File Manager-এ `/public_html/test_erp/` খুলে ZIP upload ও Extract করুন। Existing file replace করতে সম্মতি দিন।

Extract করার পর নিশ্চিত করুন:

- `/test_erp/config/.htaccess`
- `/test_erp/ui/js/erp_csrf.js`
- `/test_erp/api/_csrf_guard.php`

সঠিক জায়গায় আছে।

### 4. Login Page-এ এক লাইন যোগ
`/test_erp/ui/login.html` খুলে `</head>`-এর আগে যোগ করুন:

```html
<script src="js/erp_csrf.js"></script>
```

Login response-এর `X-CSRF-Token` header helper নিজে capture করবে। Login JavaScript-এর পুরনো fetch block পরিবর্তন বাধ্যতামূলক নয়।

### 5. পরবর্তী Write-capable UI Page
যে page থেকে Cash/Sale/Pawn/Stock add, update বা delete করা হয়, সেই HTML page-এর `</head>`-এর আগে একই script line যোগ করলে strict token protection কাজ করবে:

```html
<script src="js/erp_csrf.js"></script>
```

Script না-থাকা পুরনো same-origin page compatibility mode-এ চলবে; তাই Test ERP হঠাৎ বন্ধ হবে না।

## Verification

1. `/test_erp/config/config.php` → **403 Forbidden**
2. `/test_erp/migrations/` → **403 Forbidden**
3. `/test_erp/api/auth/csrf_token.php` → JSON token
4. Login সফল
5. Mobile data/Wi-Fi change করলেও session অকারণে logout না
6. Cash entry, Sale, Pawn, Stock-এর add/update পরীক্ষা
7. ভুল CSRF token পাঠালে HTTP **419**
8. Live ERP login/logout Test ERP session-কে প্রভাবিত না করে

## Rollback

কোনো সমস্যা হলে backup থেকে এই চারটি file আগে restore করুন:

- `config/session.php`
- `api/_core.php`
- `api/auth/login_action.php`
- `.htaccess`

DB rollback প্রয়োজন হলে migration file-এর নিচের ROLLBACK অংশ Test DB-তে চালান।
