Home > Enterprise >  How to create multiple configuration in Zerotouch? Configuration need enrollment token. Do we need m
How to create multiple configuration in Zerotouch? Configuration need enrollment token. Do we need m

Time:08-30

Get Method of HardwarePolicy

    [HttpGet]
    [CustomAuthorization]
    public IActionResult PolicyManagement(string profileType)
    {
        try
        {
            #region ResellerServiceAccountEMMOAuthCred
            ServiceAccountCredential? credential;
            string fileName = "service_account_key.json";
            string path = Path.Combine(this.Environment.WebRootPath, "ZeroTouchCredJSON", fileName);
            using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                credential = GoogleCredential.FromStream(stream)
                                   .CreateScoped(AndroidManagementService.ScopeConstants.Androidmanagement)
                                     .UnderlyingCredential as ServiceAccountCredential;
            }

            // Create a zero-touch enrollment API service endpoint.
            var service = new AndroidManagementService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = ResourceMsg.EMMAppName
            });
            #endregion
            ViewBag.MyPolicyName = string.Empty;
            dynamic? policyId = null;
            CommonPoliciesDto dto = new();
            CommonPoliciesDto cpDto = new();
            bool jFlag = false;
            dynamic enterpriseNameFormat = "";
            //fetch two profile types (Fully Manged & Work)
            dto.ProfileTypeList = _iAdminMapper.GetProfileTypeList();
            //fetch LoggedIn user info
            var loggedInUserEmail = HttpContext.Session.GetString("LoggedInUserName");
            var loggedInUserId = HttpContext.Session.GetString("LoggedInUserId");

            //fetch enterprises based on loggedInUser
            var enterprisesRes = _iEmmMapper.GetEnterprises().Where(x => x.AdminIdentityId == loggedInUserId).FirstOrDefault();

            //get enterprise data based on loggedIn user google account
            var enterpriseDatax = _iEmmMapper.GetEnterprises().Where(x => x.CustomerGoogleAccountId == enterprisesRes.CustomerGoogleAccountId).FirstOrDefault();
            if (enterpriseDatax != null)
            {
                //bind myEnterpriseId in view page
                ViewBag.MyEnterpriseeId = enterpriseDatax.EnterpriseId;

                //DeviceList
                //dto.DeviceList = _iAdminMapper.GetDropDevicesList(enterpriseDatax.EnterpriseId);

                enterpriseNameFormat = string.Format("enterprises/{0}", enterpriseDatax.EnterpriseId);

                //Fetch Current PolicyName
                var myPolicyDatax = _iEmmMapper.GetCommonPolicies().Where(x => x.EnterpriseId == enterpriseDatax.EnterpriseId && x.CustomStatus2 == true).FirstOrDefault();
                if(myPolicyDatax != null)
                {
                    ViewBag.MyPolicyName = myPolicyDatax.PolicyName;
                }
                else
                {
                    ViewBag.MyPolicyName = ResourceMsg.DefaultPolicy;
                }

                //fetch policy info based on enterpriseId and profileType
                var policyData = _iEmmMapper.GetCommonPolicies().Where(x => x.EnterpriseId == enterpriseDatax.EnterpriseId && x.PolicyProfileType == profileType && x.PolicyType == ResourceMsg.Default).FirstOrDefault();
                if (policyData != null)
                {
                    policyId = policyData.PolicyId;

                    //managedplaystore
                    List<string> featuresList = new()
                    {
                        ResourceMsg.PLAY_SEARCH
                    };

                    //create web token for managed Google Play web UI; need reseller creds to generated token
                    var ParentFrameUrl = _iConfiguration.GetValue<string>("AppSetting:ParentFrameUrl");
                    WebToken webTokenInfo = service.Enterprises.WebTokens.Create(new DemoWebToken()
                                            .SetParentFrameUrl(ParentFrameUrl)
                                            .SetEnabledFeatures(featuresList), enterpriseNameFormat)
                                            .Execute();
                    var webToken = webTokenInfo.Value;
                    TempData["WebToken"] = webToken;

                    //hardwaresettings
                    var result = _iEmmMapper.GetCommonPolicies().Where(x => x.PolicyId == policyId && x.PolicyType == ResourceMsg.Default).FirstOrDefault();

                    //applicationsettings | based on profileType
                    var resAppmodel = _iEmmMapper.GetApplicationPolicies().OrderByDescending(x => x.Id).FirstOrDefault(x => x.PolicyId == policyId);

                    //devicesettings
                    var resDevicemodel = _iEmmMapper.GetDevicePolicies().Where(x => x.EnterpriseId == enterpriseDatax.EnterpriseId && x.IsActive).FirstOrDefault();

                    if (profileType != null)
                    {
                        //If Managed Profile then perform on all settings
                        if (profileType == ResourceMsg.FullyManged)
                        {
                            if (result != null)
                            {
                                
                            }
                            if (resAppmodel != null)
                            {
                                
                            }
                            if (resDevicemodel != null)
                            {
                                
                            }
                            //prepare commonpolicies vmodel to send to view
                            dto = new()
                            {
                                EnterpriseName = enterpriseDatax.EnterpriseNameRequested,
                                //populate policyNameList
                                //EnterpriseList = _iEmmMapper.GetActiveEnterprisesDropList(),

                                //populate enterprise list
                                EnterpriseList = _iEmmMapper.GetActiveEnterprisesDropList(),

                                //common policies
                                ProfileTypeList = _iAdminMapper.GetProfileTypeList(),
                                ProfileType = profileType,

                                //bindMyEnterpriseId in view
                                MyEnterpriseId = enterpriseDatax.EnterpriseId,

                                //hardware settings
                                DupWifiConfigDisabled = cpDto.DupWifiConfigDisabled,
                                DupMobileNetworksConfigDisabled = cpDto.DupMobileNetworksConfigDisabled,
                                DupBluetoothDisabled = cpDto.DupBluetoothDisabled,
                                DupUsbFileTransferDisabled = cpDto.DupUsbFileTransferDisabled,
                                MaximumTimeToLock = cpDto.MaximumTimeToLock,
                                AdjustVolumeDisabled = result != null ? result.AdjustVolumeDisabled : false,
                                ScreenCaptureDisabled = result != null ? result.ScreenCaptureDisabled : false,
                                StatusBarDisabled = result != null ? result.StatusBarDisabled : false,
                                BluetoothContactSharingDisabled = result != null ? result.BluetoothContactSharingDisabled : false,
                                ShareLocationDisabled = result != null ? result.ShareLocationDisabled : false,
                                WifiConfigDisabled = result != null ? result.WifiConfigDisabled : false,
                                MobileNetworksConfigDisabled = result != null ? result.MobileNetworksConfigDisabled : false,
                                AutoDateAndTimeZone = result != null ? result.AutoDateAndTimeZone : ResourceMsg.AUTO_DATEANDTIMEZONE_UNSPECIFIED,
                                KeyguardDisabled = result != null ? result.KeyguardDisabled : false,
                                CameraDisabled = result != null ? result.CameraDisabled : false,

                                //app settings
                                ApplicationName = cpDto.ApplicationName ?? string.Empty,
                                AppPackageName = cpDto.AppPackageName ?? string.Empty,
                                DupInstallType = cpDto.DupInstallType,
                                DupDefaultPermissionPolicy = cpDto.DupDefaultPermissionPolicy,
                                PackageList = _iEmmMapper.GetApplicationsList(),

                                //device mode settings
                                KioskMode = cpDto.KioskMode,
                                AppPolicyName = "",
                                PackageName = resDevicemodel != null? resDevicemodel.PackageName: "",
                                PackageId = cpDto.PackageId,
                                DupLockPowerButton = cpDto.DupLockPowerButton,
                                StatusBar = cpDto.StatusBar,
                                DupDisableDeviceSettings = cpDto.DupDisableDeviceSettings,
                                SystemNavigation = cpDto.SystemNavigation != null ? cpDto.SystemNavigation : ResourceMsg.SYSTEM_NAVIGATION_UNSPECIFIED,
                                DupEnableSystemErrorWarnings = cpDto.DupEnableSystemErrorWarnings,
                                IsDeleted = resDevicemodel != null ? resDevicemodel.IsDeleted: true,
                                //fetch defaultConfiguration status to show createConfiguration button when status is true
                                IsDefaultConfigurationSet = enterpriseDatax.IsDefaultConfigurationSet,
                                DeviceList = _iAdminMapper.GetDropDevicesList(enterpriseDatax.EnterpriseId)

                        };
                            if (jFlag)
                            {
                                //when profile dropdown changed
                                return Json(dto);
                            }
                           // TempData["PolicyApplied"] = TempData["PolicyApplied"];
                            return View(dto);
                        }

                        //If work Profile then perform on hardware and apps settings
                        if (profileType == ResourceMsg.Work)
                        {
                            if (result != null)
                            {
                                
                            }
                            if (resAppmodel != null)
                            {
                                
                            }
                            //prepare commonpolicies vmodel to send to view
                            dto = new()
                            {
                                EnterpriseName = enterpriseDatax.EnterpriseNameRequested,

                                //hardware settings
                                DupWifiConfigDisabled = cpDto.DupWifiConfigDisabled,
                                DupMobileNetworksConfigDisabled = cpDto.DupMobileNetworksConfigDisabled,
                                DupBluetoothDisabled = cpDto.DupBluetoothDisabled,
                                DupUsbFileTransferDisabled = cpDto.DupUsbFileTransferDisabled,
                                MaximumTimeToLock = cpDto.MaximumTimeToLock,
                                AdjustVolumeDisabled = result != null ? result.AdjustVolumeDisabled : false,
                                ScreenCaptureDisabled = result != null ? result.ScreenCaptureDisabled : false,
                                StatusBarDisabled = result != null ? result.StatusBarDisabled : false,
                                BluetoothContactSharingDisabled = result != null ? result.BluetoothContactSharingDisabled : false,
                                ShareLocationDisabled = result != null ? result.ShareLocationDisabled : false,
                                WifiConfigDisabled = result != null ? result.WifiConfigDisabled : false,
                                MobileNetworksConfigDisabled = result != null ? result.MobileNetworksConfigDisabled : false,
                                AutoDateAndTimeZone = result != null ? result.AutoDateAndTimeZone : ResourceMsg.AUTO_DATEANDTIMEZONE_UNSPECIFIED,
                                KeyguardDisabled = result != null ? result.KeyguardDisabled : false,
                                CameraDisabled = result != null ? result.CameraDisabled : false,

                                //app settings
                                ApplicationName = cpDto.ApplicationName ?? string.Empty,
                                AppPackageName = cpDto.AppPackageName ?? string.Empty,
                                DupInstallType = cpDto.DupInstallType,
                                DupDefaultPermissionPolicy = cpDto.DupDefaultPermissionPolicy,
                                PackageList = _iEmmMapper.GetApplicationsList(),

                                //common policies
                                EnterpriseList = _iEmmMapper.GetActiveEnterprisesDropList(),

                                ProfileTypeList = _iEmmMapper.GetProfileTypeList(),
                                ProfileType = profileType,

                                //bindMyEnterpriseId in view
                                MyEnterpriseId = enterpriseDatax.EnterpriseId,
                                //fetch defaultConfiguration status to show createConfiguration button when status is true
                                IsDefaultConfigurationSet = enterpriseDatax.IsDefaultConfigurationSet,

                                DeviceList = _iAdminMapper.GetDropDevicesList(enterpriseDatax.EnterpriseId)
                            };

                            if (jFlag)
                            {
                                //when profile dropdown changed
                                return Json(dto);
                            }
                            return View(dto);
                        }
                    }
                }
            }
           // TempData["PolicyApplied"] = TempData["PolicyApplied"];
            return View(dto);
        }
        catch (Exception ex)
        {
            _loggerManager.LogError($"Something went wrong inside CommonPolicies get action: {ex.Message}");
            return View(new CommonPoliciesDto());
        }
    }

Post Mehtod [HttpPost] [CustomAuthorization] public IActionResult PolicyManagement(CommonPoliciesDto commonPolicies) { try { dynamic PolicyAge = string.Empty; dynamic policyResponse = string.Empty; string myPolicyId = string.Empty; //bind myEnterpriseId in view page ViewBag.MyEnterpriseeId = commonPolicies.MyEnterpriseId;

            //fetch UserIdentityId
            var userLoggedId = _iEmmMapper.GetEnterprises().Where(x=> x.EnterpriseId == commonPolicies.MyEnterpriseId).Select(x => x.AdminIdentityId).FirstOrDefault();
            if(userLoggedId != null)
            {
                commonPolicies.UserIdentityId = userLoggedId;
            }

            #region ResellerServiceAccountEMMOAuthCred
            //read service a/c creds
            ServiceAccountCredential? credential;
            string fileName = "service_account_key.json";
            string path = Path.Combine(this.Environment.WebRootPath, "ZeroTouchCredJSON", fileName);
            using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                credential = GoogleCredential.FromStream(stream)
                                     .CreateScoped(AndroidManagementService.ScopeConstants.Androidmanagement)
                                     .UnderlyingCredential as ServiceAccountCredential;
            }

            // Create a zero-touch enrollment API service endpoint.
            var service = new AndroidManagementService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = ResourceMsg.EMMAppName
            });
            #endregion

            ModelState.Remove("PackageName");
            if (ModelState.IsValid)
            {
                if (!string.IsNullOrEmpty(commonPolicies.MyEnterpriseId))
                {
                    #region conditions
                    if (commonPolicies.AutoDateAndTimeZone == ResourceMsg.AUTO_DATEANDTIMEZONE_ENFORCED)
                    {
                        commonPolicies.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_ENFORCED;
                    }
                    else if (commonPolicies.AutoDateAndTimeZone == ResourceMsg.AUTO_DATEANDTIMEZONE_USERCHOICE)
                    {
                        commonPolicies.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_USERCHOICE;
                    }
                    else
                    {
                        commonPolicies.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_UNSPECIFIED;
                    }
                    //
                    if (commonPolicies.WifiMoblieData == 1)
                    {
                        commonPolicies.WifiConfigDisabled = false;
                        commonPolicies.MobileNetworksConfigDisabled = true;
                    }
                    else if (commonPolicies.WifiMoblieData == 2)
                    {
                        commonPolicies.MobileNetworksConfigDisabled = false;
                        commonPolicies.WifiConfigDisabled = true;
                    }
                    else
                    {
                        commonPolicies.WifiConfigDisabled = false;
                        commonPolicies.MobileNetworksConfigDisabled = false;
                    }
                    //
                    if (commonPolicies.DupBluetoothDisabled == 1)
                    {
                        commonPolicies.BluetoothDisabled = false;
                    }
                    else
                    {
                        commonPolicies.BluetoothDisabled = true;
                        commonPolicies.BluetoothContactSharingDisabled = true;
                    }
                    if (commonPolicies.DupUsbFileTransferDisabled == 1)
                    {
                        commonPolicies.UsbFileTransferDisabled = false;
                    }
                    else
                    {
                        commonPolicies.UsbFileTransferDisabled = true;
                    }
                    if (commonPolicies.MaximumTimeToLock > 0)
                    {
                        commonPolicies.MaximumTimeToLock *= 60000;
                    }
                    #endregion

                    #region formingPolicyIdFromPolicyName
                    //form Policy Id
                    string myPolicyName = commonPolicies.PolicyName.Trim();
                    bool flag = false;
                    foreach (var data in myPolicyName.ToCharArray())
                    {
                        if (data == ' ')
                        {
                            flag = true;
                        }
                    }
                    if (flag)
                    {
                        string[] polArr = myPolicyName.Split(' ');
                        foreach (var datax in polArr)
                        {
                            myPolicyId  = datax   "_";
                        }
                        myPolicyId = myPolicyId.Remove(myPolicyId.Length - 1, 1);
                        //Console.WriteLine(myPolicyId);
                    }
                    else
                    {
                        myPolicyId = myPolicyName;
                        //Console.WriteLine(test);
                    }
                    #endregion

                    var entepriseParent = string.Format("enterprises/{0}", commonPolicies.MyEnterpriseId);
                    var policyName = string.Format("{0}/policies/{1}", entepriseParent, myPolicyId);
                    //Check if policy exist on server or not
                    //If policy not exist on server then it thru 404 error
                    try
                    {
                        policyResponse = service.Enterprises.Policies.Get(policyName).Execute();
                    }
                    catch (GoogleApiException gex)
                    {
                        //thru 404 error as this is the new policy for the server
                        PolicyAge = ResourceMsg.New;
                    }
                    if (PolicyAge != ResourceMsg.New)
                    {
                        //Policy exist on server
                        PolicyAge = ResourceMsg.Existing;
                    }


                    //condition for add policy
                    if (commonPolicies.ActionType != ResourceMsg.update)
                    {
                        //check if the policyId exist in both database and active in server
                        var IsPolicyExistOnDB = _iEmmMapper.GetCommonPolicies().Where(x => x.PolicyName.ToUpper() == commonPolicies.PolicyName.ToUpper().Trim() && x.PolicyId == myPolicyId && x.EnterpriseId == commonPolicies.MyEnterpriseId).Any();
                        
                        //If PolicyExistOnDb or PolicyIsNewToServer then only thru policy exist error
                        if(IsPolicyExistOnDB || PolicyAge == ResourceMsg.Existing)
                        {
                            //If Policy Exist on server then can't create a policy again with the same name
                            TempData["Failure"] = ResourceMsg.PolicyNameAlreadyExist;
                            string msgErr = "Error in "   this.GetType().ToString();
                            _loggerManager.LogError($"{msgErr}{ResourceMsg.PolicyNameAlreadyExist}");
                            return View(new EnterpriseDto());
                        }
                        else
                        {
                            //create a new policy in DB without policyId
                            //as PolicyId only generated by the server which need to be created during apply policy
                            //update data to common policies database table
                            commonPolicies.EnterpriseId = commonPolicies.MyEnterpriseId;
                            commonPolicies.PolicyId = "";
                            commonPolicies.PolicyName = commonPolicies.PolicyName;
                            commonPolicies.PolicyType = ResourceMsg.Custom;

                            //update into database
                            var result = _iAdminMapper.CreateUpdateHardwarePolicies(commonPolicies);
                            if (result == 0)
                            {
                                TempData["MsgCmnPolicies"] = ResourceMsg.PoliciesCreatedSuccessfully;
                            }
                            else
                            {
                                //this msg need to be removed
                                if (result == 1)
                                {
                                    TempData["MsgCmnPolicies"] = ResourceMsg.PoliciesUpdatedSuccessfully;
                                }
                            }
                        }
                    }
                    else if (commonPolicies.ActionType == ResourceMsg.update)
                    {
                        //If the policy Exist on server then update the policy settings on server thru Policies.Patch endpoint
                        if(PolicyAge == ResourceMsg.Existing)
                        {
                            var newpolicyResponse = service.Enterprises.Policies.Patch(ConfigureCommonPolicies(commonPolicies), policyName).Execute();
                            commonPolicies.PolicyId = myPolicyId;
                        }

                        //update policy on local database
                        commonPolicies.EnterpriseId = commonPolicies.MyEnterpriseId;
                        commonPolicies.PolicyId = commonPolicies.PolicyId == null? string.Empty: commonPolicies.PolicyId;
                        commonPolicies.PolicyName = commonPolicies.PolicyName;
                        commonPolicies.PolicyType = ResourceMsg.Custom;

                        //update into database
                        var result = _iAdminMapper.CreateUpdateHardwarePolicies(commonPolicies);
                        if (result == 0)
                        {
                            TempData["MsgCmnPolicies"] = ResourceMsg.PoliciesCreatedSuccessfully;
                        }
                        else
                        {
                            if (result == 1)
                            {
                                TempData["MsgCmnPolicies"] = ResourceMsg.PoliciesUpdatedSuccessfully;
                            }
                        }
                    }
                    else
                    {
                        TempData["Failure"] = ResourceMsg.PolicyNameAlreadyExist;
                        string msgErr = "Error in "   this.GetType().ToString();
                        _loggerManager.LogError($"{msgErr}{ResourceMsg.PolicyNameAlreadyExist}");
                    }

                }
                else
                {
                    TempData["Failure"] = ResourceMsg.TryAgainContactTechnicalTeam;
                    string msgErr = "Error in "   this.GetType().ToString();
                    _loggerManager.LogError($"{msgErr}{ResourceMsg.EnterpriseIdIsMissing}");
                }
            }
            else
            {
                TempData["Failure"] = ResourceMsg.RequiredFieldsAreEmpty;
                string msgErr = "Error in "   this.GetType().ToString();
                _loggerManager.LogError($"{msgErr}{ResourceMsg.RequiredFieldsAreEmpty}");
            }

            CommonPoliciesDto dto = new();
            //fetch & bind two profile types (Fully Manged & Work) on view
            dto.ProfileTypeList = _iAdminMapper.GetProfileTypeList();

            var myEnterpriseName = _iEmmMapper.GetEnterprises().Where(x => x.EnterpriseId == commonPolicies.MyEnterpriseId).Select(x => x.EnterpriseNameRequested).FirstOrDefault();

            //DeviceList
            dto.DeviceList = _iAdminMapper.GetDropDevicesList(commonPolicies.MyEnterpriseId);

            dto.EnterpriseName = myEnterpriseName;
            //pass the dto model to view
            return View(dto);
        }
        catch (GoogleApiException gex)
        {
            TempData["Failure"] = ResourceMsg.PolicyNotFoundContactTechnicalTeam;
            string msgErr = "Error in "   this.GetType().ToString();
            _loggerManager.LogError($"{msgErr}{gex.Message}");
            return View(new EnterpriseDto());
        }
        catch (Exception ex)
        {
            TempData["Failure"] = ResourceMsg.TryAgainContactTechnicalTeam;
            string msgErr = "Error in "   this.GetType().ToString();
            _loggerManager.LogError($"{ex.Message}");
            return View();
        }
    }

CodePudding user response:

Apply the policy

        [HttpPost]
    [CustomAuthorization]
    /// <summary>
    /// This method is used to apply hardware policy. 
    /// </summary>
    /// <returns></returns>
    public IActionResult ApplyHardwarePolicy(string rwId, string devarr)
    {
        try
        {
            #region ResellerServiceAccountEMMOAuthCred
            //read service a/c creds
            ServiceAccountCredential? credential;
            string fileName = "service_account_key.json";
            string path = Path.Combine(this.Environment.WebRootPath, "ZeroTouchCredJSON", fileName);
            using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
            {
                credential = GoogleCredential.FromStream(stream)
                                     .CreateScoped(AndroidManagementService.ScopeConstants.Androidmanagement)
                                     .UnderlyingCredential as ServiceAccountCredential;
            }

            // Create a zero-touch enrollment API service endpoint.
            var service = new AndroidManagementService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
                ApplicationName = ResourceMsg.EMMAppName
            });
            #endregion

            string PolicyAge = string.Empty;
            CommonPoliciesDto model = new();
            string myPolicyId = string.Empty;

            string[] devicesArr = devarr.Split('|');
            devicesArr = devicesArr.SkipLast(1).ToArray();

            //fetch policy information based on rowId
            var policyInfo = _iEmmMapper.GetCommonPolicies().Where(x => x.Id == Convert.ToInt32(rwId)).FirstOrDefault();
            if(policyInfo != null)
            {
                //initialize model to assign apps into it
                model.ApplicationDtoList = new List<ApplicationsDto>();
                var appModel = new ApplicationsDto();

                //prepare the model from database response to apply the policy on server
                #region conditions
                if (policyInfo.AutoDateAndTimeZone == ResourceMsg.AUTO_DATEANDTIMEZONE_ENFORCED)
                {
                    model.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_ENFORCED;
                }
                else if (policyInfo.AutoDateAndTimeZone == ResourceMsg.AUTO_DATEANDTIMEZONE_USERCHOICE)
                {
                    model.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_USERCHOICE;
                }
                else
                {
                    model.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_UNSPECIFIED;
                }
                //
                if (policyInfo.WifiConfigDisabled == false && policyInfo.MobileNetworksConfigDisabled == false)
                {
                    model.WifiConfigDisabled = false;
                    model.MobileNetworksConfigDisabled = false;
                }
                if (policyInfo.WifiConfigDisabled == true)
                {
                    model.WifiConfigDisabled = true;
                    model.MobileNetworksConfigDisabled = false;
                }
                else if (policyInfo.MobileNetworksConfigDisabled == true)
                {
                    model.MobileNetworksConfigDisabled = true;
                    model.WifiConfigDisabled = false;
                }
                else
                {
                    model.WifiConfigDisabled = false;
                    model.MobileNetworksConfigDisabled = false;
                }
                //
                if (policyInfo.BluetoothDisabled == false)
                {
                    model.BluetoothDisabled = false;
                }
                else
                {
                    model.BluetoothDisabled = true;
                    model.BluetoothContactSharingDisabled = true;
                }
                //
                if (policyInfo.UsbFileTransferDisabled == false)
                {
                    model.UsbFileTransferDisabled = false;
                }
                else
                {
                    model.UsbFileTransferDisabled = true;
                }
                //MaximumTimeToLock
                model.MaximumTimeToLock = policyInfo.MaximumTimeToLock;
                //adjustvolume
                model.AdjustVolumeDisabled = policyInfo.AdjustVolumeDisabled;
                //screencapture
                model.ScreenCaptureDisabled = policyInfo.ScreenCaptureDisabled;
                //statusbar
                if(policyInfo.StatusBarDisabled == true)
                {
                    model.StatusBarDisabled = true;
                }
                else
                {
                    model.StatusBarDisabled = false;
                }
                //sharelocation
                model.ShareLocationDisabled = policyInfo.ShareLocationDisabled;
                //keyguard
                model.KeyguardDisabled = policyInfo.KeyguardDisabled;
                //camera
                model.CameraDisabled = policyInfo.CameraDisabled;
                #endregion

                #region forming policyId from policyName
                //form Policy Id
                string myPolicyName = policyInfo.PolicyName.Trim();
                bool flag = false;
                foreach (var data in myPolicyName.ToCharArray())
                {
                    if (data == ' ')
                    {
                        flag = true;
                    }
                }
                if (flag)
                {
                    string[] polArr = myPolicyName.Split(' ');
                    foreach (var datax in polArr)
                    {
                        myPolicyId  = datax   "_";
                    }
                    myPolicyId = myPolicyId.Remove(myPolicyId.Length - 1, 1);
                    //Console.WriteLine(myPolicyId);
                }
                else
                {
                    myPolicyId = myPolicyName;
                    //Console.WriteLine(test);
                }
                #endregion

                //Apply the selected policy on server
                //check there is an active policy of the enterprise on server
                var entepriseParent = string.Format("enterprises/{0}", policyInfo.EnterpriseId);
                //var policyName = string.Format("{0}/policies/{1}", entepriseParent, myDefaumyPolicyIdltPolicyId);
                var policyName = string.Format("{0}/policies/{1}", entepriseParent, myPolicyId);

                //Check if policy exist on server or not
                //If policy not exist on server then it thru 404 error
                dynamic appList = string.Empty;
                try
                {
                    appList = service.Enterprises.Policies.Get(policyName).Execute();
                }
                catch (GoogleApiException gex)
                {
                    //thru 404 error as this is the new policy for the server
                    PolicyAge = ResourceMsg.New;
                }

                //If policy is not the new policy then the existing policy
                if (PolicyAge == string.Empty)
                {
                    //If there no 404 exeception from server then the policy is the existing server policy
                    PolicyAge = ResourceMsg.Old;
                }

                //devicename
                dynamic deviceNameAPI = string.Empty;

                if (PolicyAge.Equals(ResourceMsg.New))
                {
                    //create a new policy on the server with the formed policyId thru policies.patch endpoint
                    var newpolicyResponse = service.Enterprises.Policies.Patch(ConfigureCommonPolicies(model), policyName).Execute();
                    
                    //loop thru each requested devices
                    foreach (var deviceId in devicesArr)
                    {
                        //form the deviceName API format
                        deviceNameAPI = string.Format("{0}/devices/{1}", entepriseParent, deviceId);

                        //Check device is exist on server or not
                        var deviceResponse = service.Enterprises.Devices.Get(deviceNameAPI).Execute();

                        //This device belongs to EMM Device; Full fledged path
                        //There is also Device class exist for Zerotouch device
                        Google.Apis.AndroidManagement.v1.Data.Device device = new Google.Apis.AndroidManagement.v1.Data.Device()
                        {
                            //Assign policyId to policyName
                            PolicyName = myPolicyId,
                            State = ResourceMsg.ACTIVE
                        };
                        //Apply the newly created policy on the requested devices thru device.patch endpont
                        var devicePatchResponse = service.Enterprises.Devices.Patch(device, deviceNameAPI).Execute();
                    }

                    //Update the local database with newly applied policy

                }
                else
                {
                    if (PolicyAge.Equals(ResourceMsg.Old))
                    {
                        //No need to create a new policy on server
                        if (appList != null)
                        {
                            //set all hardware policies exist on server

                            //check if app list is null or not
                            if (appList.Applications != null)
                            {
                                //set all application policies exist from server
                                //fetching existing apps from the provided policy
                                foreach (var app in appList.Applications)
                                {
                                    appModel = new ApplicationsDto()
                                    {
                                        PackageName = app.PackageName,
                                        InstallType = app.InstallType,
                                        DefaultPermissionPolicy = app.DefaultPermissionPolicy
                                    };
                                    model.ApplicationDtoList.Add(appModel);
                                }
                            }
                        }
                        //update the existing policy
                        var newpolicyResponse = service.Enterprises.Policies.Patch(ConfigureCommonPolicies(model), policyName).Execute();

                        //loop thru each requested devices
                        foreach (var deviceId in devicesArr)
                        {
                            //form the deviceName API format
                            deviceNameAPI = string.Format("{0}/devices/{1}", entepriseParent, deviceId);

                            //Check device is exist on server or not
                            var deviceResponse = service.Enterprises.Devices.Get(deviceNameAPI).Execute();

                            //This device belongs to EMM Device; Full fledged path
                            //There is also Device class exist for Zerotouch device
                            Google.Apis.AndroidManagement.v1.Data.Device device = new Google.Apis.AndroidManagement.v1.Data.Device()
                            {
                                //Assign policyId to policyName
                                PolicyName = myPolicyId,
                                State = ResourceMsg.ACTIVE
                            };
                            //Apply the newly created policy on the requested devices thru device.patch endpont
                            var devicePatchResponse = service.Enterprises.Devices.Patch(device, deviceNameAPI).Execute();
                        }
                    }
                }
                model.EnterpriseId = policyInfo.EnterpriseId;
                model.PolicyName = policyInfo.PolicyName;
                model.PolicyId = myPolicyId;
                model.PolicyNameApiFormat = policyName;
                model.Custom1 = DateTime.UtcNow.ToString();//PolicyAppliedDate
                model.CustomStatus1 = true; //PolicyAppliedOnServerStatus
                //model.CustomStatus2 = true; //IsThisCurrentPolicy

                //update the policyInfo on local database
                var result = _iAdminMapper.CreateUpdateHardwarePolicies(model);
                if (result == 1)
                {
                    //update the IsThisCurrentAppliedPolicy = customstatus2 to false for rest policies under the same policyId
                    //var res = _iAdminMapper.UpdateHardwarePoliciesStatus(model);
                    TempData["PolicyApplied"] = ResourceMsg.PoliciesAppliedSuccessfully;
                }
                else
                {
                    TempData["PolicyApplied"] = ResourceMsg.ContactTechnicalTeam;
                }
            }
            else
            {
                TempData["Failure"] = ResourceMsg.ContactTechnicalTeam;
                string msgErr = "Error in "   this.GetType().ToString();
                _loggerManager.LogError($"{msgErr}{ResourceMsg.PolicyNotFound}");
                return Json(new {success = false,message= ResourceMsg.ContactTechnicalTeam });
            }
            return Json(new { success = true, message = TempData["PolicyApplied"] });

        }
        catch (Exception ex)
        {
            string msgErr = "Error in "   this.GetType().ToString();
            _loggerManager.LogError($"{msgErr}{ex.Message}");
            TempData["Failure"] = ResourceMsg.ContactTechnicalTeam;
            return Json(new { success = false, message = ResourceMsg.ContactTechnicalTeam });
        }
    }

CodePudding user response:

Method for Delete Policy

[HttpGet]
    public IActionResult DeleteHardwarePolicy(string rwId)
    {
        try
        {
            if (rwId != null)
            {
                #region ResellerServiceAccountEMMOAuthCred
                //read service a/c creds
                ServiceAccountCredential? credential;
                string fileName = "service_account_key.json";
                string path = Path.Combine(this.Environment.WebRootPath, "ZeroTouchCredJSON", fileName);
                using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read))
                {
                    credential = GoogleCredential.FromStream(stream)
                                         .CreateScoped(AndroidManagementService.ScopeConstants.Androidmanagement)
                                         .UnderlyingCredential as ServiceAccountCredential;
                }

                // Create a zero-touch enrollment API service endpoint.
                var service = new AndroidManagementService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = ResourceMsg.EMMAppName
                });
                #endregion

                //Fetch enterpriseId based on deviceId where device is active
                var policiesInfo = _iEmmMapper.GetCommonPolicies().Where(x => x.Id == Convert.ToInt32(rwId) && x.IsActive).FirstOrDefault();
                if (policiesInfo != null)
                {
                    //Fetch Default Policy
                    var defaultPolicyId = _iEmmMapper.GetCommonPolicies().Where(x => x.EnterpriseId == policiesInfo.EnterpriseId && x.PolicyProfileType == policiesInfo.PolicyProfileType && x.PolicyType == ResourceMsg.Default).Select(x=> x.PolicyId).FirstOrDefault();

                    //If policy is active policy for any devices then after deleting the sever will be updated with default policy
                    var entepriseParent = string.Format("enterprises/{0}", policiesInfo.EnterpriseId);

                    //Fetch DeviceList with ongoing deleted policy
                    //var DevicesList = service.Enterprises.Devices.List(entepriseParent);
                    var deviceList = _iEmmMapper.GetDevices().Where(x => x.PolicyId == policiesInfo.PolicyId && x.IsActive).ToList();
                    if(deviceList.Count > 0)
                    {
                        //apply all devices with default policy
                        foreach(var device in deviceList)
                        {
                            var deviceNameAPI = string.Format("{0}/devices/{1}", entepriseParent, device.DeviceId);
                            //Apply policy on device
                            Google.Apis.AndroidManagement.v1.Data.Device deviceBody = new Google.Apis.AndroidManagement.v1.Data.Device()
                            {
                                //Assign policyId to policyName
                                PolicyName = defaultPolicyId,
                                State = ResourceMsg.ACTIVE
                            };
                            //Apply the newly created policy on the requested devices thru device.patch endpont
                            var devicePatchResponse = service.Enterprises.Devices.Patch(deviceBody, deviceNameAPI).Execute();
                        }
                    }
                        
                    //var policyName = string.Format("{0}/policies/{1}", entepriseParent, policiesInfo.PolicyId);

                    //var policyResponse = service.Enterprises.Policies.Get(policyName).Execute();
                    //if(policyResponse != null)
                    //{
                    //    //If policy exist on server then set default hardware policy
                    //    var appliedPolicyData = service.Enterprises.Policies.Patch(DefaultHardwarePolicies(policiesInfo.PolicyId), policyName).Execute();
                    //}
                    
                    //soft delete policy from local database
                    var result = _iAdminMapper.SoftDeletePolicy(Convert.ToInt32(rwId));
                    if (result == 1)
                    {
                        TempData["MsgCmnPolicies"] = ResourceMsg.DeleteMsg;
                        return RedirectToAction("PolicyManagement", "Admin");
                    }
                }
                return RedirectToAction("PolicyManagement", "Admin");
            }
            return RedirectToAction("PolicyManagement", "Admin");
        }
        catch (Exception ex)
        {
            string msgErr = "Error in "   this.GetType().ToString();
            _loggerManager.LogError($"{msgErr}{ex.Message}");
            return RedirectToAction("PolicyManagement", "Admin");
        }
    }

CodePudding user response:

This method for get policy h/w policy

        [HttpGet]
    /// <summary>
    /// This method is used to return hardware policies based on enterprise Id in json format.
    /// </summary>
    /// <param name="enterpriseId"></param>
    /// <returns></returns>
    public IActionResult GetjHardwarePolicies(string enterpriseId)
    {
        try
        {
            IList<CommonPoliciesDto> hardwarePoliciesList = new List<CommonPoliciesDto>();
            List<SelectListItem> deviceDropList = new List<SelectListItem>();
            SelectListItem hardwarePoliciy = new();
            //fetch enterprise name
            var enterpriseName = _iEmmMapper.GetEnterprises().Where(x=> x.EnterpriseId == enterpriseId).Select(x=> x.EnterpriseNameRequested).FirstOrDefault();

            //fetch devices based on enterprise
            var deviceList = _iEmmMapper.GetDevices().Where(x => x.EnterpriseId == enterpriseId && x.IsActive).ToList();
            if(deviceList.Count > 0)
            {
                foreach(var device in deviceList)
                {
                    hardwarePoliciy = new SelectListItem()
                    {
                        Text = device.Model,
                        Value = device.DeviceId
                    };
                    deviceDropList.Add(hardwarePoliciy);
                };
            }
            
            if (enterpriseId != null)
            {
                //fetch list of custom hardware policies based on enterprise
                var hardwarePoliciesListResponse = _iEmmMapper.GetCommonPolicies().Where(x => x.EnterpriseId.Equals(enterpriseId) && x.PolicyType == ResourceMsg.Custom && x.IsActive);
                foreach (var policy in hardwarePoliciesListResponse)
                {
                    policy.EnterpriseName = enterpriseName;
                    policy.DeviceList.AddRange(deviceDropList);
                    hardwarePoliciesList.Add(policy);
                }
            }

            //List<SelectListItem> countries = this.Context.Customers.Where(x => x.Country != null)
            //.Select(x => new SelectListItem
            //{
            //    Text = x.Country,
            //    Value = x.Country
            //}).Distinct().ToList();

            return new JsonResult(hardwarePoliciesList);
        }
        catch (Exception ex)
        {
            string msgErr = "Error in "   this.GetType().ToString();
            _loggerManager.LogError($"{msgErr}{ex.Message}");
            return RedirectToAction("PolicyManagement", "Admin");
        }
    }

CodePudding user response:

This method is used for edit policy

        [HttpGet]
    /// <summary>
    /// This method used to Edit Hardware Setting modal by Id.
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public JsonResult jEditHardwareSettings(int id)
    {
        CommonPoliciesDto commonModel = new() { Id = id };
        var responseHardwareModel = _iEmmMapper.GetCommonPolicies().Where(x => x.Id == id).FirstOrDefault();
        if (responseHardwareModel != null)
        {
            #region Hardware Settings from database
            //PolicyName
            commonModel.PolicyName = responseHardwareModel.PolicyName;
            //ProfileType
            commonModel.PolicyProfileType = responseHardwareModel.PolicyProfileType;
            //Blutooth
            if (responseHardwareModel.BluetoothDisabled == false)
            {
                commonModel.DupBluetoothDisabled = 1;
            }
            else
            {
                commonModel.DupBluetoothDisabled = 0;
            }
            //USB
            if (responseHardwareModel.UsbFileTransferDisabled == false)
            {
                commonModel.DupUsbFileTransferDisabled = 1;
            }
            else
            {
                commonModel.DupUsbFileTransferDisabled = 0;
            }
            //Wifi
            if (responseHardwareModel.WifiConfigDisabled == false)
            {
                //enabled
                commonModel.DupWifiConfigDisabled = 1;
            }
            else
            {
                //disabled
                commonModel.DupWifiConfigDisabled = 0;
            }
            //MobileData
            if (responseHardwareModel.MobileNetworksConfigDisabled == false)
            {
                commonModel.DupMobileNetworksConfigDisabled = 1;
            }
            else
            {
                commonModel.DupMobileNetworksConfigDisabled = 0;
            }
            //ScreenLockTime
            if (responseHardwareModel.MaximumTimeToLock > 0)
            {
                commonModel.MaximumTimeToLock = responseHardwareModel.MaximumTimeToLock / 60000;
            }
            //LockVolume
            commonModel.AdjustVolumeDisabled = responseHardwareModel.AdjustVolumeDisabled;
            //ManageTimeZone
            if (responseHardwareModel.AutoDateAndTimeZone == ResourceMsg.AUTO_DATEANDTIMEZONE_ENFORCED)
            {
                commonModel.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_ENFORCED;
            }
            else if (responseHardwareModel.AutoDateAndTimeZone == ResourceMsg.AUTO_DATEANDTIMEZONE_USERCHOICE)
            {
                commonModel.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_USERCHOICE;
            }
            else
            {
                commonModel.AutoDateAndTimeZone = ResourceMsg.AUTO_DATEANDTIMEZONE_UNSPECIFIED;
            }
            //ScreenCapture
            commonModel.ScreenCaptureDisabled = responseHardwareModel.ScreenCaptureDisabled;
            //StatusBar
            commonModel.StatusBarDisabled = responseHardwareModel.StatusBarDisabled;
            //BlutoothContactSharing
            commonModel.BluetoothContactSharingDisabled = responseHardwareModel.BluetoothContactSharingDisabled;
            //GPS
            commonModel.ShareLocationDisabled = responseHardwareModel.ShareLocationDisabled;
            //Keyguard
            commonModel.KeyguardDisabled = responseHardwareModel.KeyguardDisabled;
            //Camera
            commonModel.CameraDisabled = responseHardwareModel.CameraDisabled;
            #endregion

        }

        return Json(commonModel);
    }
  • Related