public virtual async Task <IScimResponse <ScimUser> > CreateUser(ScimUser user) { _CanonicalizationService.Canonicalize(user, ServerConfiguration.GetScimTypeDefinition(user.GetType())); var validator = await _ResourceValidatorFactory.CreateValidator(user); var validationResult = (await validator.ValidateCreateAsync(user)).ToScimValidationResult(); if (!validationResult) { return(new ScimErrorResponse <ScimUser>(validationResult.Errors.First())); } if (user.Password != null) { user.Password = _PasswordManager.CreateHash(user.Password); } user.Meta = new ResourceMetadata(ScimConstants.ResourceTypes.User); var userRecord = await _UserRepository.CreateUser(user); if (userRecord == null) { return(new ScimErrorResponse <ScimUser>( new ScimError( HttpStatusCode.BadRequest))); } // version may require the User.Id which is often generated using database unique constraints // therefore, we will set the version after persistence SetResourceVersion(userRecord); return(new ScimDataResponse <ScimUser>(userRecord)); }
public virtual async Task <IScimResponse <ScimGroup> > CreateGroup(ScimGroup group) { _CanonicalizationService.Canonicalize(group, ServerConfiguration.GetScimTypeDefinition(group.GetType())); var validator = await _ResourceValidatorFactory.CreateValidator(group); var validationResult = (await validator.ValidateCreateAsync(group)).ToScimValidationResult(); if (!validationResult) { return(new ScimErrorResponse <ScimGroup>(validationResult.Errors.First())); } group.Meta = new ResourceMetadata(ScimConstants.ResourceTypes.Group); var groupRecord = await _GroupRepository.CreateGroup(group); SetResourceVersion(groupRecord); return(new ScimDataResponse <ScimGroup>(groupRecord)); }