diff --git a/changelog.md b/changelog.md
index 9082aae..37ff80c 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,41 @@
This file is a record of notable changes made to Reeve.
+## 1.2.0
+
+### Added
+
+- Change Password Functionality
+- Set Default Language
+- User Profile Page
+- S3 Bucket Image Uploads
+- Signed Image Uploads
+- Cloudfront image loading
+- EmailVerified option to endpoint security
+- HideComponent component based on user restriction rules
+- Offline warning when connection to internet is lost
+- Application version to request headers
+- GDPR hard delete online account
+- Workspace branding settings
+- Settings Page
+- Async load Redux states
+- Updated NPM packages
+
+### Fixed
+
+- Logo href links to homepage on authentication pages
+- Reload user on email validation
+- Firefox SVG image sizing issues
+- Organized scss files
+- Loading bar at top of screen
+- Loading bar not visible during async page loading
+- Improved react router implementation
+- Improved "Page could not be found" component
+- Select border radius
+- Notification text translates on language change
+- Hover link colors during client color change
+- Duplicate sessions on page refresh
+
## 1.1.0
### Added
diff --git a/client/common/layouts/DefaultLayout.js b/client/common/layouts/DefaultLayout.js
index 94d48c2..7b24196 100644
--- a/client/common/layouts/DefaultLayout.js
+++ b/client/common/layouts/DefaultLayout.js
@@ -1,7 +1,6 @@
import React, { Component, Fragment } from "react";
import PropTypes from "prop-types";
import { withRouter } from "react-router-dom";
-import { TransitionGroup, CSSTransition } from "react-transition-group";
import { Offline } from "react-detect-offline";
import Header from "client/modules/header";
@@ -16,16 +15,12 @@ class DefaultLayout extends Component {
-
-
-
-
-
+
);
diff --git a/client/common/styles/entry.scss b/client/common/styles/entry.scss
index 0586651..e4086e2 100644
--- a/client/common/styles/entry.scss
+++ b/client/common/styles/entry.scss
@@ -9,5 +9,4 @@
@import "modules/borders";
@import "modules/alignment";
@import "modules/images";
-@import "modules/animations";
@import "modules/custom_components";
diff --git a/client/common/styles/modules/_animations.scss b/client/common/styles/modules/_animations.scss
deleted file mode 100644
index 2f3eea9..0000000
--- a/client/common/styles/modules/_animations.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-// Page transition animation
-
-.fade-appear,
-.fade-enter {
- opacity: 0;
-}
-
-.fade-appear-active,
-.fade-enter-active {
- transition: opacity 0.3s linear;
- opacity: 1;
-}
diff --git a/package-lock.json b/package-lock.json
index 8c4a706..14e0316 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1987,9 +1987,9 @@
}
},
"aws-sdk": {
- "version": "2.444.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.444.0.tgz",
- "integrity": "sha512-3vdC7l5BJ3zHzVNgtIxD+TDviti/sAA/1T8zAXAm2XhZ7AePR5lYIMNAwqu+J44Nm6PFSK1QNSzRQ6A4/6b9eA==",
+ "version": "2.445.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.445.0.tgz",
+ "integrity": "sha512-VontdYjQs7218Mw73IYIVhmbRlnHsbbNxuatOFgKvhFCWh4+ze4joM95ViKOUVofSWwlm1HmNasdhb2kOTg+MA==",
"requires": {
"buffer": "4.9.1",
"events": "1.1.1",
@@ -3858,14 +3858,6 @@
"esutils": "^2.0.2"
}
},
- "dom-helpers": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
- "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
- "requires": {
- "@babel/runtime": "^7.1.2"
- }
- },
"dom-walk": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
@@ -5309,9 +5301,9 @@
}
},
"express-rate-limit": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-3.4.1.tgz",
- "integrity": "sha512-0Em4GrXBb47EN8C5sk8w5H0X0BH0kgHlVMfYjOaPTmRkABSfIbqpiCMc9LxWT27+X1RkpG6bGnt1Fa/UHwajbQ==",
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-3.5.0.tgz",
+ "integrity": "sha512-DLUgv9lqUCEil5RV5naS/rABzfi/zOEfgU7Fb/0f+QyRbM5pHCvZozhWEeD01b0V5RsyGBNtRhp2YxfvrlgAaA==",
"requires": {
"defaults": "^1.0.3"
}
@@ -10401,9 +10393,9 @@
}
},
"react-color": {
- "version": "2.17.2",
- "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.17.2.tgz",
- "integrity": "sha512-TpT/D3wEQmyCOcIXrUgKOvEXpJtMylEx5yzw0laGP30mfC5yO4CoUsiYvfPiUbbkFjMGurPJjkKOkkOfBBIjFQ==",
+ "version": "2.17.3",
+ "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.17.3.tgz",
+ "integrity": "sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ==",
"requires": {
"@icons/material": "^0.2.4",
"lodash": "^4.17.11",
@@ -10619,16 +10611,6 @@
"prop-types": "^15.6.0"
}
},
- "react-transition-group": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.0.0.tgz",
- "integrity": "sha512-b+uvkr15Pb80mqcsz5WAB+d53zS8/pTp3wDEsOiqpea93G8BqfsMFcPv2XZR0owqU13BJWoJvd17VjOPEY/9aA==",
- "requires": {
- "dom-helpers": "^3.4.0",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.6.2"
- }
- },
"reactcss": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz",
@@ -11321,9 +11303,9 @@
"integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4="
},
"sequelize": {
- "version": "5.7.6",
- "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.7.6.tgz",
- "integrity": "sha512-eBOgOnhNpoFaizRZpJm9Z3+PuVgVbJHApHqRaIkzkw7t049kYxdjQvTkKuQ4uZI8jncVIx9SlofRi5QhO7t/oA==",
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.8.0.tgz",
+ "integrity": "sha512-ejIW3nToLKUYOyFQNW+GAwbJyu9WiyzwpWdByPwmmfZ/q/1+/L51AHETVJmIiw6QAelF8NeUjAkq3ve/hoIyPQ==",
"requires": {
"bluebird": "^3.5.0",
"cls-bluebird": "^2.1.0",
diff --git a/package.json b/package.json
index 4efadcd..d3bf90b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "Reeve",
- "version": "1.1.0",
+ "version": "1.2.0",
"engines": {
"node": "10.x"
},
@@ -48,7 +48,7 @@
"acorn": "^6.1.1",
"async": "^2.6.2",
"ava": "^1.4.1",
- "aws-sdk": "^2.444.0",
+ "aws-sdk": "^2.445.0",
"babel-loader": "^8.0.5",
"babel-plugin-add-module-exports": "^1.0.2",
"babel-plugin-emotion": "^10.0.9",
@@ -68,7 +68,7 @@
"es6-promise": "^4.2.6",
"exports-loader": "^0.7.0",
"express": "^4.16.4",
- "express-rate-limit": "^3.4.1",
+ "express-rate-limit": "^3.5.0",
"express-winston": "^3.1.0",
"file-loader": "^3.0.1",
"helmet": "^3.16.0",
@@ -102,7 +102,7 @@
"rc-switch": "^1.9.0",
"react": "^16.8.6",
"react-butterfiles": "^1.2.1",
- "react-color": "^2.17.2",
+ "react-color": "^2.17.3",
"react-detect-offline": "^2.3.0",
"react-dom": "^16.8.6",
"react-ga": "^2.5.7",
@@ -117,14 +117,13 @@
"react-script-loader-hoc": "^1.2.2",
"react-stripe-elements": "^3.0.0",
"react-tooltip": "^3.10.0",
- "react-transition-group": "^4.0.0",
"redis": "^2.8.0",
"redux": "^4.0.1",
"redux-immutable": "^4.0.0",
"redux-thunk": "^2.2.0",
"safe-regex": "^2.0.2",
"sass-loader": "^7.0.1",
- "sequelize": "^5.7.6",
+ "sequelize": "^5.8.0",
"serialize-error": "^4.1.0",
"serve-favicon": "^2.5.0",
"stripe": "^6.31.1",
diff --git a/readme.md b/readme.md
index 35b724d..7f20c5f 100644
--- a/readme.md
+++ b/readme.md
@@ -18,6 +18,14 @@ cd Reeve
npm install && npm start
```
+## Online Application Demo
+
+Heroku Demo [Master Branch]
+
+Heroku Demo [Development Branch]
+
+- Some features such as stripe billing and email sending in the online demo versions have been disabled.
+
## Application Screenshots
![](https://i.imgur.com/c6cYmSl.png)
@@ -73,7 +81,15 @@ npm install && npm start
## Documentation
-Further documentation can be found in the ./documentation directory
+Further documentation can be found in the ./documentation directory of the repository.
+
+An online copy of the documentation can be found at
+
+## Feature Updates
+
+The following public trello board provides scope for some of the features that are planned in future versions of Reeve.
+
+
## License
diff --git a/server/services/s3.js b/server/services/s3.js
index 88ef32d..067d9a1 100644
--- a/server/services/s3.js
+++ b/server/services/s3.js
@@ -56,7 +56,8 @@ async function presignedPutObject(contentType, bucket, signedUrlExpiryTime, acl,
try {
// Create file name to store object in bucket
const extension = mime.extension(contentType);
- const key = `${config.s3.fileDestination}${Date.now().toString()}_${clientId}_${userId}.${extension}`;
+ const filePath = config.s3.fileDestination ? config.s3.fileDestination : "";
+ const key = `${filePath}${Date.now().toString()}_${clientId}_${userId}.${extension}`;
const url = await s3.getSignedUrl("putObject", {
Bucket: bucket,