From 2ae0266a02cebd8aa69935659b0569122091b659 Mon Sep 17 00:00:00 2001
From: vkovtun <viktor.kovtun@id.ethz.ch>
Date: Mon, 7 Aug 2023 10:31:44 +0200
Subject: [PATCH] SSDM-13579: Reusing session token instead of doing login.

---
 .../components/database/DatabaseComponent.jsx  | 18 ++++++++++--------
 .../database/data-browser/DataBrowser.jsx      | 13 ++++++-------
 .../data-browser/DataBrowserController.js      |  4 ++++
 3 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/ui-admin/src/js/components/database/DatabaseComponent.jsx b/ui-admin/src/js/components/database/DatabaseComponent.jsx
index 4acea05e169..1e35cad3df8 100644
--- a/ui-admin/src/js/components/database/DatabaseComponent.jsx
+++ b/ui-admin/src/js/components/database/DatabaseComponent.jsx
@@ -77,14 +77,16 @@ class DatabaseComponent extends React.PureComponent {
     logger.log(logger.DEBUG, 'DatabaseComponent.render')
     const { object } = this.props
 
-    return (
-      this.state.showDataBrowser
-        ?
-          <DataBrowser id={object.id} viewType='list'/>
-        :
-          <Container>
-            <pre>{JSON.stringify(this.state.json || {}, null, 2)}</pre>
-          </Container>
+    return this.state.showDataBrowser ? (
+      <DataBrowser
+        id={object.id}
+        viewType='list'
+        sessionTokenProvider={() => AppController.getInstance().getSessionToken()}
+      />
+    ) : (
+      <Container>
+        <pre>{JSON.stringify(this.state.json || {}, null, 2)}</pre>
+      </Container>
     )
   }
 }
diff --git a/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx b/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx
index ca14a4cbc1f..bf055b9be57 100644
--- a/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx
+++ b/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx
@@ -91,26 +91,25 @@ class DataBrowser extends React.Component {
     super(props, context)
     autoBind(this)
 
-    this.controller = this.props.controller || new DataBrowserController()
+    const { sessionTokenProvider, controller } = this.props
+
+    this.controller = controller || new DataBrowserController()
     this.controller.attach(this)
     this.datastoreServer = new DataStoreServer(
       'http://localhost:8085',
       HTTP_SERVER_URI
     )
 
+    this.controller.useSessionToken(sessionTokenProvider)
+
     this.state = {
-      viewType: null,
+      viewType: props.viewType,
       files: [],
       selectedFile: null,
       multiselectedFiles: new Set([]),
       showInfo: false,
       path: '/'
     }
-
-    // Login for all subsequent requests
-    this.controller.login().then(() => {
-      this.setState({ viewType: props.viewType })
-    })
   }
   handleViewTypeChange(viewType) {
     this.setState({ viewType })
diff --git a/ui-admin/src/js/components/database/data-browser/DataBrowserController.js b/ui-admin/src/js/components/database/data-browser/DataBrowserController.js
index 79a005583b8..46de92362d4 100644
--- a/ui-admin/src/js/components/database/data-browser/DataBrowserController.js
+++ b/ui-admin/src/js/components/database/data-browser/DataBrowserController.js
@@ -41,6 +41,10 @@ export default class DataBrowserController extends ComponentController {
     })
   }
 
+  useSessionToken(sessionTokenProvider) {
+    this.component.datastoreServer.useSession(sessionTokenProvider())
+  }
+
   async listFiles() {
     return new Promise((resolve, reject) => {
       this.component.datastoreServer.list(this.owner, this.path, true, (data) => {
-- 
GitLab