Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }