public async Task <bool> CertifyCandidateUser(CandidateMicroCredentialCourse candidateMicroCredentialCourse) { var candidate = _unitOfWork.CandidateRepository.GetById(candidateMicroCredentialCourse.CandidateId); var microCredential = _unitOfWork.MicroCredentialRepository.GetById(candidateMicroCredentialCourse.MicroCredentialId); var moocProvider = _unitOfWork.MoocProviderRepository.GetAll().FirstOrDefault(m => m.MoocProviderId == microCredential.MoocProviderId); if (moocProvider == null) { throw new Exception($"MoocProvider Cannot be null, for MicroCredentialId = {microCredential.MoocProviderId}"); } var stratisBlockDataToSign = _moocMicroCredentialProvider.GetUserDataToCertify(candidate.EmailAddress, moocProvider.EmailAddress, microCredential); var signature = _moocMicroCredentialProvider.CreateSignature(stratisBlockDataToSign); //_moocMicroCredentialProvider.StratisMineBlockThenReturnResponse(stratisBlockDataSigned); //var signBlockRequest = new SignBlockRequest { externalAddress = ConfigurationManager.AppSettings["ExternalAddress"], message = signature /*stratisBlockDataToSign*/, walletName = ConfigurationManager.AppSettings["StratisWalletName"], password = ConfigurationManager.AppSettings["StratisWalletAccountPassword"] }; //var signature = _moocMicroCredentialProvider.StratisApiFullfilRequestComponent.SignBlockData(signBlockRequest).Result; var transactionDataRequest = new TransactionBuildData { accountName = "account 0", allowUnconfirmed = true, shuffleOutputs = true, changeAddress = ConfigurationManager.AppSettings["StratisWalletAddress"], feeType = "medium", walletName = ConfigurationManager.AppSettings["StratisWalletName"], password = ConfigurationManager.AppSettings["StratisWalletAccountPassword"], recipients = new Recipient[] { new Recipient { amount = microCredential.CertificateFee.ToString(), destinationAddress = ConfigurationManager.AppSettings["ExternalAddress"] } } }; var trasaction = await _moocMicroCredentialProvider.StratisApiFullfilRequestComponent.BuildTransaction(transactionDataRequest); var transactionResult = await _moocMicroCredentialProvider.StratisApiFullfilRequestComponent.SendTransaction(trasaction.hex); var candidateCourseCredential = _unitOfWork.CandidateMicroCredentialCourseRepository.GetAll().Where(c => c.MicroCredentialId == candidateMicroCredentialCourse.MicroCredentialId && c.CandidateId == candidateMicroCredentialCourse.CandidateId).FirstOrDefault(); //Save to Hash to DB: if (candidateCourseCredential != null) { candidateCourseCredential.HasPassed = true; candidateCourseCredential.HashOfMine = signature; candidateCourseCredential.transactionHex = trasaction.hex; candidateCourseCredential.transactionId = trasaction.transactionId; candidateCourseCredential.MicroCredentialBadgeId = candidateMicroCredentialCourse.MicroCredentialBadgeId; _unitOfWork.CandidateMicroCredentialCourseRepository.Update(candidateCourseCredential); _unitOfWork.SaveChanges(); return(true); } return(false); }
public bool VerifyUserCert(string emailAddress, MicroCredential microCredential) { Candidate candidate = RepositoryEndPointService.GetCandidateByEmail(emailAddress); CandidateMicroCredentialCourse candidateWithCourse = RepositoryEndPointService.GetCandidateAndCourseForVerification(candidate.CandidateId, microCredential.MicroCredentialId); if (candidateWithCourse == null) { return(false); } var hashOfMicroCredential = candidateWithCourse.HashOfMine; //return this.StratisApiFullfilRequestComponent.VerifyBlockData(new VerifyBlockRequest { externalAddress = ConfigurationManager.AppSettings["ExternalAddress"], message = this.MoocProvider.GetUserDataToCertify(candidate.EmailAddress, this.MoocProvider.Mooc.EmailAddress, microCredential), signature = hashOfMicroCredential }).Result; var moocEmailAddress = microCredential.MoocProvider.EmailAddress; var content = MoocProvider.GetUserDataToCertify(emailAddress, moocEmailAddress, microCredential); var signedContent = MoocProvider.CreateSignature(content); return(candidateWithCourse.HashOfMine.Equals(signedContent)); }