def url = parameters.get('url') def email = inargs['userInputValue_prompt.email'] def token = inargs['captcha_response']?: 'MISSING' def ip = request.getLoginContext()['connection.HttpHeader.X-Real-IP'] ?: 'unknown' def userAgent = request.getLoginContext()['connection.HttpHeader.user-agent'] ?: request.getLoginContext()['connection.HttpHeader.User-Agent'] ?: 'unknown' def payload = "{ \"userIp\": \"${ip}\", \"email\": \"${email}\", \"userAgent\": \"${userAgent}\" }" LOG.debug('Token: ' + token) LOG.debug('Payload: ' + payload) try { def httpClient = HttpClients.create(parameters) def httpResponse = Http.post() .url(url) .header("Accept", "application/json") .header("X-FriendlyCAPTCHA-Token", token) .entity(Http.entity() .content(payload) .contentType("application/json") .build()) .build() .send(httpClient) LOG.debug('Response Message: ' + httpResponse.reasonPhrase()) LOG.debug('Response Status Code: ' + httpResponse.code()) LOG.debug('Response: ' + httpResponse.bodyAsString()) if (httpResponse.code() == 200) { if (httpResponse.bodyAsString().contains('SUCCESSFUL')) { response.setResult('ok') return } else { LOG.warn("Friendly captcha not successful for '{ \"userIp\": \"${ip}\", \"email\": \"${email}\", \"userAgent\": \"${userAgent}\" }'") response.setResult('exit.1') return } } else { LOG.error("Friendly captcha failed with statuscode ${httpResponse.code()} for '{ \"userIp\": \"${ip}\", \"email\": \"${email}\", \"userAgent\": \"${userAgent}\" }'") response.setResult('error') response.setError(1, 'Unexpected HTTP reponse') } } catch (all) { // Handle exception and set the transition LOG.error("Friendly captcha failed with a general error '${all}' for '{ \"userIp\": \"${ip}\", \"email\": \"${email}\", \"userAgent\": \"${userAgent}\" }', service-url: ${url}") response.setResult('error') response.setError(1, 'Exception during HTTP call') } // TODO/haburger/2024-AUG-20: remove if reCaptcha is not needed anymore // // def payload = '{ "email": "' + inargs['userInputValue_prompt.email'] + '", "action": "LOGIN", "userIp": "' + ip + '", "userAgent": "' + userAgent + '"}' // // LOG.info('Token: ' + inargs['recaptcha_response']) // LOG.info('Integration: ' + session['agov.fido2.X-ReCAPTCHA-Integration']) // LOG.info('Payload: ' + payload) // // try { // // def httpClient = HttpClients.create(parameters) // def httpResponse = Http.post() // .url(url) // .header("Accept", "application/json") // .header("X-ReCAPTCHA-Token", inargs['recaptcha_response']) // .header("X-ReCAPTCHA-Integration", session['agov.fido2.X-ReCAPTCHA-Integration']) // .entity(Http.entity() // .content(payload) // .contentType("application/json") // .build()) // .build() // .send(httpClient) // // LOG.info('Response Message: ' + httpResponse.reasonPhrase()) // LOG.info('Response Status Code: ' + httpResponse.code()) // LOG.info('Response: ' + httpResponse.bodyAsString()) // // if (httpResponse.code() == 200) { // if (httpResponse.bodyAsString().contains('SUCCESSFUL')) { // response.setResult('ok') // return // } else { // // response.setSessionAttribute('agov.fido2.X-ReCAPTCHA-Integration', 'VISIBLE') // response.setResult('exit.1') // return // } // } else { // LOG.error('Unexcpected HTTP response code: ' + httpResponse.code()) // response.setResult('error') // response.setError(1, 'Unexpected HTTP reponse') // } // } catch (all) { // // Handle exception and set the transition // LOG.error('error: ' + all, all) // response.setResult('error') // response.setError(1, 'Exception during HTTP call') // }