diff --git a/package.json b/package.json
index 6ce72db..c46b2c2 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
"mobx-react": "^5.2.8",
"react": "^16.5.0",
"react-dom": "^16.5.0",
+ "react-html-parser": "^2.0.2",
"react-jss": "^8.6.1",
"react-router": "^4.3.1",
"react-router-dom": "^4.3.1",
diff --git a/src/components/Menu/Menu.js b/src/components/Menu/Menu.js
index 7f64059..143b96e 100644
--- a/src/components/Menu/Menu.js
+++ b/src/components/Menu/Menu.js
@@ -141,6 +141,12 @@ const Main = inject("rootStore") ( observer(
Password manager
+
+
+
+ Sign out
+
+
diff --git a/src/pages/Login.js b/src/pages/Login.js
index 9ce03e1..a1b7d50 100644
--- a/src/pages/Login.js
+++ b/src/pages/Login.js
@@ -12,6 +12,7 @@ import { Container, Button, Form, Header, Segment, Input, Icon } from 'semantic-
* Component imports
*/
import LoadingPage from '../components/loadingPage';
+import Headline from '../components/Headline';
jss.setup(preset());
@@ -126,6 +127,29 @@ const Login = inject("rootStore") ( observer(
Go!
+
+
+
+
+
+ Keep your passwords organized and access them
+ from every device
+
+
+ Sophisticated database access permissions and client side encryption and decryption make your password list readable only to you, even in the unlikely event that the software gets hacked!
+
+
+ Search in your password list
+
+
+ Automatic password generator
+
+
+ Copy the password by just one button click
+
+
+
+
);
@@ -141,6 +165,13 @@ const Login = inject("rootStore") ( observer(
padding: '20%',
paddingTop: '10%',
}
+ },
+
+ ninja: {
+ width: '100px',
+ marginBottom: '-47px',
+ marginTop: '30px',
+ marginLeft: '20px'
}
}
}
diff --git a/src/pages/Main.js b/src/pages/Main.js
index 76a4efb..69c30f6 100644
--- a/src/pages/Main.js
+++ b/src/pages/Main.js
@@ -73,12 +73,12 @@ class Main extends Component {
-
+
-
+
@@ -95,6 +95,13 @@ class Main extends Component {
mainSegment: {
position: 'static !important'
+ },
+
+ ninja: {
+ width: '100px',
+ marginBottom: '-47px',
+ marginTop: '30px',
+ marginLeft: '20px'
}
}
}
diff --git a/src/pages/passwordManager/New.js b/src/pages/passwordManager/New.js
index 68dd419..598a291 100644
--- a/src/pages/passwordManager/New.js
+++ b/src/pages/passwordManager/New.js
@@ -187,7 +187,7 @@ const New = inject("rootStore") ( observer(
- The encryption key for this entry is '{this.props.encryptionkey} '
+ Login and password are going to be encrypted with the key you have set.
Add
Cancel
diff --git a/src/pages/passwordManager/PasswordManager.js b/src/pages/passwordManager/PasswordManager.js
index b7700e5..98739b7 100644
--- a/src/pages/passwordManager/PasswordManager.js
+++ b/src/pages/passwordManager/PasswordManager.js
@@ -4,6 +4,7 @@ import jss from 'jss';
import preset from 'jss-preset-default';
import { Menu, Segment, Dropdown, Table, Button, Loader, Icon, Header, Input } from 'semantic-ui-react';
import alertify from 'alertify.js';
+import ReactHtmlParser from 'react-html-parser';
/*
* Functions import
@@ -143,6 +144,8 @@ const PasswordManager = inject("rootStore") ( observer(
var components = [];
function copyToClipboard(string) {
+ //Copy string to clipboard
+
var textArea = document.createElement("textarea");
textArea.style.position = 'fixed';
textArea.style.top = 0;
@@ -170,6 +173,15 @@ const PasswordManager = inject("rootStore") ( observer(
}
document.body.removeChild(textArea);
}
+
+ function transformUrl(text) {
+ //Transforms url into clickable link
+
+ var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|])/ig;
+ var text1 = text.replace(exp, '$1 ');
+ var exp2 = /(^|[^/])(www\.[\S]+(\b|$))/gim;
+ return ReactHtmlParser(text1.replace(exp2, '$1$2 '));
+ }
dataList.forEach((element, index) => {
if(element.url.includes(this.state.search)) {
@@ -179,16 +191,21 @@ const PasswordManager = inject("rootStore") ( observer(
const copyPassword = () => {
copyToClipboard(decrypt(element.password, this.state.key));
}
+
+ const url = transformUrl(element.url);
+ const password = decrypt(element.password, this.state.key);
+ const login = decrypt(element.login, this.state.key);
+
components.push(
- {element.url}
- {decrypt(element.login, this.state.key)}
+ {url}
+ {login}
- {decrypt(element.password, this.state.key)}
+ {password}
diff --git a/yarn.lock b/yarn.lock
index 814e416..c721eee 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2246,7 +2246,7 @@ domain-browser@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
-domelementtype@1:
+domelementtype@1, domelementtype@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
@@ -2260,6 +2260,12 @@ domhandler@2.1:
dependencies:
domelementtype "1"
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ dependencies:
+ domelementtype "1"
+
domutils@1.1:
version "1.1.6"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
@@ -2273,6 +2279,13 @@ domutils@1.5.1:
dom-serializer "0"
domelementtype "1"
+domutils@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
dot-prop@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
@@ -2353,7 +2366,7 @@ enhanced-resolve@^3.4.0:
object-assign "^4.0.1"
tapable "^0.2.7"
-entities@~1.1.1:
+entities@^1.1.1, entities@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
@@ -3455,6 +3468,17 @@ html-webpack-plugin@2.29.0:
pretty-error "^2.0.2"
toposort "^1.0.0"
+htmlparser2@^3.9.0:
+ version "3.9.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
+ dependencies:
+ domelementtype "^1.3.0"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^2.0.2"
+
htmlparser2@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
@@ -6105,6 +6129,12 @@ react-error-overlay@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.1.tgz#417addb0814a90f3a7082eacba7cee588d00da89"
+react-html-parser@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/react-html-parser/-/react-html-parser-2.0.2.tgz#6dbe1ddd2cebc1b34ca15215158021db5fc5685e"
+ dependencies:
+ htmlparser2 "^3.9.0"
+
react-jss@^8.6.1:
version "8.6.1"
resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.6.1.tgz#a06e2e1d2c4d91b4d11befda865e6c07fbd75252"