diff --git a/packages/pl-fe/src/actions/consumer-auth.ts b/packages/pl-fe/src/actions/consumer-auth.ts index 202e12c2b..f63d7121d 100644 --- a/packages/pl-fe/src/actions/consumer-auth.ts +++ b/packages/pl-fe/src/actions/consumer-auth.ts @@ -11,7 +11,7 @@ import type { AppDispatch, RootState } from 'pl-fe/store'; const createProviderApp = () => async (dispatch: AppDispatch, getState: () => RootState) => { - const scopes = getScopes(getState()); + const scopes = getScopes(getState(), undefined, true); const params = { client_name: `${sourceCode.displayName} (${new URL(window.origin).host})`, @@ -27,7 +27,7 @@ const prepareRequest = (provider: string) => async(dispatch: AppDispatch, getState: () => RootState) => { const baseURL = isURL(BuildConfig.BACKEND_URL) ? BuildConfig.BACKEND_URL : ''; - const scopes = getScopes(getState()); + const scopes = getScopes(getState(), undefined, true); const app = await dispatch(createProviderApp()); const { client_id, redirect_uri } = app; diff --git a/packages/pl-fe/src/actions/external-auth.ts b/packages/pl-fe/src/actions/external-auth.ts index cd22781b7..e5b25130f 100644 --- a/packages/pl-fe/src/actions/external-auth.ts +++ b/packages/pl-fe/src/actions/external-auth.ts @@ -36,14 +36,14 @@ const createExternalApp = (instance: Instance, baseURL?: string) => { client_name: `${sourceCode.displayName} (${new URL(window.origin).host})`, redirect_uris: `${window.location.origin}/login/external`, website: sourceCode.homepage, - scopes: getInstanceScopes(instance), + scopes: getInstanceScopes(instance, undefined, true), }; return createApp(params, baseURL); }; const externalAuthorize = (instance: Instance, baseURL: string) => { - const scopes = getInstanceScopes(instance); + const scopes = getInstanceScopes(instance, undefined, true); return createExternalApp(instance, baseURL).then((app) => { const { client_id, redirect_uri } = app; diff --git a/packages/pl-fe/src/utils/scopes.ts b/packages/pl-fe/src/utils/scopes.ts index 82480a3d2..a86a9fb10 100644 --- a/packages/pl-fe/src/utils/scopes.ts +++ b/packages/pl-fe/src/utils/scopes.ts @@ -6,21 +6,15 @@ import type { RootState } from 'pl-fe/store'; * Get the OAuth scopes to use for login & signup. * Mastodon will refuse scopes it doesn't know, so care is needed. */ -const getInstanceScopes = (instance: Instance, admin: boolean = true) => { +const getInstanceScopes = (instance: Instance, admin: boolean = true, external: boolean = false) => { const v = getFeatures(instance).version; let scopes; switch (v.software) { - case ICESHRIMP_NET: - scopes = 'read write follow push iceshrimp'; - break; case TOKI: scopes = 'read write follow push write:bites'; break; - case PLEROMA: - scopes = 'read write follow push'; - break; default: scopes = 'read write follow push'; } @@ -38,11 +32,15 @@ const getInstanceScopes = (instance: Instance, admin: boolean = true) => { } } + if (v.software === ICESHRIMP_NET && !external) { + scopes += ' iceshrimp'; + } + return scopes; }; /** Convenience function to get scopes from instance in store. */ -const getScopes = (state: RootState) => getInstanceScopes(state.instance); +const getScopes = (state: RootState, admin?: boolean, external?: boolean) => getInstanceScopes(state.instance, admin, external); export { getInstanceScopes,