diff --git a/.github/ISSUE_TEMPLATE/2_bug_provider.yml b/.github/ISSUE_TEMPLATE/2_bug_provider.yml index 8a981bf7e4..be856a2ac9 100644 --- a/.github/ISSUE_TEMPLATE/2_bug_provider.yml +++ b/.github/ISSUE_TEMPLATE/2_bug_provider.yml @@ -82,6 +82,7 @@ body: - "Twitch" - "Twitter" - "Vk" + - "Webex" - "Wordpress" - "WorkOS" - "Yandex" diff --git a/docs/static/img/providers/webex.svg b/docs/static/img/providers/webex.svg new file mode 100644 index 0000000000..b4cc2e645a --- /dev/null +++ b/docs/static/img/providers/webex.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/core/src/providers/webex.ts b/packages/core/src/providers/webex.ts new file mode 100755 index 0000000000..619b1108ac --- /dev/null +++ b/packages/core/src/providers/webex.ts @@ -0,0 +1,100 @@ +/** + *
+ * Built-in Webex integration. + * + * + * + *
+ * + * @module providers/webex + */ +import type { OAuthConfig, OAuthUserConfig } from "./index.js" + +/** + * The returned user profile from Webex when using the profile callback. + * + * Please refer to {@link https://developer.webex.com/docs/api/v1/people/get-my-own-details|People - Get My Own Details} + * on Webex Developer portal for additional fields. Returned fields may vary depending on the user's role, the OAuth + * integration's scope, and the organization the OAuth integration belongs to. + */ +export interface WebexProfile extends Record { + id: string; + emails: string[]; + displayName?: string; + avatar?: string; +} + +/** + * Add Webex login to your page. + * + * ### Setup + * + * #### Callback URL + * ``` + * https://example.com/api/auth/callback/webex + * ``` + * + * #### Configuration + *```js + * import Auth from "@auth/core" + * import Webex from "@auth/core/providers/webex" + * + * const request = new Request(origin) + * const response = await Auth(request, { + * providers: [Webex({ clientId: WEBEX_CLIENT_ID, clientSecret: WEBEX_CLIENT_SECRET })], + * }) + * ``` + * + * ### Resources + * + * - [Webex OAuth 2.0 Integration Guide](https://developer.webex.com/docs/integrations) + * - [Login with Webex](https://developer.webex.com/docs/login-with-webex) + * + * ### Notes + * + * By default, Auth.js assumes that the Webex provider is + * based on the [OAuth 2](https://www.rfc-editor.org/rfc/rfc6749.html) specification. + * + * :::tip + * + * The Webex provider comes with a [default configuration](https://github.com/nextauthjs/next-auth/blob/main/packages/core/src/providers/webex.ts). + * To override the defaults for your use case, check out [customizing a built-in OAuth provider](https://authjs.dev/guides/providers/custom-provider#override-default-options). + * + * ::: + * + * :::info **Disclaimer** + * + * If you think you found a bug in the default configuration, you can [open an issue](https://authjs.dev/new/provider-issue). + * + * Auth.js strictly adheres to the specification and it cannot take responsibility for any deviation from + * the spec by the provider. You can open an issue, but if the problem is non-compliance with the spec, + * we might not pursue a resolution. You can ask for more help in [Discussions](https://authjs.dev/new/github-discussions). + * + * ::: + */ +export default function Webex

( + config: OAuthUserConfig

& { apiBaseUrl: string } +): OAuthConfig

{ + const apiBaseUrl = config?.apiBaseUrl ?? 'https://webexapis.com/v1'; + + return { + id: 'webex', + name: 'Webex', + type: 'oauth', + authorization: { + url: `${apiBaseUrl}/authorize`, + params: { scope: 'spark:kms spark:people_read' } + }, + token: `${apiBaseUrl}/access_token`, + userinfo: `${apiBaseUrl}/people/me`, + profile(profile) { + return { + id: profile.id, + email: profile.emails[0], + name: profile.displayName, + image: profile.avatar + } + }, + options: config + }; +}