Пример #1
0
 public DtoProvisionResponse RenewSymmKey(DtoRenewKeyRequest renewRequest)
 {
     Request.Method   = Method.POST;
     Request.Resource = string.Format("ProvisionedComm/{0}/RenewSymmKey/", Resource);
     return(new ApiRequest().ExecuteSymKeyEncryption <DtoProvisionResponse>(Request,
                                                                            JsonConvert.SerializeObject(renewRequest)));
 }
Пример #2
0
        private EnumProvisionStatus.Status RenewSymmKey()
        {
            var deviceThumbprint = _serviceSetting.GetSetting("device_thumbprint");

            var deviceCert = ServiceCertificate.GetCertificateFromStore(deviceThumbprint.Value, StoreName.My);

            if (deviceCert == null)
            {
                return(EnumProvisionStatus.Status.Error);
            }

            var key = GenerateSymmKey();

            var renewRequest = new DtoRenewKeyRequest();

            renewRequest.Name       = DtoGobalSettings.ClientIdentity.Name;
            renewRequest.Guid       = DtoGobalSettings.ClientIdentity.Guid;
            renewRequest.DeviceCert = Convert.ToBase64String(deviceCert.RawData);
            renewRequest.SymmKey    = Convert.ToBase64String(key);

            var renewResult = new APICall().ProvisionApi.RenewSymmKey(renewRequest);

            if (renewResult == null)
            {
                return(EnumProvisionStatus.Status.Error);
            }
            if (renewResult.ProvisionStatus != EnumProvisionStatus.Status.Provisioned)
            {
                return(renewResult.ProvisionStatus);
            }

            UpdateComServers(renewResult.ComServers);
            var entropy      = _serviceSetting.GetSetting("entropy");
            var entropyBytes = ServiceDP.CreateRandomEntropy();

            entropy.Value = Convert.ToBase64String(entropyBytes);
            _serviceSetting.UpdateSettingValue(entropy);

            var encryptedKey = ServiceDP.EncryptData(key, true, entropyBytes);
            var keySetting   = _serviceSetting.GetSetting("encryption_key");

            keySetting.Value = Convert.ToBase64String(encryptedKey);
            _serviceSetting.UpdateSettingValue(keySetting);
            return(EnumProvisionStatus.Status.Provisioned);
        }
Пример #3
0
        public DtoProvisionResponse RenewSymmKey(DtoRenewKeyRequest request)
        {
            var response        = new DtoProvisionResponse();
            var computerService = new ServiceComputer();
            var computer        = computerService.GetByGuid(request.Guid);

            if (computer == null)
            {
                return new DtoProvisionResponse()
                       {
                           ProvisionStatus = EnumProvisionStatus.Status.Error
                       }
            }
            ;
            if (computer.ProvisionStatus == EnumProvisionStatus.Status.Reset)
            {
                return new DtoProvisionResponse()
                       {
                           ProvisionStatus = EnumProvisionStatus.Status.Reset
                       }
            }
            ;
            computer.ProvisionStatus  = EnumProvisionStatus.Status.Provisioned;
            computer.SymmKeyEncrypted = new EncryptionServices().EncryptText(request.SymmKey);

            //computer may have been renamed, update the name
            var originalName = computer.Name;

            request.Name = request.Name.ToUpper();
            if (!request.Name.Equals(computer.Name))
            {
                computer.Name = request.Name;

                Logger.Debug("SymmKey Update Requires Computer Name Update");
                Logger.Debug("Old Name: " + originalName);
                Logger.Debug("New Name: " + request.Name);

                var doesExist = computerService.GetByName(request.Name);
                //a computer already exists with this name, what next
                if (doesExist != null)
                {
                    if (doesExist.ProvisionStatus == EnumProvisionStatus.Status.Provisioned)
                    {
                        Logger.Debug("An Active Computer With This Name Already Exists.  Cannot Renew SymmKey");
                        return(new DtoProvisionResponse()
                        {
                            ProvisionStatus = EnumProvisionStatus.Status.Error
                        });
                    }
                    else if (doesExist.ProvisionStatus == EnumProvisionStatus.Status.PreProvisioned)

                    {
                        Logger.Debug("Updating Name, Removing PreProvisioned Computer");
                        //new computer has preprovisioned with this name, allow provison to occur
                        //delete the doesExist entity, allowing the archived computer to be restored
                        new ServiceComputer().DeleteComputer(doesExist.Id); //requires a new instance or delete will fail
                    }
                    else if (doesExist.ProvisionStatus == EnumProvisionStatus.Status.ProvisionApproved ||
                             doesExist.ProvisionStatus == EnumProvisionStatus.Status.Reset)
                    {
                        Logger.Debug("Updating Name, Archiving Existing Computer");
                        //new computer has preprovisioned with this name, allow provison to occur
                        //delete the doesExist entity, allowing the archived computer to be restored
                        new ServiceComputer().ArchiveComputerKeepGroups(doesExist.Id); //requires a new instance or delete will fail
                    }
                    else
                    {
                        return(new DtoProvisionResponse()
                        {
                            ProvisionStatus = EnumProvisionStatus.Status.Error
                        });
                    }
                }
            }

            var result = computerService.UpdateComputer(computer);

            if (result == null)
            {
                Logger.Debug("Could Not Renew SymmKey.  Computer Name May Have Been Updated With An Existing Computer");
                return(new DtoProvisionResponse()
                {
                    ProvisionStatus = EnumProvisionStatus.Status.Error
                });
            }

            if (!result.Success)
            {
                Logger.Debug("Could Not Renew SymmKey.  Computer Name May Have Been Updated With An Existing Computer");
                return(new DtoProvisionResponse()
                {
                    ProvisionStatus = EnumProvisionStatus.Status.Error
                });
            }


            var clientComServers = new GetClientComServers().Run(request.Guid);

            if (clientComServers != null)
            {
                response.ComServers = clientComServers;
            }
            response.ProvisionStatus = EnumProvisionStatus.Status.Provisioned;
            return(response);
        }
    }
}