Esempio n. 1
0
        public async Task <ActionResult> Post([FromBody] UserDto user)
        {
            var hasher = new PasswordHasher <MongoExternalUser>();

            try
            {
                var mongoExternalUser = await _userStore.AutoProvisionUser("IdSrv", user.Username, new List <Claim>
                {
                    new Claim(JwtClaimTypes.Name, user.Username),
                    new Claim(JwtClaimTypes.Email, user.Email)
                });

                var hash = hasher.HashPassword(mongoExternalUser, user.Password);
                await _userStore.SetPasswordHashForUser(mongoExternalUser, hash);

                return(await Task.FromResult(new OkResult()));
            }
            catch (Exception e)
            {
                if (e is UserExistsException)
                {
                    var problem = new ProblemDocument
                    {
                        ProblemType = new Uri("http://tempuri.org/errors/user-already-exists"),
                        Title       = $"User {user.Username} already exists",
                        StatusCode  = HttpStatusCode.BadRequest
                    };

                    var contentResult = new ContentResult();
                    contentResult.Content     = await new ProblemContent(problem).ReadAsStringAsync();
                    contentResult.ContentType = "application/problem+json";
                    contentResult.StatusCode  = (int?)HttpStatusCode.BadRequest;
                    return(await Task.FromResult(contentResult));
                }

                return(await Task.FromResult(new StatusCodeResult(500)));
            }
        }