def handle(self, request): username = request.form[IdpConstants.USERNAME] # create dictionary containing user attributes idp_user_attributes = dict.get(IdpSampleUserLoader.get_user(username), "attributes") idp_user_attributes.update({IdpConstants.SUBJECT: username}) idp_user_attributes.update({ IdpConstants.AUTH_INST: datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S") }) # Drop the attributes into PingFederate dropoff_location = UrlUtil.dropoff_url() username = ConfigurationManager.get_configuration( IdpConstants.ADAPTER_USERNAME) password = ConfigurationManager.get_configuration( IdpConstants.ADAPTER_PASSWORD) headers = { "Content-type": "application/json", IdpConstants.PING_ADAPTER_HEADER: ConfigurationManager.get_configuration(IdpConstants.ADAPTER_ID) } # For simplicity, trust any certificate. Do not use in production. response = requests.post(dropoff_location, json=idp_user_attributes, auth=(username, password), headers=headers, verify=False) response_dict = json.loads(response.text) response_json = json.dumps(response.json(), indent=4) idp_user_attributes = json.dumps(idp_user_attributes, indent=4) return render_template( 'Dropoff.html', resumePath=request.form[IdpConstants.RESUME_PATH], resumeUrl=UrlUtil.resume_url(request), REF=response_dict[IdpConstants.REF], configureUrl=UrlUtil.configure_url(request), userAttributes=idp_user_attributes, httpStatus=ReferenceAdapterUtil.http_status(response.status_code), dropoffEndpoint=IdpConstants.DROPOFF_ENDPOINT, ssoUrl=UrlUtil.sso_url(), rawRequest=ReferenceAdapterUtil.dropoff_post(idp_user_attributes), rawResponse=ReferenceAdapterUtil.session_response( response.headers, response_json))
def handle(self, request): if request.method == 'GET': return render_template( 'Configuration.html', configurationError=None, configureUrl=UrlUtil.configure_url(request), basePfUrlName=IdpConstants.BASE_PF_URL, basePfUrl=ConfigurationManager.get_configuration( IdpConstants.BASE_PF_URL), adapterUsernameName=IdpConstants.ADAPTER_USERNAME, adapterUsername=ConfigurationManager.get_configuration( IdpConstants.ADAPTER_USERNAME), adapterPassphraseName=IdpConstants.ADAPTER_PASSWORD, adapterPassphrase=ConfigurationManager.get_configuration( IdpConstants.ADAPTER_PASSWORD), adapterIdName=IdpConstants.ADAPTER_ID, adapterId=ConfigurationManager.get_configuration( IdpConstants.ADAPTER_ID), targetUrlName=IdpConstants.TARGET_URL, targetUrl=ConfigurationManager.get_configuration( IdpConstants.TARGET_URL), partnerIdName=IdpConstants.PARTNER_ENTITY_ID, partnerId=ConfigurationManager.get_configuration( IdpConstants.PARTNER_ENTITY_ID)) else: try: ConfigurationManager.save_configuration(request) ConfigurationManager.load_configuration() return redirect(UrlUtil.sso_url(), code=302) except Exception as e: return render_template( 'Configuration.html', configurationError=e, configureUrl=UrlUtil.configure_url(request), basePfUrlName=IdpConstants.BASE_PF_URL, basePfUrl=request.form[IdpConstants.BASE_PF_URL], adapterUsernameName=IdpConstants.ADAPTER_USERNAME, adapterUsername=request.form[ IdpConstants.ADAPTER_USERNAME], adapterPassphraseName=IdpConstants.ADAPTER_PASSWORD, adapterPassphrase=request.form[ IdpConstants.ADAPTER_PASSWORD], adapterIdName=IdpConstants.ADAPTER_ID, adapterId=request.form[IdpConstants.ADAPTER_ID], targetUrlName=IdpConstants.TARGET_URL, targetUrl=request.form[IdpConstants.TARGET_URL], partnerIdName=IdpConstants.PARTNER_ENTITY_ID, partnerId=request.form[IdpConstants.PARTNER_ENTITY_ID])
def pickup_request(reference_id): username = ConfigurationManager.get_configuration( IdpConstants.ADAPTER_USERNAME) password = ConfigurationManager.get_configuration( IdpConstants.ADAPTER_PASSWORD) return "GET " + UrlUtil.pickup_url(reference_id) + "\n" \ + IdpConstants.PING_ADAPTER_HEADER + ": " \ + ConfigurationManager.get_configuration(IdpConstants.ADAPTER_ID) + "\n" \ + "Authentication: " + base64.b64encode((username + ":" + password).encode('ascii')).decode('ascii')
def pickup_attributes(reference_value): # Pickup the attributes from PingFederate pickup_location = UrlUtil.pickup_url(reference_value) username = ConfigurationManager.get_configuration(IdpConstants.ADAPTER_USERNAME) password = ConfigurationManager.get_configuration(IdpConstants.ADAPTER_PASSWORD) headers = { IdpConstants.PING_ADAPTER_HEADER: ConfigurationManager.get_configuration(IdpConstants.ADAPTER_ID) } # For simplicity, trust any certificate. Do not use in production. return requests.get(pickup_location, headers=headers, auth=(username, password), verify=False)
def handle(self, request): if request.method == 'POST': if Authenticator.authenticate(request.form[IdpConstants.USERNAME], request.form[IdpConstants.PASSWORD]): return DropoffController().handle(request) else: return render_template( 'Login.html', showData=None, loginError="Invalid Login.", resumePath=request.form[IdpConstants.RESUME_PATH]) else: return redirect(UrlUtil.sso_url(), code=302)
def handle(self, request): if request.method == 'POST': reference_value = request.form[IdpConstants.REF] response = PickupUtil.pickup_attributes(reference_value) response_json = json.dumps(response.json(), indent=4) return render_template('Logout.html', resumeUrl=UrlUtil.resume_logout_url(request, reference_value), resumePath=request.form['resumePath'], ssoUrl=UrlUtil.sso_url(), httpStatus=ReferenceAdapterUtil.http_status(response.status_code), REF=reference_value, pickupEndpoint=IdpConstants.PICKUP_ENDPOINT, configureUrl=UrlUtil.configure_url(request), responseBody=response_json, rawRequest=ReferenceAdapterUtil.pickup_request(reference_value), rawResponse=ReferenceAdapterUtil.session_response(response.headers, response_json)) else: return render_template('Error.html', configureUrl=UrlUtil.configure_url(request), ssoUrl=UrlUtil.sso_url())
def dropoff_post(user_attributes): username = ConfigurationManager.get_configuration( IdpConstants.ADAPTER_USERNAME) password = ConfigurationManager.get_configuration( IdpConstants.ADAPTER_PASSWORD) return "POST " + UrlUtil.dropoff_url() + "\n" \ + "Content-Type: application/json\n" \ + "Content-Length: " + str(len(user_attributes)) + "\n" \ + IdpConstants.PING_ADAPTER_HEADER + ": " \ + ConfigurationManager.get_configuration(IdpConstants.ADAPTER_ID) + "\n" \ + "Authentication: " + base64.b64encode((username + ":" + password).encode('ascii')).decode('ascii') + "\n" \ + "\n" \ + user_attributes
def handle(self, request): if request.method == 'POST': reference_value = request.form[IdpConstants.REF] response = PickupUtil.pickup_attributes(reference_value) response_json = json.dumps(response.json(), indent=4) return render_template( 'Login.html', resumePath=request.form[IdpConstants.RESUME_PATH], REF=reference_value, responseBody=response_json, pickupEndpoint=IdpConstants.PICKUP_ENDPOINT, configureUrl=UrlUtil.configure_url(request), loginUrl=UrlUtil.login_url(request), httpStatus=ReferenceAdapterUtil.http_status( response.status_code), rawRequest=ReferenceAdapterUtil.pickup_request( reference_value), rawResponse=ReferenceAdapterUtil.session_response( response.headers, response_json), loginError=None) else: return redirect(UrlUtil.sso_url(), code=302)
def handle(self, request): return redirect(UrlUtil.resume_to_pf_url(request), code=302)