diff --git a/src/api/web/index.js b/src/api/web/index.js index be76dec57..71bbfe863 100644 --- a/src/api/web/index.js +++ b/src/api/web/index.js @@ -12,6 +12,7 @@ import express from 'express'; import { combineBaseUrl, getWebProtocol } from '../../lib/utils'; import Search from '../../lib/search'; import { HEADERS, HTTP_STATUS, WEB_TITLE } from '../../lib/constants'; +import { spliceURL } from '../../utils/string'; const { securityIframe } = require('../middleware'); /* eslint new-cap:off */ @@ -52,9 +53,8 @@ module.exports = function(config, auth, storage) { }); }); - router.get('/', function(req, res) { - const installPath = _.get(config, 'url_prefix', ''); - const base = combineBaseUrl(getWebProtocol(req.get(HEADERS.FORWARDED_PROTO), req.protocol), req.get('host'), installPath); + function renderHTML(req, res) { + const base = combineBaseUrl(getWebProtocol(req.get(HEADERS.FORWARDED_PROTO), req.protocol), req.get('host'), config.url_prefix); const webPage = template .replace(/ToReplaceByVerdaccio/g, base) .replace(/ToReplaceByTitle/g, _.get(config, 'web.title') ? config.web.title : WEB_TITLE) @@ -64,6 +64,20 @@ module.exports = function(config, auth, storage) { res.setHeader('Content-Type', 'text/html'); res.send(webPage); + } + + router.get('/-/web/:pkg', function(req, res) { + renderHTML(req, res); + }); + + router.get('/-/verdaccio/logo', function(req, res) { + const installPath = _.get(config, 'url_prefix', ''); + + res.send(_.get(config, 'web.logo') || spliceURL(installPath, '/-/static/logo.png')); + }); + + router.get('/', function(req, res) { + renderHTML(req, res); }); return router; diff --git a/src/webui/app.js b/src/webui/app.js index a4474a57d..4ca152050 100644 --- a/src/webui/app.js +++ b/src/webui/app.js @@ -4,16 +4,16 @@ import isNil from 'lodash/isNil'; import storage from './utils/storage'; import { makeLogin, isTokenExpire } from './utils/login'; -import Footer from './components/Footer'; import Loading from './components/Loading'; import LoginModal from './components/Login'; import Header from './components/Header'; import { Container, Content } from './components/Layout'; -import Route from './router'; +import RouterApp from './router'; import API from './utils/api'; import './styles/typeface-roboto.scss'; import './styles/main.scss'; import 'normalize.css'; +import Footer from './components/Footer'; export const AppContext = React.createContext(); @@ -67,7 +67,8 @@ export default class App extends Component { isLoading: false, }); } catch (error) { - this.handleShowAlertDialog({ + // FIXME: add dialog + console.error({ title: 'Warning', message: `Unable to load package list: ${error.message}`, }); @@ -140,15 +141,14 @@ export default class App extends Component { } render() { - const { isLoading, isUserLoggedIn, packages } = this.state; + const { isLoading, isUserLoggedIn, packages, logoUrl, user, scope } = this.state; return ( {isLoading ? ( ) : ( - - {this.renderHeader()} + {this.renderContent()} @@ -175,7 +175,11 @@ export default class App extends Component { return ( - + + {this.renderHeader()} +