Example #1
0
        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);
            }
        }
Example #2
0
        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;
            }
        }