{ "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": {} } } ] } ] }