Dispatching responses from a Virtual Service
Question Create a REST virtual service with the "GET /login"resource and add adispatching script, which returns different responses based on the values of query parameters (grant_type, username and password). A sample request: http://localhost:<VIRT_PORT>/login?grant_type=password&username=test&password=Test123! The dispatching condition: Ifgrant_typeis not equal to "password", the virt returns the "Unsupported Grant Type" response (HTTP status code is 401, body is {"error": "Unsupported Grant Type"}). Ifgrant_typeis equal to "password", but the username is not equal to "test" OR the password doesn't comply with the strength requirements (the minimal length is 8 characters, the password contains at least one uppercase letter, one lowercase letter, one number and one symbol) the virt returns the "Invalid Login Info" response (HTTP status code is 401, body is {"error": "Invalid Username or Password"}). If some parameters are missing, the virt returns the "Bad Request" response (HTTP state code is 400, body is {"error":"required parameters are missed"}) If all the parameters have valid values, the virt returns the "OK" response (HTTP status code is 200, body is {"result":"ok"}). Answer Here is a scriptthat dispatches responses The idea behind it is pretty simple namely creating one operation, 4 responses and setting the dispatch style to script.The code I used is attached below: // Get the full query string def queryString = mockRequest.getRequest().getQueryString() // Get the password index in the query string def passwordIndex = queryString.indexOf("password=") + 9 // Cut out the password starting with the previously obtained index def pass = queryString.substring(passwordIndex) // If there are more parameters after the password rule them out if (pass.contains("&")) pass = pass.substring(0, pass.indexOf("&")) /** * Start dispatching responses */ if( !queryString.contains("grant_type=") || !queryString.contains("username=") || !queryString.contains("password=") ) { // Return a bad request return "BadRequest" } else if ( !queryString.contains("grant_type=password")) { // Return an unsupported grant type response return "UnsupportedGrantType" } else if ( !queryString.contains("username=test") || !checkPasswordComplexity(pass)) { // Return invalid credentials return "InvalidCredentials" } else { return "Success" } // Methods definition def checkPasswordComplexity(String password) { if (password ==~ /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}/) return true else return false }425Views0likes0Comments