File: //home/arjun/projects/aigenerator/venv/lib64/python3.12/site-packages/social_core/backends/slack.py
"""
Slack OAuth2 backend, docs at:
https://python-social-auth.readthedocs.io/en/latest/backends/slack.html
https://api.slack.com/docs/oauth
"""
from .oauth import BaseOAuth2
class SlackOAuth2(BaseOAuth2):
"""Slack OAuth authentication backend"""
name = "slack"
AUTHORIZATION_URL = "https://slack.com/oauth/authorize"
ACCESS_TOKEN_URL = "https://slack.com/api/oauth.access"
ACCESS_TOKEN_METHOD = "POST"
DEFAULT_SCOPE = ["identity.basic", "identity.email"]
SCOPE_SEPARATOR = ","
REDIRECT_STATE = False
EXTRA_DATA = [("id", "id"), ("name", "name"), ("real_name", "real_name")]
def auth_extra_arguments(self):
params = super().auth_extra_arguments() or {}
if self.setting("TEAM"):
params["team"] = self.setting("TEAM")
return params
def get_user_details(self, response):
"""Return user details from Slack account"""
# Build the username with the team $username@$team_url
# Necessary to get unique names for all of slack
user = response["user"]
team = response.get("team")
name = user["name"]
email = user.get("email")
username = email and email.split("@", 1)[0] or name
fullname, first_name, last_name = self.get_user_names(name)
if self.setting("USERNAME_WITH_TEAM", True) and team and "name" in team:
username = "{}@{}".format(username, response["team"]["name"])
return {
"username": username,
"email": email,
"fullname": fullname,
"first_name": first_name,
"last_name": last_name,
}
def user_data(self, access_token, *args, **kwargs):
"""Loads user data from service"""
response = self.get_json(
"https://slack.com/api/users.identity",
headers={"Authorization": "Bearer %s" % access_token},
)
if not response.get("id", None):
response["id"] = response["user"]["id"]
return response