Ejemplo n.º 1
0
        public async Task <UserDB> CreateUserAsync(CreateUser payload, TraceWriter log, HttpRequestMessage req)
        {
            var tenant   = _applicationConfig.B2CTenant;
            var clientID = _applicationConfig.B2CClient;
            var secret   = _applicationConfig.B2CSecret;

            //  Ceremony
            var authority   = $"{_authorityEndpoint}{tenant}";
            var authContext = new AuthenticationContext(authority);
            var credentials = new ClientCredential(clientID, secret);

            AuthenticationResult result = await authContext.AcquireTokenAsync(_aadGraphResourceId, credentials);

            HttpClient         http      = new HttpClient();
            string             url       = _aadGraphEndpoint + tenant + "/users?" + _aadGraphVersion;
            HttpRequestMessage adRequest = new HttpRequestMessage(HttpMethod.Post, url);

            var userString = JsonConvert.SerializeObject(payload.GetB2CUser());

            adRequest.Content = new StringContent(userString, Encoding.UTF8, "application/json");
            adRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
            HttpResponseMessage adResponse = await http.SendAsync(adRequest);

            string responseText = await adResponse.Content.ReadAsStringAsync();

            if (adResponse.IsSuccessStatusCode == false)
            {
                log.Error($"Error in AD response {adResponse.StatusCode}: {responseText}");
                return(null);
            }

            var b2CUser = JObject.Parse(responseText).ToObject <User>();
            var newUser = new UserDB(b2CUser);

            newUser.organisationId     = payload.organisationId;
            newUser.organisationName   = payload.organisationName;
            newUser.appRole            = payload.AppRole;
            newUser.appRoleDisplayName = payload.AppRoleDisplayName;
            newUser.driverId           = payload.driverId;

            return(await _userRepository.CreateItemAsync(newUser, _userDigestService, req));
        }