diff --git a/docs/ubuntuinstall.md b/docs/ubuntuinstall.md
index 454cb327..54c83e7f 100644
--- a/docs/ubuntuinstall.md
+++ b/docs/ubuntuinstall.md
@@ -132,13 +132,14 @@ Log in as username@domainname or username@ip_address
`sudo apt-get install mysql-server -y`
- ( enter blank password each time if prompted)
+ ( During install, enter blank password each time if prompted. We'll set one during secure setup.)
`sudo systemctl status mysql` (q to exit)
## Secure Setup
`sudo mysql_secure_installation`
+
* Password your_mysql_password
* No to password validation
* Y to all other options
@@ -223,13 +224,10 @@ tmux allows you to run multiple things in different sessions. Useful for manuall
Once your wallet has a balance, run this:
- `npm run configure`
-
- (once your wallet balance has cleared)
-
- `npm run configure`
-
+ `npm run configure`
+ The script will ask for the following values:
+
* Database: lbry
* Username: root
* Password: your_mysql_password
@@ -237,6 +235,8 @@ tmux allows you to run multiple things in different sessions. Useful for manuall
* Site Title: Your Site Name
* Enter your site's domain name: https://example.com or http://localhost:3000
* Enter a directory where uploads should be stored: (/home/lbry/Uploads)
+
+ `npm run build` (or `npm run dev` to build for developing)
`npm run start`
diff --git a/package-lock.json b/package-lock.json
index febbadf7..c09d0b2f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7650,6 +7650,12 @@
"integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==",
"dev": true
},
+ "md5-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz",
+ "integrity": "sha512-UC0qFwyAjn4YdPpKaDNw6gNxRf7Mcx7jC1UGCY4boCzgvU2Aoc1mOGzTtrjjLKhM5ivsnhoKpQVxKPp+1j1qwg==",
+ "dev": true
+ },
"md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
diff --git a/package.json b/package.json
index 3b5d9f17..8f7701b6 100644
--- a/package.json
+++ b/package.json
@@ -104,6 +104,7 @@
"file-loader": "^2.0.0",
"har-validator": "^5.1.3",
"husky": "^1.1.3",
+ "md5-file": "^4.0.0",
"mini-css-extract-plugin": "^0.5.0",
"mocha": "^5.2.0",
"ndb": "^1.0.26",
diff --git a/server/render/handleShowRender.jsx b/server/render/handleShowRender.jsx
index 4f43a400..ca0082f1 100644
--- a/server/render/handleShowRender.jsx
+++ b/server/render/handleShowRender.jsx
@@ -49,9 +49,12 @@ export default (req, res) => {
action = false,
saga = false,
} = httpContext.get('routeData');
+
+ if (action === 'fallback') {
+ res.status(404);
+ }
const runSaga = (action !== false && saga !== false);
-
const renderPage = (store) => {
// Workaround, remove when a solution for async httpContext exists
@@ -63,10 +66,10 @@ export default (req, res) => {
} else {
const channelKeys = Object.keys(showState.channelList);
- if(channelKeys.length !== 0) {
+ if (channelKeys.length !== 0) {
res.claimId = showState.channelList[channelKeys[0]].longId;
res.isChannel = true;
- }
+ }
}
// render component to a string
@@ -115,10 +118,16 @@ export default (req, res) => {
.then(() => {
// redirect if request does not use canonical url
const canonicalUrl = getCanonicalUrlFromShow(store.getState().show);
+
+ if (!canonicalUrl) {
+ res.status(404);
+ }
+
if (canonicalUrl && canonicalUrl !== req.originalUrl) {
console.log(`redirecting ${req.originalUrl} to ${canonicalUrl}`);
res.redirect(canonicalUrl);
}
+
return renderPage(store)
});
} else {
diff --git a/server/render/renderFullPage.js b/server/render/renderFullPage.js
index 12e39214..a35a0c1e 100644
--- a/server/render/renderFullPage.js
+++ b/server/render/renderFullPage.js
@@ -1,3 +1,10 @@
+const md5File = require('md5-file');
+const path = require('path');
+
+const bundlePath = path.resolve('./public/bundle/bundle.js');
+const bundleHash = md5File.sync(bundlePath);
+const shortBundleHash = bundleHash.substring(0,4);
+
module.exports = (helmet, html, preloadedState) => {
// take the html and preloadedState and return the full page
return `
@@ -22,7 +29,7 @@ module.exports = (helmet, html, preloadedState) => {
-
+