Skip to content

Commit

Permalink
feat(swagger-ui): ajout de param clientId et clientSecret #21
Browse files Browse the repository at this point in the history
  • Loading branch information
ocruze committed May 27, 2024
1 parent 34b93e0 commit 06796b9
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 3 deletions.
14 changes: 11 additions & 3 deletions _includes/components/swaggerui.njk
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
<div id="{{ params.targetId }}" class="frx-swagger-ui"></div>
<script>
window.addEventListener('load', function() {
SwaggerUIBundle({
const oauth2RedirectUrl = `${window.location.origin}/oauth2-redirect.html`
const ui = SwaggerUIBundle({
url: "{{ params.url }}",
dom_id: "{{ '#' ~ params.targetId }}",
docExpansion: "{{ (params.docExpansion|default('none')) }}"
});
docExpansion: "{{ (params.docExpansion|default('none')) }}",
oauth2RedirectUrl: oauth2RedirectUrl
})
{% if params.clientId and params.clientSecret %}
ui.initOAuth({
clientId: "{{ params.clientId }}",
clientSecret: "{{ params.clientSecret }}"
})
{% endif %}
});
</script>
88 changes: 88 additions & 0 deletions public/oauth2-redirect.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
{# Honteusement copié sur : https://data-qua.priv.geopf.fr/api/swagger-ui/oauth2-redirect.html #} {#
https://data-qua.priv.geopf.fr/api/v3/api-docs/swagger-config #}

<!doctype html>
<html>
<head>
<title>Swagger UI: OAuth2 Redirect</title>
</head>
<body>
<script>
"use strict";
function run() {
var oauth2 = window.opener.swaggerUIRedirectOauth2;
var sentState = oauth2.state;
var redirectUrl = oauth2.redirectUrl;
var isValid, qp, arr;

if (/code|token|error/.test(window.location.hash)) {
qp = window.location.hash.substring(1).replace("?", "&");
} else {
qp = location.search.substring(1);
}

arr = qp.split("&");
arr.forEach(function (v, i, _arr) {
_arr[i] = '"' + v.replace("=", '":"') + '"';
});
qp = qp
? JSON.parse("{" + arr.join() + "}", function (key, value) {
return key === "" ? value : decodeURIComponent(value);
})
: {};

isValid = qp.state === sentState;

if (
(oauth2.auth.schema.get("flow") === "accessCode" ||
oauth2.auth.schema.get("flow") === "authorizationCode" ||
oauth2.auth.schema.get("flow") === "authorization_code") &&
!oauth2.auth.code
) {
if (!isValid) {
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "warning",
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server.",
});
}

if (qp.code) {
delete oauth2.state;
oauth2.auth.code = qp.code;
oauth2.callback({ auth: oauth2.auth, redirectUrl: redirectUrl });
} else {
let oauthErrorMsg;
if (qp.error) {
oauthErrorMsg =
"[" +
qp.error +
"]: " +
(qp.error_description ? qp.error_description + ". " : "no accessCode received from the server. ") +
(qp.error_uri ? "More info: " + qp.error_uri : "");
}

oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "error",
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server.",
});
}
} else {
oauth2.callback({ auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl });
}
window.close();
}

if (document.readyState !== "loading") {
run();
} else {
document.addEventListener("DOMContentLoaded", function () {
run();
});
}
</script>
</body>
</html>

0 comments on commit 06796b9

Please sign in to comment.