From a7cc48e0ffc8b9efb7ab42d9e48ef7fcf8a1dff1 Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Fri, 1 Mar 2019 15:01:25 -0800
Subject: [PATCH] volume server api docs tweaks

---
 src/servers/common/swagger-ui/index.ts           | 14 ++++++++++----
 src/servers/common/swagger-ui/indexTemplate.html |  4 +++-
 src/servers/volume/server/web-api.ts             |  8 ++++++--
 src/servers/volume/server/web-schema.ts          |  2 ++
 4 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/servers/common/swagger-ui/index.ts b/src/servers/common/swagger-ui/index.ts
index ae48a4b1c..d085a53b5 100644
--- a/src/servers/common/swagger-ui/index.ts
+++ b/src/servers/common/swagger-ui/index.ts
@@ -16,13 +16,19 @@ export function swaggerUiAssetsHandler(options?: ServeStaticOptions) {
     return express.static(getAbsoluteFSPath(), opts)
 }
 
-function createHTML(swaggerUrl: string, apiPrefix: string) {
+export interface SwaggerUIOptions {
+    openapiJsonUrl: string
+    apiPrefix: string
+    shortcutIconLink: string
+}
+
+function createHTML(options: SwaggerUIOptions) {
     const htmlTemplate = fs.readFileSync(`${__dirname}/indexTemplate.html`).toString()
-    return interpolate(htmlTemplate, { swaggerUrl, apiPrefix })
+    return interpolate(htmlTemplate, options)
 }
 
-export function swaggerUiIndexHandler(swaggerUrl: string, apiPrefix: string): express.Handler {
-    const html = createHTML(swaggerUrl, apiPrefix)
+export function swaggerUiIndexHandler(options: SwaggerUIOptions): express.Handler {
+    const html = createHTML(options)
     return (req: express.Request, res: express.Response) => {
         res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
         res.end(html);
diff --git a/src/servers/common/swagger-ui/indexTemplate.html b/src/servers/common/swagger-ui/indexTemplate.html
index 0f334da2c..d612efc1b 100644
--- a/src/servers/common/swagger-ui/indexTemplate.html
+++ b/src/servers/common/swagger-ui/indexTemplate.html
@@ -4,6 +4,8 @@
         <meta charset="UTF-8">
         <title>Swagger UI</title>
         <link rel="stylesheet" type="text/css" href="${apiPrefix}/swagger-ui.css" >
+        ${shortcutIconLink}
+
         <style>
             html
             {
@@ -42,7 +44,7 @@
             }
             window.onload = function () {
                 var ui = SwaggerUIBundle({
-                    url: '${swaggerUrl}',
+                    url: '${openapiJsonUrl}',
                     validatorUrl: null,
                     docExpansion: 'list',
                     dom_id: '#swagger-ui',
diff --git a/src/servers/volume/server/web-api.ts b/src/servers/volume/server/web-api.ts
index 4ac65fcf9..53b4f365d 100644
--- a/src/servers/volume/server/web-api.ts
+++ b/src/servers/volume/server/web-api.ts
@@ -16,7 +16,7 @@ import { ConsoleLogger } from 'mol-util/console-logger'
 import { State } from './state'
 import { LimitsConfig, ServerConfig } from '../config';
 import { interpolate } from 'mol-util/string';
-import { getSchema } from './web-schema';
+import { getSchema, shortcutIconLink } from './web-schema';
 import { swaggerUiIndexHandler, swaggerUiAssetsHandler } from 'servers/common/swagger-ui';
 
 export default function init(app: express.Express) {
@@ -42,7 +42,11 @@ export default function init(app: express.Express) {
     });
 
     app.use(makePath(''), swaggerUiAssetsHandler());
-    app.get(makePath(''), swaggerUiIndexHandler(makePath('openapi.json'), ServerConfig.apiPrefix));
+    app.get(makePath(''), swaggerUiIndexHandler({
+        openapiJsonUrl: makePath('openapi.json'),
+        apiPrefix: ServerConfig.apiPrefix,
+        shortcutIconLink
+    }));
 }
 
 function getMapFileFn() {
diff --git a/src/servers/volume/server/web-schema.ts b/src/servers/volume/server/web-schema.ts
index e24eb39a4..05c743af2 100644
--- a/src/servers/volume/server/web-schema.ts
+++ b/src/servers/volume/server/web-schema.ts
@@ -257,3 +257,5 @@ export function getSchema() {
         }
     }
 }
+
+export const shortcutIconLink = `<link rel='shortcut icon' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURQAAAMIrHrspHr0oH7soILonHrwqH7onILsoHrsoH7soH7woILwpIKgVokoAAAAMdFJOUwAQHzNxWmBHS5XO6jdtAmoAAACZSURBVDjLxZNRCsQgDAVNXmwb9f7nXZEaLRgXloXOhwQdjMYYwpOLw55fBT46KhbOKhmRR2zLcFJQj8UR+HxFgArIF5BKJbEncC6NDEdI5SatBRSDJwGAoiFDONrEJXWYhGMIcRJGCrb1TOtDahfUuQXd10jkFYq0ViIrbUpNcVT6redeC1+b9tH2WLR93Sx2VCzkv/7NjfABxjQHksGB7lAAAAAASUVORK5CYII=' />`
\ No newline at end of file
-- 
GitLab