diff --git a/music/api/api.py b/music/api/api.py index a3bef1b..c4c3616 100644 --- a/music/api/api.py +++ b/music/api/api.py @@ -7,7 +7,7 @@ import json import logging from datetime import datetime -from music.api.decorators import login_or_jwt, login_required, login_or_jwt, \ +from music.api.decorators import login_or_jwt, login_required, \ admin_required, cloud_task, validate_json, validate_args, spotify_link_required, no_locked_users from music.cloud import queue_run_user_playlist, offload_or_run_user_playlist from music.cloud.tasks import update_all_user_playlists, update_playlists @@ -184,10 +184,11 @@ def playlist_post_put_route(auth=None, user=None): return jsonify({"message": 'playlist updated', "status": "success"}), 200 + @blueprint.route('/user', methods=['GET', 'POST']) @login_or_jwt @no_locked_users -def user_route(auth=None, user=None): +def user_route(auth=None, user: User=None): assert user is not None if request.method == 'GET': @@ -222,6 +223,18 @@ def user_route(auth=None, user=None): if user.lastfm_username is None: user.lastfm_username = "" + if 'apns_token' in request_json: + token = request_json['apns_token'] + + if user.apns_tokens is None: + user.apns_tokens = [] + + if token not in user.apns_tokens: + logger.info(f'adding apns token {user.username} -> {token}') + user.apns_tokens = user.apns_tokens + [token] + else: + logger.info(f'skipping duplicate apns token {user.username} -> {token}') + user.update() logger.info(f'updated {user.username}') diff --git a/music/model/user.py b/music/model/user.py index 3ae6139..d058358 100644 --- a/music/model/user.py +++ b/music/model/user.py @@ -1,7 +1,7 @@ import logging from fireo.models import Model -from fireo.fields import TextField, BooleanField, DateTime, NumberField +from fireo.fields import TextField, BooleanField, DateTime, NumberField, ListField from music.model.playlist import Playlist @@ -32,6 +32,8 @@ class User(Model): lastfm_username = TextField() + apns_tokens = ListField(default=[]) + def check_password(self, password): return check_password_hash(self.password, password)