public async Task <Tuple <bool, string, string> > UpdateUser(ActiveDirectoryClient azureGraphclient, string UserEmailAddress, string title,
                                                                     string Department, string City, string Phone)
        {
            string userObjectID = string.Empty;

            bool   ActionStatus = false;
            string message      = string.Empty;

            if (azureGraphclient == null || string.IsNullOrEmpty(UserEmailAddress))
            {
                return(new Tuple <bool, string, string>(ActionStatus, "Invalid input", null));
            }
            else
            {
                try
                {
                    Microsoft.Azure.ActiveDirectory.GraphClient.User userInstance = (Microsoft.Azure.ActiveDirectory.GraphClient.User)
                                                                                    azureGraphclient.Users.Where(a => a.Mail.Equals(UserEmailAddress, StringComparison.InvariantCultureIgnoreCase) ||
                                                                                                                 a.UserPrincipalName.Equals(UserEmailAddress, StringComparison.InvariantCultureIgnoreCase)).ExecuteAsync().Result.CurrentPage.FirstOrDefault();
                    if (userInstance != null)
                    {
                        userObjectID = userInstance.ObjectId;

                        userInstance.JobTitle        = title;
                        userInstance.Department      = Department;
                        userInstance.City            = City;
                        userInstance.TelephoneNumber = Phone;

                        await userInstance.UpdateAsync();

                        userInstance.GetContext().SaveChanges();

                        ActionStatus = true;
                        message      = "Successfully updated user";
                    }
                    else
                    {
                        message = "Invalid user";
                    }
                }
                catch (Exception ex)
                {
                    message = ex.Message + (ex.InnerException != null ? Environment.NewLine + ex.InnerException.Message : "");
                }
            }

            return(new Tuple <bool, string, string>(ActionStatus, message, userObjectID.ToString()));
        }
        public async Task <Tuple <bool, string, string, string, string> > AssignExtensionAttributeToUser(ActiveDirectoryClient azureGraphclient, string UserEmailAddress, string AppName,
                                                                                                         string AppExtAttribName, string ExtAttribValue)
        {
            Guid userObjectID = Guid.Empty, approleid = Guid.Empty, srvpr = Guid.Empty;

            bool   ActionStatus = false;
            string message      = string.Empty;

            if (azureGraphclient == null || string.IsNullOrEmpty(AppName) || string.IsNullOrEmpty(AppExtAttribName) || string.IsNullOrEmpty(ExtAttribValue))
            {
                return(new Tuple <bool, string, string, string, string>(ActionStatus, "Invalid input", null, null, null));
            }
            else
            {
                try
                {
                    //get instance of extension attribute
                    var appi = azureGraphclient.Applications.Where(s => s.DisplayName == AppName).ExecuteAsync().Result.CurrentPage.FirstOrDefault();
                    if (appi != null)
                    {
                        var exts = azureGraphclient.Applications[appi.ObjectId].ExtensionProperties.ExecuteAsync().Result.EnumerateAllAsync().Result;
                        //var appexts = ((Application)appi).ExtensionProperties;

                        IExtensionProperty extAttrib = exts.Where(a => a.Name == AppExtAttribName).FirstOrDefault();

                        if (extAttrib != null)
                        {
                            Microsoft.Azure.ActiveDirectory.GraphClient.User userInstance = (Microsoft.Azure.ActiveDirectory.GraphClient.User)
                                                                                            azureGraphclient.Users.Where(a => a.Mail.Equals(UserEmailAddress, StringComparison.InvariantCultureIgnoreCase) ||
                                                                                                                         a.UserPrincipalName.Equals(UserEmailAddress, StringComparison.InvariantCultureIgnoreCase)).ExecuteAsync().Result.CurrentPage.FirstOrDefault();
                            if (userInstance != null)
                            {
                                userInstance.SetExtendedProperty(AppExtAttribName, ExtAttribValue);
                                await userInstance.UpdateAsync();

                                userInstance.GetContext().SaveChanges();

                                ActionStatus = true;
                                message      = "Successfully assigned application extension property to user";
                            }
                            else
                            {
                                message = "Invalid user";
                            }
                        }
                        else
                        {
                            message = "Attribute name not associated with application";
                        }
                    }
                    else
                    {
                        message = "Invalid application";
                    }
                }
                catch (Exception ex)
                {
                    message = ex.Message + (ex.InnerException != null ? Environment.NewLine + ex.InnerException.Message : "");
                }
            }

            return(new Tuple <bool, string, string, string, string>(ActionStatus, message, userObjectID.ToString(), approleid.ToString(), srvpr.ToString()));
        }