private bool CreateUser(AzureADGraphClient azureADGraphClient, PeopleSoftInputClaimsModel inputClaims) { //AzureADGraphClient azureADGraphClient = new AzureADGraphClient(this.AppSettings.Tenant, this.AppSettings.ClientId, this.AppSettings.ClientSecret); // Create the user using Graph API return(azureADGraphClient.CreateAccount( "userName", inputClaims.uid, null, null, inputClaims.email, inputClaims.password, inputClaims.sn, inputClaims.email, inputClaims.givenname).Result); }
private bool UpdateUser(AzureADGraphClient azureADGraphClient, PeopleSoftInputClaimsModel inputClaims, string objectId) { //AzureADGraphClient azureADGraphClient = new AzureADGraphClient(this.AppSettings.Tenant, this.AppSettings.ClientId, this.AppSettings.ClientSecret); // Create the user using Graph API return(azureADGraphClient.UpdateAccount( objectId, "userName", inputClaims.uid, null, null, inputClaims.email, inputClaims.password, inputClaims.sn, inputClaims.email, inputClaims.givenname, (bool)inputClaims.isActivated).Result); }
private IHttpActionResult ProcessRequest() { string input = Request.Content.ReadAsStringAsync().Result; // If not data came in, then return if (this.Request.Content == null) { return(Content(HttpStatusCode.Conflict, new B2CResponseModel("Request content is null", HttpStatusCode.Conflict))); } //// Read the input claims from the request body //using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8)) //{ // input = await reader.ReadToEndAsync(); //} // Check input content value if (string.IsNullOrEmpty(input)) { return(Content(HttpStatusCode.Conflict, new B2CResponseModel("Request content is empty", HttpStatusCode.Conflict))); } // Convert the input string into InputClaimsModel object PeopleSoftInputClaimsModel inputClaims = PeopleSoftInputClaimsModel.Parse(input); if (inputClaims == null) { return(Content(HttpStatusCode.Conflict, new B2CResponseModel("Can not deserialize input claims", HttpStatusCode.Conflict))); } if (string.IsNullOrEmpty(inputClaims.uid)) { return(Content(HttpStatusCode.Conflict, new B2CResponseModel("User 'uid' is null or empty", HttpStatusCode.Conflict))); } if (string.IsNullOrEmpty(inputClaims.password)) { return(Content(HttpStatusCode.Conflict, new B2CResponseModel("Password is null or empty", HttpStatusCode.Conflict))); } //bool isEmail = Regex.IsMatch(emailString, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase); if (string.IsNullOrEmpty(inputClaims.email) || !Regex.IsMatch(inputClaims.email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase)) { return(Content(HttpStatusCode.Conflict, new B2CResponseModel("Email is empty or not in the correct format", HttpStatusCode.Conflict))); } AzureADGraphClient azureADGraphClient = new AzureADGraphClient(ConfigurationManager.AppSettings["Tenant"], ConfigurationManager.AppSettings["ClientId"], ConfigurationManager.AppSettings["ClientSecret"]); GraphAccountModel account = azureADGraphClient.SearcUserBySignInNames(inputClaims.uid).Result; B2CPeopleSoftResponseModel outputClaimsCol = new B2CPeopleSoftResponseModel("", HttpStatusCode.OK); Ldap.Controllers.ValuesController tmp = new Ldap.Controllers.ValuesController(); outputClaimsCol.isMigrated = false; outputClaimsCol.username = inputClaims.uid; //Only migrate account that is not migrated already, and verified successfully within the local LDAP store. if (account == null) { inputClaims.givenname = GetClaimValue(inputClaims.givenname); inputClaims.sn = GetClaimValue(inputClaims.sn); bool result = CreateUser(azureADGraphClient, inputClaims); if (result) { outputClaimsCol.password = GetClaimValue(inputClaims.password); outputClaimsCol.displayName = GetClaimValue(inputClaims.sn); outputClaimsCol.email = inputClaims.email; outputClaimsCol.givenName = inputClaims.givenname; outputClaimsCol.surName = inputClaims.givenname; outputClaimsCol.isMigrated = false; } } //Update user else { //TODO: Check for pasword as may want to stop update to it. inputClaims.givenname = inputClaims.givenname == null ? account.surname : inputClaims.givenname; inputClaims.sn = inputClaims.sn == null ? account.displayName : inputClaims.sn; inputClaims.email = inputClaims.email == null ? account.givenName : inputClaims.email; inputClaims.isActivated = inputClaims.isActivated == null ? account.accountEnabled : inputClaims.isActivated; bool result = UpdateUser(azureADGraphClient, inputClaims, account.objectId); if (result) { outputClaimsCol.password = GetClaimValue(inputClaims.password); outputClaimsCol.displayName = GetClaimValue(inputClaims.sn); outputClaimsCol.email = inputClaims.email; outputClaimsCol.givenName = inputClaims.givenname; outputClaimsCol.surName = inputClaims.givenname; outputClaimsCol.isActivated = (bool)inputClaims.isActivated; //outputClaimsCol.isMigrated = false; } //return Content(HttpStatusCode.Conflict, new B2CResponseModel($"User already exists {inputClaims.uid}", HttpStatusCode.Conflict)); } return(Ok(outputClaimsCol)); }