Working on adding functionality for administrators to directly add users to the application

This commit is contained in:
ReAnzu 2018-02-23 22:05:58 -06:00
parent a5211d9483
commit bc947a14ae
4 changed files with 29 additions and 21 deletions

View file

@ -47,10 +47,12 @@ class TopNavigationController {
topNavigation.hide('users'); topNavigation.hide('users');
} }
if (api.isLoggedIn()) { if (api.isLoggedIn()) {
topNavigation.hide('register'); if (!api.hasPrivilege('users:create:any')) {
topNavigation.hide('register');
}
topNavigation.hide('login'); topNavigation.hide('login');
} else { } else {
if (!api.hasPrivilege('users:create')) { if (!api.hasPrivilege('users:create:self')) {
topNavigation.hide('register'); topNavigation.hide('register');
} }
topNavigation.hide('account'); topNavigation.hide('account');

View file

@ -10,7 +10,7 @@ const EmptyView = require('../views/empty_view.js');
class UserRegistrationController { class UserRegistrationController {
constructor() { constructor() {
if (!api.hasPrivilege('users:create')) { if (!api.hasPrivilege('users:create:self')) {
this._view = new EmptyView(); this._view = new EmptyView();
this._view.showError('Registration is closed.'); this._view.showError('Registration is closed.');
return; return;
@ -30,6 +30,7 @@ class UserRegistrationController {
user.email = e.detail.email; user.email = e.detail.email;
user.password = e.detail.password; user.password = e.detail.password;
user.save().then(() => { user.save().then(() => {
// TODO: Support the flow where an admin creates a user. Don't log them out...
api.forget(); api.forget();
return api.login(e.detail.name, e.detail.password, false); return api.login(e.detail.name, e.detail.password, false);
}).then(() => { }).then(() => {

View file

@ -26,24 +26,29 @@ def get_users(
@rest.routes.post('/users/?') @rest.routes.post('/users/?')
def create_user( def create_user(
ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response: ctx: rest.Context, _params: Dict[str, str] = {}) -> rest.Response:
if config.config['registration_enabled']: if ctx.user.user_id is None:
auth.verify_privilege(ctx.user, 'users:create') auth.verify_privilege(ctx.user, 'users:create:self')
name = ctx.get_param_as_string('name')
password = ctx.get_param_as_string('password')
email = ctx.get_param_as_string('email', default='')
user = users.create_user(name, password, email)
if ctx.has_param('rank'):
users.update_user_rank(user, ctx.get_param_as_string('rank'), ctx.user)
if ctx.has_param('avatarStyle'):
users.update_user_avatar(
user,
ctx.get_param_as_string('avatarStyle'),
ctx.get_file('avatar', default=b''))
ctx.session.add(user)
ctx.session.commit()
return _serialize(ctx, user, force_show_email=True)
else: else:
raise errors.ValidationError('User Registration Disabled') auth.verify_privilege(ctx.user, 'users:create:any')
name = ctx.get_param_as_string('name')
password = ctx.get_param_as_string('password')
email = ctx.get_param_as_string('email', default='')
user = users.create_user(name, password, email)
if ctx.has_param('rank'):
users.update_user_rank(user, ctx.get_param_as_string('rank'), ctx.user)
if ctx.has_param('avatarStyle'):
users.update_user_avatar(
user,
ctx.get_param_as_string('avatarStyle'),
ctx.get_file('avatar', default=b''))
ctx.session.add(user)
ctx.session.commit()
if ctx.user.user_id is not None:
user = ctx.user
return _serialize(ctx, user, force_show_email=True)
@rest.routes.get('/user/(?P<user_name>[^/]+)/?') @rest.routes.get('/user/(?P<user_name>[^/]+)/?')

View file

@ -6,7 +6,7 @@ from szurubooru.func import users
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def inject_config(config_injector): def inject_config(config_injector):
config_injector({'privileges': {'users:create': 'regular'}}) config_injector({'privileges': {'users:create:self': 'regular'}})
def test_creating_user(user_factory, context_factory, fake_datetime): def test_creating_user(user_factory, context_factory, fake_datetime):