(
self, response: httpclient.HTTPResponse
)
| 215 | return args |
| 216 | |
| 217 | def _on_authentication_verified( |
| 218 | self, response: httpclient.HTTPResponse |
| 219 | ) -> Dict[str, Any]: |
| 220 | handler = cast(RequestHandler, self) |
| 221 | if re.search(rb"(?m)^is_valid:true$", response.body) is None: |
| 222 | raise AuthError("Invalid OpenID response: %r" % response.body) |
| 223 | |
| 224 | # Make sure we got back at least an email from attribute exchange |
| 225 | ax_ns = None |
| 226 | for key in handler.request.arguments: |
| 227 | if ( |
| 228 | key.startswith("openid.ns.") |
| 229 | and handler.get_argument(key) == "http://openid.net/srv/ax/1.0" |
| 230 | ): |
| 231 | ax_ns = key[10:] |
| 232 | break |
| 233 | |
| 234 | def get_ax_arg(uri: str) -> str: |
| 235 | if not ax_ns: |
| 236 | return "" |
| 237 | prefix = "openid." + ax_ns + ".type." |
| 238 | ax_name = None |
| 239 | for name in handler.request.arguments.keys(): |
| 240 | if handler.get_argument(name) == uri and name.startswith(prefix): |
| 241 | part = name[len(prefix) :] |
| 242 | ax_name = "openid." + ax_ns + ".value." + part |
| 243 | break |
| 244 | if not ax_name: |
| 245 | return "" |
| 246 | return handler.get_argument(ax_name, "") |
| 247 | |
| 248 | email = get_ax_arg("http://axschema.org/contact/email") |
| 249 | name = get_ax_arg("http://axschema.org/namePerson") |
| 250 | first_name = get_ax_arg("http://axschema.org/namePerson/first") |
| 251 | last_name = get_ax_arg("http://axschema.org/namePerson/last") |
| 252 | username = get_ax_arg("http://axschema.org/namePerson/friendly") |
| 253 | locale = get_ax_arg("http://axschema.org/pref/language").lower() |
| 254 | user = dict() |
| 255 | name_parts = [] |
| 256 | if first_name: |
| 257 | user["first_name"] = first_name |
| 258 | name_parts.append(first_name) |
| 259 | if last_name: |
| 260 | user["last_name"] = last_name |
| 261 | name_parts.append(last_name) |
| 262 | if name: |
| 263 | user["name"] = name |
| 264 | elif name_parts: |
| 265 | user["name"] = " ".join(name_parts) |
| 266 | elif email: |
| 267 | user["name"] = email.split("@")[0] |
| 268 | if email: |
| 269 | user["email"] = email |
| 270 | if locale: |
| 271 | user["locale"] = locale |
| 272 | if username: |
| 273 | user["username"] = username |
| 274 | claimed_id = handler.get_argument("openid.claimed_id", None) |
no test coverage detected