forked from api-platform/core
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
author soyuka <soyuka@users.noreply.github.com> 1670024326 +0100 committer soyuka <soyuka@users.noreply.github.com> 1675436410 +0100 gpgsig -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEYtBTVMYUWMuDeP0yP4IpnGT1GtIFAmPdIXoACgkQP4IpnGT1 GtJPXBAAqdkWZI7ljqcvTWOWPVCZg7HM3TjgMCQbP0yna0nPMWHJ+ZLMKi2MlE2u BOGe6XxESevQbloMrd5gufeJ+aKnqvLpD18buoMojam9nBcIRzzWynw7vj2zoUNR 8lN0nyxGoj2FIO4QvP3ck5fa1WrSDX9q8LKSmXgalGb7H9vVUsHzgDaC0D6sJ3Jy lv7p9iEighN73E3v0tNHx0rGvO7XscE3/XRZauwGyG4oyBgaBzx1HBArAiRS9ivu Avp/Seyt4g28mxRaHlDNM/7vhC/ZV/lF2u21UX7E2T129u5kg+6V+Uu0/+3WqOJQ Ade9YIEqbXRldxnKvPTPlI3UZbSaV4xOeRYwUkaoK7pfB6v5Q08hovjthvLUdgdy qWUEH8Pj2+F7pbJkPXT1HsmSrDGMzrV+RRzBjThCc4Ik4X1IERAOLbrGMsOOTePM kNdk90c2OnIrnakiz8UPht/7BYu2lSmW1HHjk2AYzMv6oRXdfsd4VcnFKQpfynjl Jsx6GR+5Kkdu7KFzvhF3sy59B4Qz0kk+qwHdcYyO/BZBWgts0FdsRxW/YJDdkMT/ aleNXmGsFrn3G+E4vXbMKNL5B59LuB1i/m/qaAYb8yoGBD5LiM3GaVknM9tBUsOM OB0bv/3pyIQjz3le0GKTxAsNNERkksZLUN4sOlDs0Eo7/mIabLo= =thCY -----END PGP SIGNATURE----- init docs
- Loading branch information
Showing
227 changed files
with
29,271 additions
and
178 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
name: Documentation | ||
|
||
on: | ||
push: | ||
pull_request: | ||
|
||
env: | ||
COMPOSER_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
COVERAGE: '0' | ||
SYMFONY_DEPRECATIONS_HELPER: max[self]=0 | ||
|
||
jobs: | ||
docs: | ||
name: Generate Documentation | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
- name: Setup PHP with pre-release PECL extension | ||
uses: shivammathur/setup-php@v2 | ||
with: | ||
php-version: 8.2 | ||
tools: pecl, composer | ||
extensions: intl, bcmath, curl, openssl, mbstring, pdo_sqlite | ||
coverage: none | ||
ini-values: memory_limit=-1 | ||
- name: Get composer cache directory | ||
id: composercache | ||
run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT | ||
shell: bash | ||
- name: Global require pdg | ||
run: | | ||
cd $(composer -n config --global home) | ||
echo "{\"repositories\":[{\"type\":\"vcs\",\"url\":\"https://github.com/php-documentation-generator/php-documentation-generator\"}]}" > composer.json | ||
composer global config --no-plugins allow-plugins.symfony/runtime true | ||
composer global require php-documentation-generator/php-documentation-generator:dev-main | ||
- name: Cache dependencies | ||
uses: actions/cache@v3 | ||
with: | ||
path: ${{ steps.composercache.outputs.dir }} | ||
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} | ||
restore-keys: ${{ runner.os }}-composer- | ||
- name: Update project dependencies | ||
run: composer update --no-interaction --no-progress --ansi | ||
|
||
- name: Install phpunit | ||
run: vendor/bin/simple-phpunit --version | ||
- name: Test guides | ||
working-directory: docs | ||
run: | | ||
for d in guide/*.php; do | ||
APP_ENV=test pdg test:guide $d | ||
done | ||
- name: Generate Guides | ||
working-directory: docs | ||
run: | | ||
for d in guide/*.php; do | ||
name=$(basename $d .php); | ||
pdg guide "$d" > "pages/guide/$name.mdx"; | ||
done | ||
- name: Generate References | ||
working-directory: docs | ||
run: pdg references > "pages/reference/index.mdx" | ||
- name: Generate Sidebar | ||
working-directory: docs | ||
run: pdg index > "pages/sidebar.mdx" | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
pages/guide/**/*.mdx | ||
pages/reference/**/*.mdx | ||
pages/tutorial/**/*.mdx | ||
pages/core | ||
pages/create-client | ||
pages/deployment | ||
pages/distribution | ||
pages/extra | ||
pages/schema-generator | ||
pages/sidebar.mdx | ||
.next | ||
node_modules | ||
composer.lock | ||
vendor | ||
var |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# Authentication Support | ||
|
||
API Platform Admin delegates the authentication support to React Admin. | ||
Refer to [the chapter dedicated to authentication in the React Admin documentation](https://marmelab.com/react-admin/Authentication.html) | ||
for more information. | ||
|
||
In short, you have to tweak the data provider and the API documentation parser like this: | ||
|
||
```typescript | ||
// components/admin/Admin.tsx | ||
|
||
import Head from "next/head"; | ||
import { useState } from "react"; | ||
import { Navigate, Route } from "react-router-dom"; | ||
import { CustomRoutes } from "react-admin"; | ||
import { | ||
fetchHydra as baseFetchHydra, | ||
HydraAdmin, | ||
hydraDataProvider as baseHydraDataProvider, | ||
useIntrospection, | ||
} from "@api-platform/admin"; | ||
import { parseHydraDocumentation } from "@api-platform/api-doc-parser"; | ||
import authProvider from "utils/authProvider"; | ||
import { ENTRYPOINT } from "config/entrypoint"; | ||
|
||
const getHeaders = () => localStorage.getItem("token") ? { | ||
Authorization: `Bearer ${localStorage.getItem("token")}`, | ||
} : {}; | ||
const fetchHydra = (url, options = {}) => | ||
baseFetchHydra(url, { | ||
...options, | ||
headers: getHeaders, | ||
}); | ||
const RedirectToLogin = () => { | ||
const introspect = useIntrospection(); | ||
|
||
if (localStorage.getItem("token")) { | ||
introspect(); | ||
return <></>; | ||
} | ||
return <Navigate to="/login" />; | ||
}; | ||
const apiDocumentationParser = (setRedirectToLogin) => async () => { | ||
try { | ||
setRedirectToLogin(false); | ||
|
||
return await parseHydraDocumentation(ENTRYPOINT, { headers: getHeaders }); | ||
} catch (result) { | ||
const { api, response, status } = result; | ||
if (status !== 401 || !response) { | ||
throw result; | ||
} | ||
|
||
// Prevent infinite loop if the token is expired | ||
localStorage.removeItem("token"); | ||
|
||
setRedirectToLogin(true); | ||
|
||
return { | ||
api, | ||
response, | ||
status, | ||
}; | ||
} | ||
}; | ||
const dataProvider = (setRedirectToLogin) => baseHydraDataProvider({ | ||
entrypoint: ENTRYPOINT, | ||
httpClient: fetchHydra, | ||
apiDocumentationParser: apiDocumentationParser(setRedirectToLogin), | ||
}); | ||
|
||
const Admin = () => { | ||
const [redirectToLogin, setRedirectToLogin] = useState(false); | ||
|
||
return ( | ||
<> | ||
<Head> | ||
<title>API Platform Admin</title> | ||
</Head> | ||
|
||
<HydraAdmin dataProvider={dataProvider(setRedirectToLogin)} authProvider={authProvider} entrypoint={window.origin}> | ||
<CustomRoutes> | ||
{redirectToLogin ? <Route path="/" element={<RedirectToLogin />} /> : null} | ||
</CustomRoutes> | ||
</HydraAdmin> | ||
</> | ||
); | ||
} | ||
export default Admin; | ||
``` | ||
|
||
For the implementation of the auth provider, you can find a working example in the [API Platform's demo application](https://github.com/api-platform/demo/blob/main/pwa/utils/authProvider.tsx). |
Oops, something went wrong.