/* GoToSocial Copyright (C) GoToSocial Authors admin@gotosocial.org SPDX-License-Identifier: AGPL-3.0-or-later This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ import React from "react"; import { useSearch } from "wouter"; import { Error as ErrorCmp } from "../../../components/error"; import { useGetAccessTokenForAppMutation, useGetAppQuery } from "../../../lib/query/user/applications"; import { useCallbackURL } from "./common"; import useFormSubmit from "../../../lib/form/submit"; import { useValue } from "../../../lib/form"; import MutationButton from "../../../components/form/mutation-button"; import FormWithData from "../../../lib/form/form-with-data"; import { App } from "../../../lib/types/application"; import { OAuthAccessToken } from "../../../lib/types/oauth"; export function AppTokenCallback({}) { // Read the callback authorization // information from the search params. const search = useSearch(); const urlQueryParams = new URLSearchParams(search); const code = urlQueryParams.get("code"); const appId = urlQueryParams.get("state"); const error = urlQueryParams.get("error"); const errorDescription = urlQueryParams.get("error_description"); if (error) { let errString = error; if (errorDescription) { errString += ": " + errorDescription; } if (error === "invalid_scope") { errString += ". You probably requested a token (sub-)scope that wasn't contained in the scopes of your application."; } const err = Error(errString); return ; } if (!code || !appId) { const err = Error("code or app id not defined"); return ; } return( <> ); } function AccessForAppForm({ data: app, code }: { data: App, code: string }) { const redirectURI = useCallbackURL(); // Prepare to call /oauth/token to // exchange code for access token. const form = { client_id: useValue("client_id", app.client_id), client_secret: useValue("client_secret", app.client_secret), redirect_uri: useValue("redirect_uri", redirectURI), code: useValue("code", code), grant_type: useValue("grant_type", "authorization_code"), }; const [ submit, result ] = useFormSubmit(form, useGetAccessTokenForAppMutation()); return (

Receive Access Token

To receive your user-level access token for application{app.name}, click on the button below.
Your access token will be shown once and only once.
Your access token provides access to your account; store it as carefully as you would store a password!

Learn more about how to use your access token (opens in a new tab)
{ result.data ?
{(result.data as OAuthAccessToken).access_token}
:
} ); }