add admin_api.{users, instance_invites} blueprints

- admin_schemas: add USER_CREATE
This commit is contained in:
Luna 2019-03-16 16:45:13 -03:00
parent 76048f3abc
commit 5fb27c04a2
7 changed files with 91 additions and 6 deletions

View File

@ -40,3 +40,9 @@ FEATURES = {
'schema': {'coerce': lambda x: Feature(x)}
}
}
USER_CREATE = {
'username': {'type': 'username', 'required': True},
'email': {'type': 'email', 'required': True},
'password': {'type': 'string', 'minlength': 5, 'required': True},
}

View File

@ -20,5 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from .voice import bp as voice
from .features import bp as features
from .guilds import bp as guilds
from .users import bp as users
from .instance_invites import bp as instance_invites
__all__ = ['voice', 'features', 'guilds']
__all__ = ['voice', 'features', 'guilds', 'users', 'instance_invites']

View File

@ -0,0 +1,36 @@
"""
Litecord
Copyright (C) 2018-2019 Luna Mendes
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from quart import Blueprint, jsonify, current_app as app
from litecord.auth import admin_check
bp = Blueprint('instance_invites', __name__)
@bp.route('', methods=['GET'])
async def _all_instance_invites():
await admin_check()
rows = await app.db.fetch("""
SELECT code, created_at, uses, max_uses
FROM instance_invites
""")
return jsonify([dict(row) for row in rows])

View File

@ -0,0 +1,40 @@
"""
Litecord
Copyright (C) 2018-2019 Luna Mendes
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from quart import Blueprint, jsonify, current_app as app, request
from litecord.auth import admin_check
from litecord.blueprints.auth import create_user
from litecord.schemas import validate
from litecord.admin_schemas import USER_CREATE
bp = Blueprint('users_admin', __name__)
@bp.route('', methods=['POST'])
async def _create_user():
await admin_check()
j = validate(await request.get_json(), USER_CREATE)
user_id = await create_user(j['username'], j['email'], j['password'])
return jsonify(
await app.storage.get_user(user_id)
)

View File

@ -18,3 +18,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from .command import setup as migration
__all__ = ['migration']

View File

@ -17,9 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import base64
import itsdangerous
import bcrypt
from litecord.blueprints.auth import create_user, make_token
from litecord.blueprints.users import delete_user
from litecord.enums import UserFlags

6
run.py
View File

@ -58,7 +58,7 @@ from litecord.blueprints.user.billing_job import payment_job
from litecord.blueprints.admin_api import (
voice as voice_admin, features as features_admin,
guilds as guilds_admin
guilds as guilds_admin, users as users_admin, instance_invites
)
from litecord.blueprints.admin_api.voice import guild_region_check
@ -146,7 +146,9 @@ def set_blueprints(app_):
voice_admin: '/admin/voice',
features_admin: '/admin/guilds',
guilds_admin: '/admin/guilds'
guilds_admin: '/admin/guilds',
users_admin: '/admin/users',
instance_invites: '/admin/instance/invites'
}
for bp, suffix in bps.items():