aboutsummaryrefslogtreecommitdiff
path: root/server/szurubooru/api/user_api.py
blob: 3cb2c068633bf939122b6f94f5d980f127059c6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from szurubooru import search
from szurubooru.api.base_api import BaseApi
from szurubooru.func import auth, users

class UserListApi(BaseApi):
    def __init__(self):
        super().__init__()
        self._search_executor = search.SearchExecutor(search.UserSearchConfig())

    def get(self, ctx):
        auth.verify_privilege(ctx.user, 'users:list')
        return self._search_executor.execute_and_serialize(
            ctx, lambda user: users.serialize_user(user, ctx.user))

    def post(self, ctx):
        auth.verify_privilege(ctx.user, 'users:create')
        name = ctx.get_param_as_string('name', required=True)
        password = ctx.get_param_as_string('password', required=True)
        email = ctx.get_param_as_string('email', required=False, default='')
        user = users.create_user(name, password, email, ctx.user)
        if ctx.has_param('rank'):
            users.update_rank(user, ctx.get_param_as_string('rank'), ctx.user)
        if ctx.has_param('avatarStyle'):
            users.update_avatar(
                user,
                ctx.get_param_as_string('avatarStyle'),
                ctx.get_file('avatar'))
        ctx.session.add(user)
        ctx.session.commit()
        return users.serialize_user_with_details(
            user, ctx.user, force_show_email=True)

class UserDetailApi(BaseApi):
    def get(self, ctx, user_name):
        auth.verify_privilege(ctx.user, 'users:view')
        user = users.get_user_by_name(user_name)
        return users.serialize_user_with_details(user, ctx.user)

    def put(self, ctx, user_name):
        user = users.get_user_by_name(user_name)
        infix = 'self' if ctx.user.user_id == user.user_id else 'any'
        if ctx.has_param('name'):
            auth.verify_privilege(ctx.user, 'users:edit:%s:name' % infix)
            users.update_name(user, ctx.get_param_as_string('name'), ctx.user)
        if ctx.has_param('password'):
            auth.verify_privilege(ctx.user, 'users:edit:%s:pass' % infix)
            users.update_password(user, ctx.get_param_as_string('password'))
        if ctx.has_param('email'):
            auth.verify_privilege(ctx.user, 'users:edit:%s:email' % infix)
            users.update_email(user, ctx.get_param_as_string('email'))
        if ctx.has_param('rank'):
            auth.verify_privilege(ctx.user, 'users:edit:%s:rank' % infix)
            users.update_rank(user, ctx.get_param_as_string('rank'), ctx.user)
        if ctx.has_param('avatarStyle'):
            auth.verify_privilege(ctx.user, 'users:edit:%s:avatar' % infix)
            users.update_avatar(
                user,
                ctx.get_param_as_string('avatarStyle'),
                ctx.get_file('avatar'))
        ctx.session.commit()
        return users.serialize_user_with_details(user, ctx.user)

    def delete(self, ctx, user_name):
        user = users.get_user_by_name(user_name)
        infix = 'self' if ctx.user.user_id == user.user_id else 'any'
        auth.verify_privilege(ctx.user, 'users:delete:%s' % infix)
        ctx.session.delete(user)
        ctx.session.commit()
        return {}

© 2015 - 2026 Jakob L. Kreuze