diff --git a/tubearchivist/api/urls.py b/tubearchivist/api/urls.py index 1f6786a..8b075f2 100644 --- a/tubearchivist/api/urls.py +++ b/tubearchivist/api/urls.py @@ -121,6 +121,11 @@ urlpatterns = [ views.TaskIDView.as_view(), name="api-task-id", ), + path( + "config/user/", + views.UserConfigView.as_view(), + name="api-config-user", + ), path( "cookie/", views.CookieView.as_view(), diff --git a/tubearchivist/api/views.py b/tubearchivist/api/views.py index 6f2aaad..0e64d10 100644 --- a/tubearchivist/api/views.py +++ b/tubearchivist/api/views.py @@ -23,6 +23,7 @@ from home.src.ta.settings import EnvironmentSettings from home.src.ta.ta_redis import RedisArchivist from home.src.ta.task_manager import TaskCommand, TaskManager from home.src.ta.urlparser import Parser +from home.src.ta.users import UserConfig from home.tasks import ( BaseTask, check_reindex, @@ -981,6 +982,42 @@ class RefreshView(ApiBaseView): return Response(data) +class UserConfigView(ApiBaseView): + """resolves to /api/config/user/ + GET: return current user config + POST: update user config + """ + + def get(self, request): + """get config""" + user_id = request.user.id + response = UserConfig(user_id).get_config() + response.update({"user_id": user_id}) + + return Response(response) + + def post(self, request): + """update config""" + user_id = request.user.id + data = request.data + + user_conf = UserConfig(user_id) + for key, value in data.items(): + try: + user_conf.set_value(key, value) + except ValueError as err: + message = { + "status": "Bad Request", + "message": f"failed updating {key} to '{value}', {err}", + } + return Response(message, status=400) + + response = user_conf.get_config() + response.update({"user_id": user_id}) + + return Response(response) + + class CookieView(ApiBaseView): """resolves to /api/cookie/ GET: check if cookie is enabled