public async Task <IScimResult <ScimUser> > ValidateUpdate(string resourceAsString, string schema) { var user = JsonConvert.DeserializeObject <ScimUser>(resourceAsString); var schemaResult = HasExpectedSchemas(user, schema); if (schemaResult.Status == ScimResultStatus.Failure) { return(schemaResult); } if (string.IsNullOrWhiteSpace(user.Id)) { return(ScimResult <ScimUser> .Error(ScimStatusCode.Status400BadRequest, "Id is required on an update")); } var existingUser = await userStore.GetById(user.Id); if (existingUser == null) { return(ScimResult <ScimUser> .Error(ScimStatusCode.Status400BadRequest, "Cannot update a user that does not exist")); } return(ScimResult <ScimUser> .Success(user)); }
private IScimResult <ScimUser> HasExpectedSchemas(ScimUser user, string schema) { if (user.Schemas == null || !user.Schemas.Any()) { return(ScimResult <ScimUser> .Error(ScimStatusCode.Status400BadRequest, "Resource doesn't contain any schemas")); } var hasExpectedSchema = user.Schemas.Contains(schema); if (!hasExpectedSchema) { return(ScimResult <ScimUser> .Error(ScimStatusCode.Status400BadRequest, "Resource doesn't contain expected schema")); } return(ScimResult <ScimUser> .Success(user)); }
public async Task <IScimResult <User> > Add(User resource, IEnumerable <ScimExtensionValue> scimExtensions, string resourceSchema) { var user = await dbContext.Users.FirstOrDefaultAsync(u => u.UserName == resource.UserName); if (user != null) { return(ScimResult <User> .Error(ScimStatusCode.Status409Conflict, $"User with the username '{user.UserName}' already exists")); } var mappedUser = userMapper.ToEntity(resource); mappedUser.Id = Guid.NewGuid().ToString(); dbContext.Users.Add(mappedUser); await dbContext.SaveChangesAsync(); return(ScimResult <User> .Success(userMapper.ToDomain(mappedUser))); }
public async Task <IScimResult <User> > Update(User resource, IEnumerable <ScimExtensionValue> scimExtensions, string resourceSchema) { var user = await dbContext.Users.FirstOrDefaultAsync(u => u.Id == resource.Id); if (user == null) { return(ScimResult <User> .Error(ScimStatusCode.Status404NotFound, $"User doesn't exist")); } var mappedUser = userMapper.ToEntity(resource); //... user.UserName = mappedUser.UserName; //... dbContext.Users.Update(user); await dbContext.SaveChangesAsync(); return(ScimResult <User> .Success(userMapper.ToDomain(user))); }
public Task <IScimResult <ScimUser> > ValidateAdd(string resourceAsString, string schema) { var user = JsonConvert.DeserializeObject <ScimUser>(resourceAsString); var schemaResult = HasExpectedSchemas(user, schema); if (schemaResult.Status == ScimResultStatus.Failure) { return(Task.FromResult(schemaResult)); } if (string.IsNullOrWhiteSpace(user.UserName)) { var error = ScimResult <ScimUser> .Error(ScimStatusCode.Status400BadRequest, "Username is required on User"); return(Task.FromResult(error as IScimResult <ScimUser>)); } var success = ScimResult <ScimUser> .Success(user); return(Task.FromResult(success as IScimResult <ScimUser>)); }