コード例 #1
0
 public void Validate(LicenseCriteria licenseCriteria)
 {
     if (DateTimeOffset.UtcNow > licenseCriteria.ExpirationDate)
     {
         throw new LicenseExpiredException(string.Format("License expired on {0:O}", licenseCriteria.ExpirationDate));
     }
 }
コード例 #2
0
        public LicenseCriteria Deserialize(XDocument document)
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            var license = document.Root;

            if (license == null || license.Name != LicenseElements.License)
            {
                throw new InvalidDataException("Document is invalid. A root node was expected");
            }

            var licenseDetails = new Dictionary <string, string>();

            foreach (var element in license.Elements())
            {
                if (element.Name.LocalName == LicenseElements.Signature)
                {
                    continue;
                }

                licenseDetails.Add(element.Name.LocalName, element.Value);
            }

            var licenseCriteria = new LicenseCriteria
            {
                Id             = Guid.ParseExact(licenseDetails[LicenseElements.Id], "D"),
                IssueDate      = ParseDateTime(licenseDetails[LicenseElements.IssueDate]),
                Type           = licenseDetails[LicenseElements.Type],
                ExpirationDate = ParseDateTime(licenseDetails[LicenseElements.ExpirationDate]),
            };

            licenseDetails.Remove(LicenseElements.Id);
            licenseDetails.Remove(LicenseElements.IssueDate);
            licenseDetails.Remove(LicenseElements.Type);
            licenseDetails.Remove(LicenseElements.ExpirationDate);

            licenseCriteria.MetaData = licenseDetails;

            return(licenseCriteria);
        }
コード例 #3
0
        public License Generate(CryptoKey privateKey, LicenseCriteria licenseCriteria)
        {
            if (privateKey == null)
            {
                throw new ArgumentNullException(nameof(privateKey));
            }
            if (licenseCriteria == null)
            {
                throw new ArgumentNullException(nameof(licenseCriteria));
            }

            var serializer = new LicenseCriteriaSerializer();
            var document   = serializer.Serialize(licenseCriteria);

            var documentSigning = new DocumentSigning();

            documentSigning.Sign(document, privateKey);

            return(new License(document));
        }
コード例 #4
0
        public XDocument Serialize(LicenseCriteria licenseCriteria)
        {
            if (licenseCriteria == null)
            {
                throw new ArgumentNullException(nameof(licenseCriteria));
            }

            var document = new XDocument();

            var licenseElement = new XElement(LicenseElements.License);

            document.Add(licenseElement);

            var id = new XElement(LicenseElements.Id, licenseCriteria.Id.ToString("D"));

            licenseElement.Add(id);

            var issueDate = new XElement(LicenseElements.IssueDate, FormatDateTime(licenseCriteria.IssueDate));

            licenseElement.Add(issueDate);

            var type = new XElement(LicenseElements.Type, licenseCriteria.Type);

            licenseElement.Add(type);

            var expirationDate = new XElement(LicenseElements.ExpirationDate, FormatDateTime(licenseCriteria.ExpirationDate));

            licenseElement.Add(expirationDate);

            foreach (var metaData in licenseCriteria.MetaData)
            {
                var element = new XElement(metaData.Key, metaData.Value);
                licenseElement.Add(element);
            }

            return(document);
        }