756 lines
22 KiB
Text
756 lines
22 KiB
Text
{
|
|
"version": "1",
|
|
"name": "MockAPI Collection",
|
|
"type": "collection",
|
|
"variables": [
|
|
{
|
|
"name": "baseUrl",
|
|
"value": "http://localhost:8000",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "adminUsername",
|
|
"value": "admin",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "adminPassword",
|
|
"value": "admin123",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "clientId",
|
|
"value": "test_client",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "clientSecret",
|
|
"value": "test_secret",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "accessToken",
|
|
"value": "",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "authCode",
|
|
"value": "",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "refreshToken",
|
|
"value": "",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "endpointId",
|
|
"value": "",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "oauthClientId",
|
|
"value": "",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"items": [
|
|
{
|
|
"name": "Health Check",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/health",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Admin - Login",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/login",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "username",
|
|
"value": "{{adminUsername}}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "password",
|
|
"value": "{{adminPassword}}",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"req": "// This will set a session cookie automatically\nconsole.log('Login response headers:', req.headers);"
|
|
}
|
|
},
|
|
{
|
|
"name": "Mock Endpoints",
|
|
"type": "folder",
|
|
"items": [
|
|
{
|
|
"name": "List Endpoints",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/endpoints",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Create Mock Endpoint",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/endpoints",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "route",
|
|
"value": "/api/greeting/{name}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "method",
|
|
"value": "GET",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "response_body",
|
|
"value": "{\"message\": \"Hello, {{ name }}!\", \"timestamp\": \"{{ timestamp }}\"}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "response_code",
|
|
"value": "200",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "content_type",
|
|
"value": "application/json",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "is_active",
|
|
"value": "true",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "variables",
|
|
"value": "{}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "headers",
|
|
"value": "{}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "delay_ms",
|
|
"value": "0",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"res": "// Extract endpoint ID from response\nconst location = res.headers.location;\nif (location && location.includes('/admin/endpoints/')) {\n const match = location.match(/\\/admin\\/endpoints\\/(\\d+)/);\n if (match) {\n bruno.setVar('endpointId', match[1]);\n console.log('Endpoint ID saved:', match[1]);\n }\n}"
|
|
}
|
|
},
|
|
{
|
|
"name": "Call Mock Endpoint",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/api/greeting/World",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Call Mock Endpoint with Query",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/api/greeting/World?format=json",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Update Endpoint",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/endpoints/{{endpointId}}",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "route",
|
|
"value": "/api/greeting/{name}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "method",
|
|
"value": "GET",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "response_body",
|
|
"value": "{\"message\": \"Hello, {{ name }}! Welcome to MockAPI.\", \"timestamp\": \"{{ timestamp }}\"}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "response_code",
|
|
"value": "200",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "content_type",
|
|
"value": "application/json",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "is_active",
|
|
"value": "true",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "variables",
|
|
"value": "{}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "headers",
|
|
"value": "{}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "delay_ms",
|
|
"value": "100",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Delete Endpoint",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/endpoints/{{endpointId}}/delete",
|
|
"method": "POST",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "OAuth2",
|
|
"type": "folder",
|
|
"items": [
|
|
{
|
|
"name": "Create OAuth Client (via Admin)",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/oauth/clients",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "client_name",
|
|
"value": "Test Client",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "redirect_uris",
|
|
"value": "http://localhost:8080/callback,https://example.com/cb",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "grant_types",
|
|
"value": "authorization_code,client_credentials,refresh_token",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "scopes",
|
|
"value": "openid profile email api:read api:write",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "is_active",
|
|
"value": "true",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"res": "// Extract client ID from response\n// Note: In real usage, you'd get the client ID from the admin UI or API response\nconsole.log('Client created. Set clientId and clientSecret variables manually.');"
|
|
}
|
|
},
|
|
{
|
|
"name": "Client Credentials Grant",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/token",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"value": "Basic {{btoa(clientId + ':' + clientSecret)}}",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "grant_type",
|
|
"value": "client_credentials",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "scope",
|
|
"value": "api:read",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"res": "// Save access token\nif (res.status === 200) {\n const data = JSON.parse(res.body);\n bruno.setVar('accessToken', data.access_token);\n if (data.refresh_token) {\n bruno.setVar('refreshToken', data.refresh_token);\n }\n console.log('Access token saved:', data.access_token.substring(0, 20) + '...');\n}"
|
|
}
|
|
},
|
|
{
|
|
"name": "Authorization Code Grant - Step 1: Get Auth Code",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/authorize",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"params": [
|
|
{
|
|
"name": "response_type",
|
|
"value": "code",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "client_id",
|
|
"value": "{{clientId}}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "redirect_uri",
|
|
"value": "http://localhost:8080/callback",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "scope",
|
|
"value": "api:read openid",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "state",
|
|
"value": "xyz123",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"res": "// Extract authorization code from redirect location\n// Note: This requires manual extraction from the redirect URL\nconsole.log('Check redirect location header for authorization code');\nconst location = res.headers.location;\nif (location) {\n console.log('Redirect URL:', location);\n // In Bruno, you'd parse the URL to get the code\n}"
|
|
}
|
|
},
|
|
{
|
|
"name": "Authorization Code Grant - Step 2: Exchange Code for Token",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/token",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "grant_type",
|
|
"value": "authorization_code",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "code",
|
|
"value": "{{authCode}}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "redirect_uri",
|
|
"value": "http://localhost:8080/callback",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "client_id",
|
|
"value": "{{clientId}}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "client_secret",
|
|
"value": "{{clientSecret}}",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"res": "// Save tokens\nif (res.status === 200) {\n const data = JSON.parse(res.body);\n bruno.setVar('accessToken', data.access_token);\n if (data.refresh_token) {\n bruno.setVar('refreshToken', data.refresh_token);\n }\n console.log('Access token saved:', data.access_token.substring(0, 20) + '...');\n}"
|
|
}
|
|
},
|
|
{
|
|
"name": "Refresh Token Grant",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/token",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "grant_type",
|
|
"value": "refresh_token",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "refresh_token",
|
|
"value": "{{refreshToken}}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "client_id",
|
|
"value": "{{clientId}}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "client_secret",
|
|
"value": "{{clientSecret}}",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
},
|
|
"script": {
|
|
"res": "// Save new tokens\nif (res.status === 200) {\n const data = JSON.parse(res.body);\n bruno.setVar('accessToken', data.access_token);\n if (data.refresh_token) {\n bruno.setVar('refreshToken', data.refresh_token);\n }\n console.log('New access token saved:', data.access_token.substring(0, 20) + '...');\n}"
|
|
}
|
|
},
|
|
{
|
|
"name": "User Info",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/userinfo",
|
|
"method": "GET",
|
|
"headers": [
|
|
{
|
|
"name": "Authorization",
|
|
"value": "Bearer {{accessToken}}",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Token Introspection",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/introspect",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"value": "Basic {{btoa(clientId + ':' + clientSecret)}}",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "token",
|
|
"value": "{{accessToken}}",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Token Revocation",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/oauth/revoke",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "Authorization",
|
|
"value": "Basic {{btoa(clientId + ':' + clientSecret)}}",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "token",
|
|
"value": "{{accessToken}}",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "OpenID Connect Discovery",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/.well-known/openid-configuration",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Admin OAuth Management",
|
|
"type": "folder",
|
|
"items": [
|
|
{
|
|
"name": "List OAuth Clients",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/oauth/clients",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "List OAuth Tokens",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/oauth/tokens",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "List OAuth Users",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/oauth/users",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "Protected Endpoint Example",
|
|
"type": "folder",
|
|
"items": [
|
|
{
|
|
"name": "Create OAuth-Protected Endpoint",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/admin/endpoints",
|
|
"method": "POST",
|
|
"headers": [
|
|
{
|
|
"name": "Content-Type",
|
|
"value": "application/x-www-form-urlencoded",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {
|
|
"mode": "urlencoded",
|
|
"urlencoded": [
|
|
{
|
|
"name": "route",
|
|
"value": "/api/protected/data",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "method",
|
|
"value": "GET",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "response_body",
|
|
"value": "{\"data\": \"This is protected data\", \"timestamp\": \"{{ timestamp }}\"}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "response_code",
|
|
"value": "200",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "content_type",
|
|
"value": "application/json",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "is_active",
|
|
"value": "true",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "requires_oauth",
|
|
"value": "true",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "oauth_scopes",
|
|
"value": "[\"api:read\"]",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "variables",
|
|
"value": "{}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "headers",
|
|
"value": "{}",
|
|
"enabled": true
|
|
},
|
|
{
|
|
"name": "delay_ms",
|
|
"value": "0",
|
|
"enabled": true
|
|
}
|
|
]
|
|
},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Call Protected Endpoint (Unauthorized)",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/api/protected/data",
|
|
"method": "GET",
|
|
"headers": [],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
},
|
|
{
|
|
"name": "Call Protected Endpoint (Authorized)",
|
|
"type": "http",
|
|
"request": {
|
|
"url": "{{baseUrl}}/api/protected/data",
|
|
"method": "GET",
|
|
"headers": [
|
|
{
|
|
"name": "Authorization",
|
|
"value": "Bearer {{accessToken}}",
|
|
"enabled": true
|
|
}
|
|
],
|
|
"body": {},
|
|
"auth": {}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|