public CoralBaseDirective(CBORObject value, Cori baseCori)
        {
            if (value.Type != CBORType.Array || value.Count != 2)
            {
                throw new ArgumentException();
            }

            if (value[0].Type != CBORType.Integer || value[0].IsTagged || value[0].AsInt32() != 1)
            {
                throw new ArgumentException();
            }

            if (value[1].Type != CBORType.Array)
            {
                throw new ArgumentException();
            }

            Cori temp = new Cori(value[1]);

            if (!temp.IsWellFormed())
            {
                throw new ArgumentException("base value is not well formed", nameof(value));
            }

            temp = temp.ResolveTo(baseCori);
            if (!temp.IsAbsolute())
            {
                throw new ArgumentException("new base URI must be an absolute URI", nameof(value));
            }

            BaseValue = temp;
        }
Beispiel #2
0
 public CoralForm(Cori formRef, Cori target)
 {
     if (!formRef.IsAbsolute())
     {
         throw new ArgumentException("operation must be absolute URI", nameof(formRef));
     }
     OperationType = formRef;
     Target        = target;
 }
Beispiel #3
0
        public CoralFormField(Cori fieldType, Cori value)
        {
            FieldType = fieldType;
            if (!value.IsAbsolute())
            {
                throw new ArgumentException("Must be an absolute CoRI value", nameof(value));
            }

            Url = value;
        }
Beispiel #4
0
        /// <summary>
        /// Create a CoRAL link from the parameters
        /// </summary>
        /// <param name="relation">Cori value containing the relation - IRI</param>
        /// <param name="uriTarget">Absolute or relative CIRI for the target</param>
        /// <param name="body">attributes about the target</param>
        public CoralLink(Cori relation, Cori uriTarget, CoralBody body = null)
        {
            if (!relation.IsAbsolute())
            {
                throw new ArgumentException("Relation must be an absolute IRI", nameof(relation));
            }

            RelationType = relation;
            Target       = uriTarget;
            Body         = body;
        }
        public CoralBaseDirective(Cori value)
        {
            if (!value.IsWellFormed())
            {
                throw new ArgumentException("URI is not well formed", nameof(value));
            }

            if (!value.IsAbsolute())
            {
                throw new ArgumentException("URI is not absolute", nameof(value));
            }
            BaseValue = value;
        }
Beispiel #6
0
        /// <summary>
        /// Create a CoRAL link from the parameters
        /// </summary>
        /// <param name="relation">Cori version of the relation - IRI</param>
        /// <param name="target">Value of the target - Not a URI!!!</param>
        /// <param name="body">attributes about the target</param>
        public CoralLink(Cori relation, CBORObject target, CoralBody body = null)
        {
            if (!IsLiteral(target))
            {
                throw new ArgumentException("Value must be a literal value", nameof(target));
            }

            if (!relation.IsAbsolute())
            {
                throw new ArgumentException("Relation must be an absolute IRI", nameof(relation));
            }

            RelationType = relation;
            Value        = target;
            Body         = body;
        }
Beispiel #7
0
        public void TestsFromKlaus(string line, string left, string middle, string right, string baseText, string relativeText, string resultText, string skip)
        {
            try {
                CBORObject cborLeft   = CBORObject.DecodeFromBytes(HexToString(left));
                CBORObject cborRight  = CBORObject.DecodeFromBytes(HexToString(right));
                CBORObject cborMiddle = CBORObject.DecodeFromBytes(HexToString(middle));

                // Console.WriteLine($"line # = {line}");
                // Console.WriteLine($"base = {cborLeft}");
                // Console.WriteLine($"href = {cborMiddle}");
                // Console.WriteLine($"result = {cborRight}");

                Cori coriBase   = new Cori(cborLeft);
                Cori coriRight  = new Cori(cborRight);
                Cori coriMiddle = new Cori(cborMiddle);

                Assert.IsTrue(coriBase.IsAbsolute());
                Assert.IsFalse(coriBase.IsRelative());
                Assert.IsTrue(coriRight.IsAbsolute());
                Assert.IsFalse(coriRight.IsRelative());
                Assert.IsTrue(coriMiddle.IsWellFormed());

                Cori result = coriMiddle.ResolveTo(coriBase);
                Assert.AreEqual(coriRight, result);

                if (cborMiddle.Count > 0 && cborMiddle[0].AsInt32() == 5 && cborMiddle[1].AsInt32() == 1)
                {
                    return;
                }

                Cori newHref = coriRight.MakeRelative(coriBase);
                // Console.WriteLine($"computed href = {newHref.Data}");

                Cori resolve2 = newHref.ResolveTo(coriBase);
                Assert.AreEqual(coriRight.Data.ToString(), resolve2.Data.ToString());

                if (skip != "0")
                {
                    // Assert.AreEqual(coriMiddle.Data.ToString(), newHref.Data.ToString());
                }
            }
            catch (Exception e) {
                Assert.Fail(e.ToString());
            }
        }
Beispiel #8
0
        /// <summary>
        /// Decode a CBOR object into a coral body.
        /// </summary>
        /// <param name="node">CBOR node to be decoded</param>
        /// <param name="contextCori">context to decode URIs</param>
        /// <param name="dictionary">Dictionary used for decompression</param>
        public CoralBody(CBORObject node, Cori contextCori, CoralDictionary dictionary)
        {
            Cori baseCori = contextCori;

            if (node.Type != CBORType.Array)
            {
                throw new ArgumentException("Invalid node type");
            }

            if (contextCori == null || !contextCori.IsAbsolute())
            {
                throw new ArgumentException("Must be resolved to an absolute URI", nameof(contextCori));
            }

            foreach (CBORObject child in node.Values)
            {
                if (child.Type != CBORType.Array)
                {
                    throw new ArgumentException("Invalid node type");
                }

                switch (child[0].AsInt32())
                {
                case 1:
                    CoralBaseDirective d1 = new CoralBaseDirective(child, contextCori);
                    _items.Add(d1);
                    baseCori = d1.BaseValue;
                    break;

                case 2:
                    _items.Add(new CoralLink(child, baseCori, dictionary));
                    break;

                case 3:
                    _items.Add(new CoralForm(child, baseCori, dictionary));
                    break;

                default:
                    throw new ArgumentException("Unrecognized CoRAL node type");
                }
            }
        }
        public CBORObject Lookup(Cori value, bool isIntLegal)
        {
            if (!value.IsAbsolute())
            {
                return(value.Data);
            }

            foreach (KeyValuePair <int, object> o in _dictionary)
            {
                if (value.Equals(o.Value))
                {
                    if (isIntLegal)
                    {
                        return(CBORObject.FromObjectAndTag(o.Key, DictionaryTag));
                    }
                    return(CBORObject.FromObject(o.Key));
                }
            }

            return(value.Data);
        }
Beispiel #10
0
        public CoralForm(CBORObject form, Cori baseCori, CoralDictionary dictionary)
        {
            if (form.Type != CBORType.Array && !(form.Count == 3 || form.Count == 4))
            {
                throw new ArgumentException("Invalid form descriptor", nameof(form));
            }

            if (baseCori == null || !baseCori.IsAbsolute())
            {
                throw new ArgumentException("Invalid base reference", nameof(baseCori));
            }

            if (form[0].Type != CBORType.Integer || form[0].AsInt32() != 3)
            {
                throw new ArgumentException("Not a CoRAL form descriptor", nameof(form));
            }

            CBORObject o = (CBORObject)dictionary.Reverse(form[1], false);

            if (o == null)
            {
                OperationTypeInt = form[1].Untag().AsInt32();
            }
            else if (o.Type == CBORType.Array)
            {
                OperationType = new Cori(o);
                if (form[1].Type == CBORType.Integer)
                {
                    OperationTypeInt = form[1].Untag().AsInt32();
                }
            }
            else
            {
                throw new ArgumentException("Invalid operation in CoRAL form");
            }

            o = (CBORObject)dictionary.Reverse(form[2], true);
            if (o == null)
            {
                TargetInt = form[2].Untag().AsInt32();
            }
            else if (o.Type != CBORType.Array)
            {
                throw new ArgumentException("Invalid submission target", nameof(form));
            }
            else
            {
                Target = new Cori(o);
                if (form[2].Type == CBORType.Integer &&
                    form[2].HasTag(CoralDictionary.DictionaryTag))
                {
                    TargetInt = form[2].Untag().AsInt32();
                }

                Target = Target.ResolveTo(baseCori);
            }

            if (form.Count == 4)
            {
                if (form[3].Type != CBORType.Array)
                {
                    throw new ArgumentException("Invalid form field array", nameof(form));
                }

                for (int i = 0; i < form[3].Count; i += 2)
                {
                    FormFields.Add(new CoralFormField(form[3][i], form[3][i + 1], baseCori, dictionary));
                }
            }
        }