Skip to content

Commit

Permalink
Make management UI aware of URL subpaths in config
Browse files Browse the repository at this point in the history
Signed-off-by: Antoine Mazeas <[email protected]>
  • Loading branch information
karthanistyr committed Jan 7, 2020
1 parent 8a711e0 commit 3c7b4fc
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
9 changes: 6 additions & 3 deletions maubot/management/frontend/src/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

export const BASE_PATH = "/_matrix/maubot/v1"
var BASE_PATH = "/_matrix/maubot/v1"

export function setBasePath(basePath) {
BASE_PATH = basePath
}

function getHeaders(contentType = "application/json") {
return {
Expand Down Expand Up @@ -241,8 +245,7 @@ export async function doClientAuth(server, type, username, password) {
}

export default {
BASE_PATH,
login, ping, getFeatures, remoteGetFeatures,
login, ping, setBasePath, getFeatures, remoteGetFeatures,
openLogSocket,
debugOpenFile, debugOpenFileEnabled, updateDebugOpenFileEnabled,
getInstances, getInstance, putInstance, deleteInstance,
Expand Down
16 changes: 16 additions & 0 deletions maubot/management/frontend/src/pages/Main.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class Main extends Component {
}

async componentWillMount() {
await this.getBasePath()
if (localStorage.accessToken) {
await this.ping()
} else {
Expand All @@ -39,6 +40,21 @@ class Main extends Component {
this.setState({ pinged: true })
}

async getBasePath() {
try {
const resp = await fetch("./paths.json", {
headers: { "Content-Type": "application/json" }
})
const apiPathJson = await resp.json()
const apiPath = apiPathJson.api_path
console.log(apiPath)
api.setBasePath(`${apiPath}`)
} catch (err) {
console.error(err)
}
}


async ping() {
try {
const username = await api.ping()
Expand Down
21 changes: 20 additions & 1 deletion maubot/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
from typing import Tuple, Dict
import logging
import asyncio
import json
from urllib.parse import urlparse

from aiohttp import web, hdrs
from aiohttp.abc import AbstractAccessLogger
Expand Down Expand Up @@ -63,7 +65,8 @@ async def handle_plugin_path(self, request: web.Request) -> web.Response:

def get_instance_subapp(self, instance_id: str) -> Tuple[PluginWebApp, str]:
subpath = self.config["server.plugin_base_path"] + instance_id
url = self.config["server.public_url"] + subpath
path_prefix = self.config["server.public_url_path_prefix"].rstrip("/")
url = self.config["server.public_url"] + path_prefix + subpath
try:
return self.plugin_routes[subpath], url
except KeyError:
Expand Down Expand Up @@ -129,6 +132,22 @@ def setup_static_root_files(self, directory: str, ui_base: str) -> None:
self.app.router.add_get(f"{ui_base}/{file}", lambda _: web.Response(body=data,
content_type=mime))

# also set up a resource path for the public url path prefix config
# cut the prefix path from public_url
public_url = self.config["server.public_url"]
base_path = self.config["server.base_path"]
public_url_path = ""
if public_url != "":
url_parts = urlparse(public_url)
public_url_path = url_parts.path.rstrip("/")

# assemble with base_path
api_path = f"{public_url_path}{base_path}"

path_prefix_response_body = json.dumps({"api_path": api_path.rstrip("/")})
self.app.router.add_get(f"{ui_base}/paths.json", lambda _: web.Response(body=path_prefix_response_body,
content_type="application/json"))

def add_route(self, method: Method, path: PathBuilder, handler) -> None:
self.app.router.add_route(method.value, str(path), handler)

Expand Down

0 comments on commit 3c7b4fc

Please sign in to comment.