Display progress updates during password changes
This commit is contained in:
parent
466453bf8a
commit
33a95d0604
|
@ -10,6 +10,7 @@ from rest_auth.registration.serializers import RegisterSerializer
|
||||||
from rest_auth.serializers import PasswordChangeSerializer, PasswordResetSerializer, PasswordResetConfirmSerializer, LoginSerializer
|
from rest_auth.serializers import PasswordChangeSerializer, PasswordResetSerializer, PasswordResetConfirmSerializer, LoginSerializer
|
||||||
from rest_auth.serializers import UserDetailsSerializer
|
from rest_auth.serializers import UserDetailsSerializer
|
||||||
import re
|
import re
|
||||||
|
import time
|
||||||
|
|
||||||
from . import models, fields, utils, utils_ldap, utils_auth, utils_stats
|
from . import models, fields, utils, utils_ldap, utils_auth, utils_stats
|
||||||
from .. import settings, secrets
|
from .. import settings, secrets
|
||||||
|
@ -556,12 +557,15 @@ class MyRegisterSerializer(RegisterSerializer):
|
||||||
|
|
||||||
class MyPasswordChangeSerializer(PasswordChangeSerializer):
|
class MyPasswordChangeSerializer(PasswordChangeSerializer):
|
||||||
def save(self):
|
def save(self):
|
||||||
|
request_id = self.request.data.get('request_id', '')
|
||||||
|
|
||||||
data = dict(
|
data = dict(
|
||||||
username=self.user.username,
|
username=self.user.username,
|
||||||
password1=self.request.data['new_password1'],
|
password1=self.request.data['new_password1'],
|
||||||
)
|
)
|
||||||
|
|
||||||
if utils_ldap.is_configured():
|
if utils_ldap.is_configured():
|
||||||
|
if request_id: utils_stats.set_progress(request_id, 'Changing LDAP password...')
|
||||||
if utils_ldap.set_password(data) != 200:
|
if utils_ldap.set_password(data) != 200:
|
||||||
msg = 'Problem connecting to LDAP server: set.'
|
msg = 'Problem connecting to LDAP server: set.'
|
||||||
utils.alert_tanner(msg)
|
utils.alert_tanner(msg)
|
||||||
|
@ -576,6 +580,7 @@ class MyPasswordChangeSerializer(PasswordChangeSerializer):
|
||||||
)
|
)
|
||||||
|
|
||||||
if utils_auth.wiki_is_configured():
|
if utils_auth.wiki_is_configured():
|
||||||
|
if request_id: utils_stats.set_progress(request_id, 'Changing Wiki password...')
|
||||||
if utils_auth.set_wiki_password(data) != 200:
|
if utils_auth.set_wiki_password(data) != 200:
|
||||||
msg = 'Problem connecting to Wiki Auth server: set.'
|
msg = 'Problem connecting to Wiki Auth server: set.'
|
||||||
utils.alert_tanner(msg)
|
utils.alert_tanner(msg)
|
||||||
|
@ -583,12 +588,16 @@ class MyPasswordChangeSerializer(PasswordChangeSerializer):
|
||||||
raise ValidationError(dict(non_field_errors=msg))
|
raise ValidationError(dict(non_field_errors=msg))
|
||||||
|
|
||||||
if utils_auth.discourse_is_configured():
|
if utils_auth.discourse_is_configured():
|
||||||
|
if request_id: utils_stats.set_progress(request_id, 'Changing Discourse password...')
|
||||||
if utils_auth.set_discourse_password(data) != 200:
|
if utils_auth.set_discourse_password(data) != 200:
|
||||||
msg = 'Problem connecting to Discourse Auth server: set.'
|
msg = 'Problem connecting to Discourse Auth server: set.'
|
||||||
utils.alert_tanner(msg)
|
utils.alert_tanner(msg)
|
||||||
logger.info(msg)
|
logger.info(msg)
|
||||||
raise ValidationError(dict(non_field_errors=msg))
|
raise ValidationError(dict(non_field_errors=msg))
|
||||||
|
|
||||||
|
if request_id: utils_stats.set_progress(request_id, 'Done!')
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
super().save()
|
super().save()
|
||||||
|
|
||||||
class MyPasswordResetSerializer(PasswordResetSerializer):
|
class MyPasswordResetSerializer(PasswordResetSerializer):
|
||||||
|
|
|
@ -5,7 +5,7 @@ import ReactCrop from 'react-image-crop';
|
||||||
import 'react-image-crop/dist/ReactCrop.css';
|
import 'react-image-crop/dist/ReactCrop.css';
|
||||||
import './light.css';
|
import './light.css';
|
||||||
import { Button, Container, Checkbox, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react';
|
import { Button, Container, Checkbox, Divider, Dropdown, Form, Grid, Header, Icon, Image, Menu, Message, Segment, Table } from 'semantic-ui-react';
|
||||||
import { BasicTable, staticUrl, requester } from './utils.js';
|
import { BasicTable, staticUrl, requester, randomString } from './utils.js';
|
||||||
import { LoginForm, SignupForm } from './LoginSignup.js';
|
import { LoginForm, SignupForm } from './LoginSignup.js';
|
||||||
|
|
||||||
function LogoutEverywhere(props) {
|
function LogoutEverywhere(props) {
|
||||||
|
@ -54,6 +54,7 @@ function ChangePasswordForm(props) {
|
||||||
const { token } = props;
|
const { token } = props;
|
||||||
const [input, setInput] = useState({});
|
const [input, setInput] = useState({});
|
||||||
const [error, setError] = useState({});
|
const [error, setError] = useState({});
|
||||||
|
const [progress, setProgress] = useState([]);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
|
|
||||||
|
@ -64,12 +65,28 @@ function ChangePasswordForm(props) {
|
||||||
const handleSubmit = (e) => {
|
const handleSubmit = (e) => {
|
||||||
if (loading) return;
|
if (loading) return;
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
requester('/password/change/', 'POST', token, input)
|
|
||||||
|
const request_id = randomString();
|
||||||
|
const getStatus = () => {
|
||||||
|
requester('/stats/progress/?request_id='+request_id, 'GET')
|
||||||
.then(res => {
|
.then(res => {
|
||||||
|
setProgress(res);
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const interval = setInterval(getStatus, 500);
|
||||||
|
|
||||||
|
const data = { ...input, request_id: request_id };
|
||||||
|
requester('/password/change/', 'POST', token, data)
|
||||||
|
.then(res => {
|
||||||
|
clearInterval(interval);
|
||||||
setError({});
|
setError({});
|
||||||
history.push('/');
|
history.push('/');
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
|
clearInterval(interval);
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
console.log(err);
|
console.log(err);
|
||||||
setError(err.data);
|
setError(err.data);
|
||||||
|
@ -106,6 +123,10 @@ function ChangePasswordForm(props) {
|
||||||
{...makeProps('new_password2')}
|
{...makeProps('new_password2')}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
{progress.map(x => <>{x}<br /></>)}
|
||||||
|
</p>
|
||||||
|
|
||||||
<Form.Button loading={loading} error={error.non_field_errors}>
|
<Form.Button loading={loading} error={error.non_field_errors}>
|
||||||
Submit
|
Submit
|
||||||
</Form.Button>
|
</Form.Button>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user