]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
⬆ Upgrade Swagger UI copy of `oauth2-redirect.html` to include fixes for flavors...
authorTeo Koon Peng <koonpeng@openrobotics.org>
Tue, 23 Aug 2022 13:57:25 +0000 (21:57 +0800)
committerGitHub <noreply@github.com>
Tue, 23 Aug 2022 13:57:25 +0000 (13:57 +0000)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
fastapi/openapi/docs.py

index d6af17a850e7897e45b7b3aec96889726c450ea5..b7803b13bde8128dc51073632509adf5a3453009 100644 (file)
@@ -115,12 +115,14 @@ def get_redoc_html(
 
 
 def get_swagger_ui_oauth2_redirect_html() -> HTMLResponse:
+    # copied from https://github.com/swagger-api/swagger-ui/blob/v4.14.0/dist/oauth2-redirect.html
     html = """
-    <!DOCTYPE html>
+    <!doctype html>
     <html lang="en-US">
-    <body onload="run()">
-    </body>
-    </html>
+    <head>
+        <title>Swagger UI: OAuth2 Redirect</title>
+    </head>
+    <body>
     <script>
         'use strict';
         function run () {
@@ -130,31 +132,32 @@ def get_swagger_ui_oauth2_redirect_html() -> HTMLResponse:
             var isValid, qp, arr;
 
             if (/code|token|error/.test(window.location.hash)) {
-                qp = window.location.hash.substring(1);
+                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('=', '":"') + '"';})
+            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)
+                        return key === "" ? value : decodeURIComponent(value);
                     }
-            ) : {}
+            ) : {};
 
-            isValid = qp.state === sentState
+            isValid = qp.state === sentState;
 
             if ((
-            oauth2.auth.schema.get("flow") === "accessCode"||
-            oauth2.auth.schema.get("flow") === "authorizationCode"
+              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 Passed state wasn't returned from auth server"
+                        message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server."
                     });
                 }
 
@@ -163,7 +166,7 @@ def get_swagger_ui_oauth2_redirect_html() -> HTMLResponse:
                     oauth2.auth.code = qp.code;
                     oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});
                 } else {
-                    let oauthErrorMsg
+                    let oauthErrorMsg;
                     if (qp.error) {
                         oauthErrorMsg = "["+qp.error+"]: " +
                             (qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") +
@@ -174,7 +177,7 @@ def get_swagger_ui_oauth2_redirect_html() -> HTMLResponse:
                         authId: oauth2.auth.name,
                         source: "auth",
                         level: "error",
-                        message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server"
+                        message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server."
                     });
                 }
             } else {
@@ -182,6 +185,16 @@ def get_swagger_ui_oauth2_redirect_html() -> HTMLResponse:
             }
             window.close();
         }
+
+        if (document.readyState !== 'loading') {
+            run();
+        } else {
+            document.addEventListener('DOMContentLoaded', function () {
+                run();
+            });
+        }
     </script>
+    </body>
+    </html>
         """
     return HTMLResponse(content=html)