Compare commits
7 Commits
70883db5ad
...
v0.3.1
Author | SHA1 | Date | |
---|---|---|---|
294f1e42f7 | |||
070ce19fcc | |||
615e59fc6d | |||
68314a4ed2 | |||
b90761fd2c | |||
af03193217 | |||
730a75c44d |
@ -1,5 +1,7 @@
|
|||||||
SERVER_NAME= # URL where this will be hosted.
|
SERVER_NAME= # URL where this will be hosted.
|
||||||
|
|
||||||
|
TZ=Europe/London # Time Zone
|
||||||
|
|
||||||
## Flask Configuration
|
## Flask Configuration
|
||||||
SECRET_KEY= # Long, secure, secret string.
|
SECRET_KEY= # Long, secure, secret string.
|
||||||
DATA=./data/
|
DATA=./data/
|
||||||
|
56
README.md
56
README.md
@ -166,3 +166,59 @@ The app uses [OpenDyslexic](https://opendyslexic.org/), which is available on-li
|
|||||||
It also has the option of rendering in other system fonts, but this can vary depending on your operating system.
|
It also has the option of rendering in other system fonts, but this can vary depending on your operating system.
|
||||||
Because these are proprietary fonts, they cannot be made available on-line in the same way as open source ones should your system not have them.
|
Because these are proprietary fonts, they cannot be made available on-line in the same way as open source ones should your system not have them.
|
||||||
Some fonts may not display correctly as a result.
|
Some fonts may not display correctly as a result.
|
||||||
|
|
||||||
|
## Updating the Installation
|
||||||
|
|
||||||
|
If the app is updated, you can update the version on your installation using the following method:
|
||||||
|
|
||||||
|
### Navigate to the root folder
|
||||||
|
|
||||||
|
This will be the root folder into which you cloned the git repository when you set the app up.
|
||||||
|
|
||||||
|
### Stash your local changes
|
||||||
|
|
||||||
|
When you update the code, there is a risk the changes you made to your configuration will be overwritten.
|
||||||
|
To avoid this, use the following command:
|
||||||
|
|
||||||
|
```git stash```
|
||||||
|
|
||||||
|
This will stash the changes you made, and we can re-apply the changes once the new code has been downloaded.
|
||||||
|
If you do not have any other changes stashed, the index number of these changes should be `0` in a later step.
|
||||||
|
If there are other changes, make sure to note what the correct index number for the stashed changes is.
|
||||||
|
|
||||||
|
### Take down the Docker containers
|
||||||
|
|
||||||
|
We will need to stop the current containers with the following command:
|
||||||
|
|
||||||
|
```sudo docker compose down```
|
||||||
|
|
||||||
|
This may take a few seconds.
|
||||||
|
|
||||||
|
### Pull the updated code
|
||||||
|
|
||||||
|
Download the updated code from the Git repository:
|
||||||
|
|
||||||
|
```git pull```
|
||||||
|
|
||||||
|
This step might fail if you have any un-stashed local changed.
|
||||||
|
|
||||||
|
### Re-Apply your local configurations
|
||||||
|
|
||||||
|
Because we stashed our local configurations, we can re-apply them once again:
|
||||||
|
|
||||||
|
```git stash pop 0```
|
||||||
|
|
||||||
|
The index number (`0`) is assuming there were no other changes saved on your git repository.
|
||||||
|
If you have a different index number for the relevant changes from the above step, change this accordingly.
|
||||||
|
|
||||||
|
### Re-build the docker image
|
||||||
|
|
||||||
|
Now that we have the base code downloaded, we just need to update the docker image:
|
||||||
|
|
||||||
|
```sudo docker compose build app```
|
||||||
|
|
||||||
|
### Re-build the containers
|
||||||
|
|
||||||
|
This is the same last step as running the containers in the last step of the installation:
|
||||||
|
|
||||||
|
```sudo docker compose up -d```
|
||||||
|
@ -117,7 +117,8 @@ def _reset():
|
|||||||
user.clear_reset_tokens()
|
user.clear_reset_tokens()
|
||||||
if request.args.get('verification') == verification_token:
|
if request.args.get('verification') == verification_token:
|
||||||
form = UpdatePassword()
|
form = UpdatePassword()
|
||||||
return render_template('/admin/auth/update-password.html', form=form, user=user.id)
|
session['user'] = user.id
|
||||||
|
return render_template('/admin/auth/update-password.html', form=form)
|
||||||
flash('The verification of your password reset request failed and the token has been invalidated. Please make a new reset password request.', 'error')
|
flash('The verification of your password reset request failed and the token has been invalidated. Please make a new reset password request.', 'error')
|
||||||
|
|
||||||
return render_template('/admin/auth/reset.html', form=form)
|
return render_template('/admin/auth/reset.html', form=form)
|
||||||
@ -126,7 +127,7 @@ def _reset():
|
|||||||
def _update_password():
|
def _update_password():
|
||||||
form = UpdatePassword()
|
form = UpdatePassword()
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
user = request.form.get('user')
|
user = session.pop('user')
|
||||||
user = User.query.filter_by(id=user).first()
|
user = User.query.filter_by(id=user).first()
|
||||||
user.update(password=request.form.get('password'))
|
user.update(password=request.form.get('password'))
|
||||||
session['remembered_username'] = user.get_username()
|
session['remembered_username'] = user.get_username()
|
||||||
|
@ -194,7 +194,8 @@ class User(UserMixin, db.Model):
|
|||||||
if entry.get_email() == email and not entry == self: return False, f'The email address {email} is already in use.'
|
if entry.get_email() == email and not entry == self: return False, f'The email address {email} is already in use.'
|
||||||
self.set_email(email)
|
self.set_email(email)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
write('system.log', f'Information for user {self.get_username()} has been updated by {current_user.get_username()}.')
|
_current_user = current_user.get_username() if current_user.is_authenticated else 'anonymous'
|
||||||
|
write('system.log', f'Information for user {self.get_username()} has been updated by {_current_user}.')
|
||||||
if notify:
|
if notify:
|
||||||
message = Message(
|
message = Message(
|
||||||
subject='RefTest | Account Update',
|
subject='RefTest | Account Update',
|
||||||
@ -202,7 +203,7 @@ class User(UserMixin, db.Model):
|
|||||||
bcc=[old_email,current_user.get_email()],
|
bcc=[old_email,current_user.get_email()],
|
||||||
body=f"""
|
body=f"""
|
||||||
Hello {self.get_username()},\n\n
|
Hello {self.get_username()},\n\n
|
||||||
Your administrator account for the SKA RefTest App has been updated by {current_user.get_username()}.\n\n
|
Your administrator account for the SKA RefTest App has been updated by {_current_user}.\n\n
|
||||||
Your new account details are as follows:\n\n
|
Your new account details are as follows:\n\n
|
||||||
Email: {email}\n
|
Email: {email}\n
|
||||||
Password: {password if password else '<same as old>'}\n\n
|
Password: {password if password else '<same as old>'}\n\n
|
||||||
@ -213,7 +214,7 @@ class User(UserMixin, db.Model):
|
|||||||
""",
|
""",
|
||||||
html=f"""
|
html=f"""
|
||||||
<p>Hello {self.get_username()},</p>
|
<p>Hello {self.get_username()},</p>
|
||||||
<p>Your administrator account for the SKA RefTest App has been updated by {current_user.get_username()}.</p>
|
<p>Your administrator account for the SKA RefTest App has been updated by {_current_user}.</p>
|
||||||
<p>Your new account details are as follows:</p>
|
<p>Your new account details are as follows:</p>
|
||||||
<p>Email: {email} <br/> Password: <strong>{password if password else '<same as old>'}</strong></p>
|
<p>Email: {email} <br/> Password: <strong>{password if password else '<same as old>'}</strong></p>
|
||||||
<p>You can update your email address and password by logging in to the admin console using the following URL:</p>
|
<p>You can update your email address and password by logging in to the admin console using the following URL:</p>
|
||||||
|
@ -57,5 +57,5 @@ def get_dataset_choices():
|
|||||||
return dataset_choices
|
return dataset_choices
|
||||||
|
|
||||||
def send_errors_to_client(form):
|
def send_errors_to_client(form):
|
||||||
errors = [*form.errors]
|
errors = [*form.errors.values()]
|
||||||
return jsonify({ 'error': errors}), 400
|
return jsonify({ 'error': errors}), 400
|
Reference in New Issue
Block a user