public override void AssignResponse(MessageEnvelope envelope) { try { var resultMessage = (ResultMessage)envelope.Message; if (envelope.Signatures.Count < 1) { throw new RequestException(envelope, "Result message has no signatures."); } if (envelope.Signatures.Distinct().Count() != envelope.Signatures.Count) { throw new RequestException(envelope, "Duplicate signatures."); } if (!envelope.Signatures.Any(s => s.Signer.Equals(AlphaPubkey))) { throw new RequestException(envelope, "Result signature was not signed by Alpha."); } if (!envelope.Signatures.All(s => Auditors.Any(a => s.Signer.Equals(a)) || s.Signer.Equals(AlphaPubkey))) { throw new RequestException(envelope, "Unknown signer."); } if (!(resultMessage is ITransactionResultMessage || envelope.AreSignaturesValid()))//TODO: remove it after ITransactionResultMessage refactoring { throw new RequestException(envelope, "At least one signature is invalid."); } if (envelope.HasMajority(Auditors.Length)) { if (finalizeSource.Task.IsCompleted) { throw new RequestException(envelope, "Finalize result message was already received."); } if (!acknowledgmentSource.Task.IsCompleted) //complete acknowledgment task if it's not completed yet { AssignResponseToSource(acknowledgmentSource, envelope); } AssignResponseToSource(finalizeSource, envelope); } else { if (acknowledgmentSource.Task.IsCompleted) { throw new RequestException(envelope, "Acknowledgment result message was already received."); } AssignResponseToSource(acknowledgmentSource, envelope); } } catch (Exception exc) { acknowledgmentSource.TrySetException(exc); finalizeSource.TrySetException(exc); } }
public Authority(string tableId, string productCode = null) { if (productCode.IsNullOrWhiteSpace()) { productCode = Assessment_Type.B.GetDescription(); } var _common = new Controllers.CommonController(); userAccount = Controllers.AccountController.CurrentUserInfo.Name; Presenteds = _common.getAssessment(productCode, tableId, SetAssessmentType.Presented); Auditors = _common.getAssessment(productCode, tableId, SetAssessmentType.Auditor); if (Presenteds.Any(x => x.User_Account == userAccount)) { AuthorityType = Authority_Type.Presented; } else if (Auditors.Any(x => x.User_Account == userAccount)) { AuthorityType = Authority_Type.Auditor; } else { AuthorityType = Authority_Type.None; } }