Skip to content
Snippets Groups Projects
Commit 77fc8a42 authored by Patrick Jentsch's avatar Patrick Jentsch
Browse files

Move the last bits of the settings package to the user package

parent 6abf119c
No related branches found
No related tags found
No related merge requests found
/*****************************************************************************
* Settings *
* Fetch requests for /users/<entity>/settings routes *
*****************************************************************************/
Requests.users.entity.settings = {};
Requests.users.entity.settings.profilePrivacy = {};
Requests.users.entity.settings.profilePrivacy.update = (userId, profilePrivacySetting, enabled) => {
let input = `/users/${userId}/settings/profile-privacy/${profilePrivacySetting}`;
let init = {
method: 'PUT',
body: JSON.stringify(enabled)
};
return Requests.JSONfetch(input, init);
}
......@@ -14,25 +14,12 @@ Requests.users.entity.delete = (userId) => {
return Requests.JSONfetch(input, init);
};
Requests.users.entity.settings = {};
Requests.users.entity.avatar = {};
Requests.users.entity.settings.avatar = {};
Requests.users.entity.settings.avatar.delete = (userId) => {
let input = `/users/${userId}/settings/avatar`;
Requests.users.entity.avatar.delete = (userId) => {
let input = `/users/${userId}/avatar`;
let init = {
method: 'DELETE'
};
return Requests.JSONfetch(input, init);
}
Requests.users.entity.settings.profilePrivacy = {};
Requests.users.entity.settings.profilePrivacy.update = (userId, profilePrivacySetting, enabled) => {
let input = `/users/${userId}/settings/profile-privacy/${profilePrivacySetting}`;
let init = {
method: 'PUT',
body: JSON.stringify(enabled)
};
return Requests.JSONfetch(input, init);
}
......@@ -66,7 +66,8 @@
'js/Requests/corpora/files.js',
'js/Requests/corpora/followers.js',
'js/Requests/jobs/jobs.js',
'js/Requests/users/users.js'
'js/Requests/users/users.js',
'js/Requests/users/settings.js'
%}
<script src="{{ ASSET_URL }}"></script>
{%- endassets %}
......
......@@ -213,7 +213,7 @@ avatarUploadElement.addEventListener('change', () => {
});
document.querySelector('#delete-avatar').addEventListener('click', () => {
Requests.users.entity.settings.avatar.delete({{ user.hashid|tojson }})
Requests.users.entity.avatar.delete({{ user.hashid|tojson }})
.then(
(response) => {
avatarPreviewElement.src = {{ url_for('static', filename='images/user_avatar.png')|tojson }};
......
......@@ -2,5 +2,5 @@ from flask import Blueprint
bp = Blueprint('users', __name__)
from . import events, routes
from . import events, json_routes, routes
from . import settings
......@@ -3,7 +3,7 @@ from flask_login import current_user, login_required, logout_user
from threading import Thread
from app import db
from app.decorators import content_negotiation
from app.models import User
from app.models import Avatar, User
from . import bp
......@@ -22,7 +22,7 @@ def delete_user(user_id):
abort(403)
thread = Thread(
target=_delete_user,
args=(current_app._get_current_object(), user_id)
args=(current_app._get_current_object(), user.id)
)
if user == current_user:
logout_user()
......@@ -31,3 +31,28 @@ def delete_user(user_id):
'message': f'User "{user.username}" marked for deletion'
}
return response_data, 202
@bp.route('/<hashid:user_id>/avatar', methods=['DELETE'])
@content_negotiation(produces='application/json')
def delete_user_avatar(user_id):
def _delete_avatar(app, avatar_id):
with app.app_context():
avatar = Avatar.query.get(avatar_id)
avatar.delete()
db.session.commit()
user = User.query.get_or_404(user_id)
if user.avatar is None:
abort(404)
if not (user == current_user or current_user.is_administrator()):
abort(403)
thread = Thread(
target=_delete_avatar,
args=(current_app._get_current_object(), user.avatar.id)
)
thread.start()
response_data = {
'message': f'Avatar marked for deletion'
}
return response_data, 202
from flask import abort, current_app, request
from flask import abort, request
from flask_login import current_user, login_required
from threading import Thread
import os
from app import db
from app.decorators import content_negotiation
from app.models import Avatar, User, ProfilePrivacySettings
from app.models import User, ProfilePrivacySettings
from . import bp
@bp.route('/<hashid:user_id>/settings/avatar', methods=['DELETE'])
@content_negotiation(produces='application/json')
def delete_user_avatar(user_id):
def _delete_avatar(app, avatar_id):
with app.app_context():
avatar = Avatar.query.get(avatar_id)
avatar.delete()
db.session.commit()
user = User.query.get_or_404(user_id)
if user.avatar is None:
abort(404)
if not (user == current_user or current_user.is_administrator()):
abort(403)
thread = Thread(
target=_delete_avatar,
args=(current_app._get_current_object(), user.avatar.id)
)
thread.start()
response_data = {
'message': f'Avatar marked for deletion'
}
return response_data, 202
@bp.route('/<hashid:user_id>/settings/profile-privacy/is-public', methods=['PUT'])
@login_required
@content_negotiation(consumes='application/json', produces='application/json')
......
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