File: //home/arjun/projects/aigenerator/venv/lib/python3.12/site-packages/social_core/backends/cilogon.py
from .oauth import BaseOAuth2
class CILogonOAuth2(BaseOAuth2):
"""
CI Logon Authentication Backend
Docs: https://www.cilogon.org/oidc
"""
name = "cilogon-oauth2"
AUTHORIZATION_URL = "https://cilogon.org/authorize"
ACCESS_TOKEN_URL = "https://cilogon.org/oauth2/token"
ACCESS_TOKEN_METHOD = "POST"
DEFAULT_SCOPE = ["openid", "email", "profile", "org.cilogon.userinfo"]
REDIRECT_STATE = False
SCOPE_SEPARATOR = "+"
def user_data(self, token, *args, **kwargs):
"""Loads user data from endpoint"""
url = "https://cilogon.org/oauth2/userinfo"
data = {"access_token": token}
try:
return self.get_json(url, method="POST", data=data)
except ValueError:
return None
def get_user_id(self, details, response):
"""Return user unique id provided by service
In this case it is a combination of the `sub`
and `iss` respective values."""
return response.get("sub", "") + " " + response.get("iss", "")
def get_user_details(self, response):
"""Return user details from CI Logon service"""
fullname, first_name, last_name = self.get_user_names(
first_name=response.get("given_name"), last_name=response.get("family_name")
)
return {
"username": response.get("email"),
"email": response.get("email"),
"fullname": fullname,
"first_name": first_name,
"last_name": last_name,
}