104 def authenticate(self, configurationAttributes, requestParameters, step):
105 identity = CdiUtil.bean(Identity)
106 credentials = identity.getCredentials()
108 user_name = credentials.getUsername()
110 userService = CdiUtil.bean(UserService)
111 authenticationService = CdiUtil.bean(AuthenticationService)
114 print "Cert. Authenticate for step 1" 115 login_button = ServerUtil.getFirstValue(requestParameters,
"loginForm:loginButton")
116 if StringHelper.isEmpty(login_button):
117 print "Cert. Authenticate for step 1. Form were submitted incorrectly" 119 if self.enabled_recaptcha:
120 print "Cert. Authenticate for step 1. Validating recaptcha response" 121 recaptcha_response = ServerUtil.getFirstValue(requestParameters,
"g-recaptcha-response")
123 recaptcha_result = self.validateRecaptcha(recaptcha_response)
124 print "Cert. Authenticate for step 1. recaptcha_result: '%s'" % recaptcha_result
126 return recaptcha_result
130 print "Cert. Authenticate for step 2" 133 cert_x509 = self.getSessionAttribute(
"cert_x509")
134 if cert_x509 ==
None:
135 print "Cert. Authenticate for step 2. User not selected any certs" 136 identity.setWorkingParameter(
"cert_selected",
False)
141 identity.setWorkingParameter(
"cert_selected",
True)
142 x509Certificate = self.certFromString(cert_x509)
144 subjectX500Principal = x509Certificate.getSubjectX500Principal()
145 print "Cert. Authenticate for step 2. User selected certificate with DN '%s'" % subjectX500Principal
148 valid = self.validateCertificate(x509Certificate)
150 print "Cert. Authenticate for step 2. Certificate DN '%s' is not valid" % subjectX500Principal
151 identity.setWorkingParameter(
"cert_valid",
False)
156 identity.setWorkingParameter(
"cert_valid",
True)
159 x509CertificateFingerprint = self.calculateCertificateFingerprint(x509Certificate)
160 identity.setWorkingParameter(
"cert_x509_fingerprint", x509CertificateFingerprint)
161 print "Cert. Authenticate for step 2. Fingerprint is '%s' of certificate with DN '%s'" % (x509CertificateFingerprint, subjectX500Principal)
164 cert_user_external_uid =
"cert:%s" % x509CertificateFingerprint
165 print "Cert. Authenticate for step 2. Attempting to find user by oxExternalUid attribute value %s" % cert_user_external_uid
167 find_user_by_external_uid = userService.getUserByAttribute(
"oxExternalUid", cert_user_external_uid)
168 if find_user_by_external_uid ==
None:
169 print "Cert. Authenticate for step 2. Failed to find user" 171 if self.map_user_cert:
172 print "Cert. Authenticate for step 2. Storing cert_user_external_uid for step 3" 173 identity.setWorkingParameter(
"cert_user_external_uid", cert_user_external_uid)
176 print "Cert. Authenticate for step 2. Mapping cert to user account is not allowed" 177 identity.setWorkingParameter(
"cert_count_login_steps", 2)
180 foundUserName = find_user_by_external_uid.getUserId()
181 print "Cert. Authenticate for step 2. foundUserName: " + foundUserName
184 userService = CdiUtil.bean(UserService)
185 logged_in = authenticationService.authenticate(foundUserName)
187 print "Cert. Authenticate for step 2. Setting count steps to 2" 188 identity.setWorkingParameter(
"cert_count_login_steps", 2)
192 print "Cert. Authenticate for step 3" 194 cert_user_external_uid = self.getSessionAttribute(
"cert_user_external_uid")
195 if cert_user_external_uid ==
None:
196 print "Cert. Authenticate for step 3. cert_user_external_uid is empty" 199 user_password = credentials.getPassword()
202 if (StringHelper.isNotEmptyString(user_name)
and StringHelper.isNotEmptyString(user_password)):
203 logged_in = authenticationService.authenticate(user_name, user_password)
211 find_user_by_external_uid = userService.getUserByAttribute(
"oxExternalUid", cert_user_external_uid)
212 if find_user_by_external_uid ==
None:
214 find_user_by_external_uid = userService.addUserAttribute(user_name,
"oxExternalUid", cert_user_external_uid)
215 if find_user_by_external_uid ==
None:
216 print "Cert. Authenticate for step 3. Failed to update current user"