Skip to content
Snippets Groups Projects
Commit 49b1110d authored by Julia Friesel's avatar Julia Friesel
Browse files

Bring back check password flow

This reverts commit a029ba8766315f9197f67f5141606077520dc584.
parent 9f11170f
No related branches found
No related tags found
No related merge requests found
......@@ -58,8 +58,8 @@ export const settings = {
explainerDisabled: "Encrypt the app's database with a password. You need to enter the password every time the app is started.",
explainerEnabled: "Password protection and database encryption is currently enabled",
setPassword: 'Set password',
deletePassword: 'Remove password protection',
changePassword: 'Change password',
deletePassword: "Delete password",
enterCurrent: "Please enter your current password",
enterNew: "Please enter a new password",
backupReminderTitle: 'Read this before making changes to your password',
backupReminder: 'Just to be safe, please backup your data using the export function before making changes to your password.\n\nLonger passwords are better! Consider using a passphrase.\n\nPlease also make sure you do not lose your password. There is no way to recover your data if you do.\n\nMaking any changes to your password setting will restart the app.',
......
import React, { Component } from 'react'
import {
View,
TouchableOpacity,
TextInput,
Alert
} from 'react-native'
import nodejs from 'nodejs-mobile-react-native'
import { AppText } from '../app-text'
import {
hasEncryptionObservable
} from '../../local-storage'
import styles from '../../styles/index'
import { settings as labels, shared } from '../labels'
import { requestHash, changeEncryptionAndRestartApp } from '../../db'
export default class PasswordSetting extends Component {
constructor(props) {
super(props)
this.state = {
showUpdateAndDelete: hasEncryptionObservable.value,
showSetPassword: !hasEncryptionObservable.value,
settingNewPassword: false,
changingPassword: false
}
nodejs.channel.addListener(
'message',
this.passHashToDb,
this
)
}
componentWillUnmount() {
nodejs.channel.removeListener('message', this.passHashToDb)
}
passHashToDb = async (msg) => {
msg = JSON.parse(msg)
if (msg.type != 'sha512') return
await changeEncryptionAndRestartApp(msg.message)
}
render() {
return (
<View style={styles.settingsSegment}>
<AppText style={styles.settingsSegmentTitle}>
{labels.passwordSettings.title}
</AppText>
{this.state.showUpdateAndDelete ?
<AppText>{labels.passwordSettings.explainerEnabled}</AppText>
:
<AppText>{labels.passwordSettings.explainerDisabled}</AppText>
}
{this.state.showUpdateAndDelete &&
<View>
{this.state.changingPassword &&
<View>
<TextInput
style={styles.passwordField}
autoFocus={true}
onChangeText={val => {
this.setState({
changedPassword: val
})
}}
value={this.state.changedPassword}
placeholder={labels.passwordSettings.enterNew}
secureTextEntry={true}
/>
</View>
}
<TouchableOpacity
onPress={() => {
if (!this.state.changingPassword) {
showBackUpReminder(() => {
this.setState({ changingPassword: true })
})
} else {
requestHash(this.state.changedPassword)
}
}}
disabled={this.state.changingPassword && !this.state.changedPassword}
style={styles.settingsButton}>
<AppText style={styles.settingsButtonText}>
{labels.passwordSettings.changePassword}
</AppText>
</TouchableOpacity>
<TouchableOpacity
onPress={() => {
showBackUpReminder(() => changeEncryptionAndRestartApp())
}}
style={styles.settingsButton}>
<AppText style={styles.settingsButtonText}>
{labels.passwordSettings.deletePassword}
</AppText>
</TouchableOpacity>
</View>
}
{this.state.enteringNewPassword &&
<View>
<TextInput
style={styles.passwordField}
autoFocus={true}
onChangeText={val => {
this.setState({
newPassword: val
})
}}
value={this.state.newPassword}
placeholder={labels.passwordSettings.enterNew}
secureTextEntry={true}
/>
</View>
}
{this.state.showSetPassword &&
<TouchableOpacity
onPress={() => {
if (!this.state.enteringNewPassword) {
showBackUpReminder(() => {
this.setState({ enteringNewPassword: true })
})
} else {
requestHash(this.state.newPassword)
}
}}
disabled={this.state.enteringNewPassword && !this.state.newPassword}
style={styles.settingsButton}>
<AppText style={styles.settingsButtonText}>
{labels.passwordSettings.setPassword}
</AppText>
</TouchableOpacity>
}
</View>
)
}
}
function showBackUpReminder(okHandler) {
Alert.alert(
labels.passwordSettings.backupReminderTitle,
labels.passwordSettings.backupReminder,
[{
text: shared.cancel,
style: 'cancel'
}, {
text: shared.ok,
onPress: okHandler
}]
)
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment