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);
}