This commit is contained in:
Dhananjaya99
2026-07-08 11:11:50 +05:30
parent 2cd2741f77
commit de7b40a147
51 changed files with 6839 additions and 0 deletions
+743
View File
@@ -0,0 +1,743 @@
{
"info": {
"name": "AuthHex Client API Collection",
"description": "Web client authentication flow - Email OTP registration and password login",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
"_postman_id": "auth-hex-client-api-collection",
"version": "1.0.0"
},
"variable": [
{
"key": "baseUrl",
"value": "https://localhost:7001/api",
"description": "Base URL for AuthHex API"
},
{
"key": "accessToken",
"value": "",
"description": "JWT Access Token - set automatically after login"
},
{
"key": "refreshToken",
"value": "",
"description": "JWT Refresh Token - set automatically after login"
},
{
"key": "email",
"value": "user@example.com",
"description": "Email for testing"
},
{
"key": "referenceNumber",
"value": "",
"description": "OTP Reference Number - set automatically"
}
],
"item": [
{
"name": "Health Check",
"item": [
{
"name": "API Status",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "{{baseUrl}}/status",
"host": ["{{baseUrl}}"],
"path": ["status"]
},
"description": "Check if API is running"
},
"response": []
}
]
},
{
"name": "Client Registration Flow",
"item": [
{
"name": "Step 1: Check Email Availability",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"isAvailable\",\n \"payload\": {\n \"Identifier\": \"{{email}}\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/alt",
"host": ["{{baseUrl}}"],
"path": ["alt"]
},
"description": "Check if email is available for registration"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.data && jsonData.data.IsAvailable) {",
" pm.environment.set('emailAvailable', true);",
" console.log('Email is available');",
"} else {",
" console.log('Email already exists');",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Step 2: Send Email OTP (New User)",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"sendOtp\",\n \"payload\": {\n \"identifier\": \"{{email}}\",\n \"numberOfDigits\": 6,\n \"newUser\": true\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/alt",
"host": ["{{baseUrl}}"],
"path": ["alt"]
},
"description": "Send OTP to email for new user registration"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.data && jsonData.data.Data && jsonData.data.Data.ReferenceNumber) {",
" pm.environment.set('referenceNumber', jsonData.data.Data.ReferenceNumber);",
" console.log('Email OTP Reference: ' + jsonData.data.Data.ReferenceNumber);",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Step 3: Verify Email OTP (New User)",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"VerifyOTP\",\n \"payload\": {\n \"referenceNumber\": \"{{referenceNumber}}\",\n \"otpCode\": \"123456\",\n \"newUser\": true,\n \"identifier\": \"{{email}}\",\n \"deviceName\": \"Chrome Desktop\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/alt",
"host": ["{{baseUrl}}"],
"path": ["alt"]
},
"description": "Verify email OTP for new user registration. Returns verification token."
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.data && jsonData.data.verificationToken) {",
" pm.environment.set('verificationToken', jsonData.data.verificationToken);",
" console.log('Email OTP Verified - Registration can proceed');",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Step 4: Complete Registration",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"registerUser\",\n \"payload\": {\n \"fullName\": \"Alice Johnson\",\n \"userName\": \"alicejohnson\",\n \"email\": \"{{email}}\",\n \"nic\": \"199612345679\",\n \"password\": \"SecureClientPass123!\",\n \"roleId\": \"00000000-0000-0000-0000-000000000001\",\n \"userTypeId\": \"00000000-0000-0000-0000-000000000001\",\n \"chkUser\": false\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Complete user registration with verified email"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.statusCode === 200) {",
" console.log('Client user registered successfully');",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Alternative: Direct Registration",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"fullName\": \"Bob Williams\",\n \"userName\": \"bobwilliams\",\n \"email\": \"bob.williams@example.com\",\n \"nic\": \"199712345678\",\n \"password\": \"SecureClientPass123!\",\n \"roleId\": \"00000000-0000-0000-0000-000000000001\",\n \"userTypeId\": \"00000000-0000-0000-0000-000000000001\",\n \"chkUser\": true\n}"
},
"url": {
"raw": "{{baseUrl}}/registerUser",
"host": ["{{baseUrl}}"],
"path": ["registerUser"]
},
"description": "Direct registration endpoint - bypasses OTP verification"
},
"response": []
}
]
},
{
"name": "Client Login Flow",
"item": [
{
"name": "Login with Email/Username & Password",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"identifier\": \"{{email}}\",\n \"password\": \"SecureClientPass123!\",\n \"deviceName\": \"Chrome Desktop\"\n}"
},
"url": {
"raw": "{{baseUrl}}/loginUser",
"host": ["{{baseUrl}}"],
"path": ["loginUser"]
},
"description": "Login with email/username and password - returns JWT tokens"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.data && jsonData.data.AccessToken) {",
" pm.environment.set('accessToken', jsonData.data.AccessToken);",
" pm.environment.set('refreshToken', jsonData.data.RefreshToken);",
" console.log('Login successful - Tokens saved');",
"} else if (jsonData.data && jsonData.data.RequiresTwoFA) {",
" console.log('2FA Required - Use Verify 2FA endpoint');",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Alternative: Login via /user endpoint",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"loginUser\",\n \"payload\": {\n \"identifier\": \"{{email}}\",\n \"password\": \"SecureClientPass123!\",\n \"deviceName\": \"Chrome Desktop\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Alternative login using the generic /user endpoint"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.data && jsonData.data.AccessToken) {",
" pm.environment.set('accessToken', jsonData.data.AccessToken);",
" pm.environment.set('refreshToken', jsonData.data.RefreshToken);",
" console.log('Login successful - Tokens saved');",
"}"
],
"type": "text/javascript"
}
}
]
}
]
},
{
"name": "Authenticated Client Operations",
"item": [
{
"name": "Get User Details",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"getUserDetails\",\n \"payload\": {}\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Get authenticated user details"
},
"response": []
},
{
"name": "Get User Sessions",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"getUserSessions\",\n \"payload\": {}\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Get all active sessions for the user"
},
"response": []
},
{
"name": "Change Password",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"ChangeUserPassword\",\n \"payload\": {\n \"currentPassword\": \"SecureClientPass123!\",\n \"newPassword\": \"NewSecureClientPass456!\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Change user password"
},
"response": []
},
{
"name": "Change User Status",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"ChangeUserStatus\",\n \"payload\": {\n \"isActive\": true\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Enable or disable user account"
},
"response": []
},
{
"name": "Logout",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"LogoutUser\",\n \"payload\": {}\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Logout user and invalidate current session"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.environment.unset('accessToken');",
"pm.environment.unset('refreshToken');",
"console.log('Logged out - Tokens cleared');"
],
"type": "text/javascript"
}
}
]
}
]
},
{
"name": "Password Recovery",
"item": [
{
"name": "Step 1: Request Password Reset (Forgot Password)",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"identifier\": \"{{email}}\"\n}"
},
"url": {
"raw": "{{baseUrl}}/forgotPassword",
"host": ["{{baseUrl}}"],
"path": ["forgotPassword"]
},
"description": "Request password reset - sends OTP to registered email/mobile"
},
"response": [],
"event": [
{
"listen": "test",
"script": {
"exec": [
"var jsonData = pm.response.json();",
"if (jsonData.data && jsonData.data.ReferenceNumber) {",
" pm.environment.set('referenceNumber', jsonData.data.ReferenceNumber);",
" console.log('Reset OTP Reference: ' + jsonData.data.ReferenceNumber);",
"}"
],
"type": "text/javascript"
}
}
]
},
{
"name": "Step 2: Verify Reset OTP",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"VerifyForgotPasswordOTP\",\n \"payload\": {\n \"referenceNumber\": \"{{referenceNumber}}\",\n \"otpCode\": \"123456\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/recovery",
"host": ["{{baseUrl}}"],
"path": ["recovery"]
},
"description": "Verify OTP for password reset"
},
"response": []
},
{
"name": "Step 3: Reset Password",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"ResetPassword\",\n \"payload\": {\n \"referenceNumber\": \"{{referenceNumber}}\",\n \"newPassword\": \"MyNewPassword123!\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/recovery",
"host": ["{{baseUrl}}"],
"path": ["recovery"]
},
"description": "Set new password using verified OTP reference"
},
"response": []
}
]
},
{
"name": "Two-Factor Authentication (Client)",
"item": [
{
"name": "Initiate 2FA Setup",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"initiateTwoFASetup\",\n \"payload\": {}\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Get QR code and secret for Google Authenticator setup"
},
"response": []
},
{
"name": "Complete 2FA Setup",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"completeTwoFASetup\",\n \"payload\": {\n \"verificationCode\": \"123456\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Verify and complete 2FA setup"
},
"response": []
},
{
"name": "Verify 2FA Code (During Login)",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"verifyTwoFA\",\n \"payload\": {\n \"code\": \"123456\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Verify 2FA code during login for accounts with 2FA enabled"
},
"response": []
},
{
"name": "Get 2FA Status",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"getTwoFAStatus\",\n \"payload\": {}\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Check if 2FA is enabled for user"
},
"response": []
},
{
"name": "Disable 2FA",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
},
{
"key": "Authorization",
"value": "Bearer {{accessToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"disableTwoFA\",\n \"payload\": {\n \"password\": \"SecureClientPass123!\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/user",
"host": ["{{baseUrl}}"],
"path": ["user"]
},
"description": "Disable 2FA for user account (requires password confirmation)"
},
"response": []
}
]
},
{
"name": "Utility Functions",
"item": [
{
"name": "Check Identifier Availability",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/json"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"functionName\": \"isAvailable\",\n \"payload\": {\n \"Identifier\": \"testuser@example.com\"\n }\n}"
},
"url": {
"raw": "{{baseUrl}}/alt",
"host": ["{{baseUrl}}"],
"path": ["alt"]
},
"description": "Check if email, username, NIC, or mobile number is already registered"
},
"response": []
}
]
}
],
"auth": {
"type": "bearer",
"bearer": [
{
"key": "token",
"value": "{{accessToken}}",
"type": "string"
}
]
}
}