Add useSSORegistration option for gold users on admin creation

This commit is contained in:
Convly 2021-02-10 11:57:11 +01:00
parent 4369af5361
commit 9f01afca88
3 changed files with 71 additions and 0 deletions

View File

@ -0,0 +1,36 @@
'use strict';
const { pick } = require('lodash/fp');
const { validateUserCreationInput } = require('../validation/user');
const pickUserCreationAttributes = pick(['firstname', 'lastname', 'email', 'roles']);
module.exports = {
async create(ctx) {
const { body } = ctx.request;
try {
await validateUserCreationInput(body);
} catch (err) {
return ctx.badRequest('ValidationError', err);
}
const attributes = pickUserCreationAttributes(body);
const { useSSORegistration } = body;
const userAlreadyExists = await strapi.admin.services.user.exists({ email: attributes.email });
if (userAlreadyExists) {
return ctx.badRequest('Email already taken');
}
if (useSSORegistration) {
Object.assign(attributes, { registrationToken: null, isActive: true });
}
const createdUser = await strapi.admin.services.user.create(attributes);
const userInfo = strapi.admin.services.user.sanitizeUser(createdUser);
ctx.created({ data: userInfo });
},
};

View File

@ -0,0 +1,29 @@
'use strict';
const { yup, formatYupErrors } = require('strapi-utils');
// eslint-disable-next-line node/no-extraneous-require
const { features } = require('strapi/lib/utils/ee');
const { schemas } = require('../../validation/user');
const handleReject = error => Promise.reject(formatYupErrors(error));
const ssoUserCreationInputExtension = yup
.object()
.shape({
useSSORegistration: yup.boolean(),
})
.noUnknown();
const validateUserCreationInput = data => {
let schema = schemas.userCreationSchema;
if (features.isEnabled('sso')) {
schema = schema.concat(ssoUserCreationInputExtension);
}
return schema.validate(data, { strict: true, abortEarly: false }).catch(handleReject);
};
module.exports = {
validateUserCreationInput,
};

View File

@ -73,4 +73,10 @@ module.exports = {
validateProfileUpdateInput,
validateUserUpdateInput,
validateUsersDeleteInput,
schemas: {
userCreationSchema,
usersDeleteSchema,
userUpdateSchema,
},
};