minor changes

This commit is contained in:
Alexander Bell 2018-09-20 20:33:12 +02:00
parent c8c2b4ef29
commit 0316a2fcd8
7 changed files with 100 additions and 8 deletions

View File

@ -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",

View File

@ -141,6 +141,12 @@ const Main = inject("rootStore") ( observer(
<Menu.Item name="/passwords" active={activeItem === '/passwords'} onClick={this.handleItemClick} as='a'>
Password manager
</Menu.Item>
<Menu.Menu>
<Menu.Item>
<Button primary onClick={this.stores.authStore.signOut}>Sign out</Button>
</Menu.Item>
</Menu.Menu>
</Sidebar>
<Sidebar.Pusher dimmed={this.state.visible}>

View File

@ -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(
<Button loading={this.state.loading} type='submit'>Go!</Button>
</Form>
</Segment>
<Segment padded="very">
<Headline black="Password " red="manager" />
<ul>
<li>
Keep your passwords <b>organized</b> and access them
from <b>every device</b>
</li>
<li>
Sophisticated database access permissions and <b>client side encryption and decryption</b> make your password list readable only to you, even in the unlikely event that the software gets hacked!
</li>
<li>
<b>Search</b> in your password list
</li>
<li>
Automatic <b>password generator</b>
</li>
<li>
<b>Copy</b> the password by just one button click
</li>
</ul>
<img alt="" className={this.classes.ninja} src={require('../files/images/ninja.svg')} />
</Segment>
</Container>
</div>
);
@ -141,6 +165,13 @@ const Login = inject("rootStore") ( observer(
padding: '20%',
paddingTop: '10%',
}
},
ninja: {
width: '100px',
marginBottom: '-47px',
marginTop: '30px',
marginLeft: '20px'
}
}
}

View File

@ -73,12 +73,12 @@ class Main extends Component {
<Router history={history}>
<Menu handleItemClick={this.handleItemClick}>
<Container className={this.classes.mainContainer}>
<Segment className={this.classes.mainSegment}>
<Segment className={this.classes.mainSegment} padded="very">
<Switch>
<Route exact path="/" component={Home} />
<Route path="/passwords" component={PasswordManager} />
</Switch>
<img alt="" style={{width: '100px', marginBottom: '-20px', marginTop: '30px', marginLeft: '20px'}} src={require('../files/images/ninja.svg')} />
<img alt="" className={this.classes.ninja} src={require('../files/images/ninja.svg')} />
</Segment>
</Container>
</Menu>
@ -95,6 +95,13 @@ class Main extends Component {
mainSegment: {
position: 'static !important'
},
ninja: {
width: '100px',
marginBottom: '-47px',
marginTop: '30px',
marginLeft: '20px'
}
}
}

View File

@ -187,7 +187,7 @@ const New = inject("rootStore") ( observer(
</Input>
</Form.Field>
<p>The encryption key for this entry is '<b>{this.props.encryptionkey}</b>'</p>
<p>Login and password are going to be encrypted with the key you have set.</p>
<Button loading={this.state.loading} type='submit' primary>Add</Button>
<Button loading={this.state.loading} onClick={this.props.toggleNewWindow}><Icon name="x" />Cancel</Button>

View File

@ -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, '<a target="_blank" href="$1">$1</a>');
var exp2 = /(^|[^/])(www\.[\S]+(\b|$))/gim;
return ReactHtmlParser(text1.replace(exp2, '$1<a target="_blank" href="http://$2">$2</a>'));
}
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(
<Table.Row key={index}>
<Table.Cell>{element.url}</Table.Cell>
<Table.Cell>{decrypt(element.login, this.state.key)}</Table.Cell>
<Table.Cell>{url}</Table.Cell>
<Table.Cell>{login}</Table.Cell>
<Table.Cell>
<Button icon>
<Icon onClick={copyLogin} name='copy' />
</Button>
</Table.Cell>
<Table.Cell>{decrypt(element.password, this.state.key)}</Table.Cell>
<Table.Cell>{password}</Table.Cell>
<Table.Cell>
<Button icon>
<Icon onClick={copyPassword} name='copy' />

View File

@ -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"