コード例 #1
0
 public void Delete(CswNbtResource Return, CswNbtAPIGenericRequest GenericRequest)
 {
     if (hasPermission(GenericRequest, Return))
     {
         try
         {
             CswNbtNode DoomedNode = _CswNbtResources.Nodes.GetNode(GenericRequest.NodeId);
             if (null != DoomedNode && GenericRequest.MetaDataName == DoomedNode.getNodeType().NodeTypeName)
             {
                 DoomedNode.delete();
                 Return.Status = HttpStatusCode.OK;
             }
             else
             {
                 Return.Status = HttpStatusCode.NotFound;
             }
         }
         catch (Exception)
         {
             Return.Status = HttpStatusCode.InternalServerError;
         }
     }
     else
     {
         Return.Status = HttpStatusCode.Forbidden;
     }
 }
コード例 #2
0
ファイル: API.svc.cs プロジェクト: crfroehlich/legacy
        public CswNbtResource GetResource(string metadataname, string id)
        {
            CswNbtAPIGenericRequest Req = new CswNbtAPIGenericRequest(metadataname, id);
            CswNbtResource          Ret = new CswNbtResource();

            var SvcDriver = new CswWebSvcDriver <CswNbtResource, CswNbtAPIGenericRequest>(
                CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                ReturnObj: Ret,
                WebSvcMethodPtr: CswNbtWebServiceREAD.GetResource,
                ParamObj: Req
                );

            SvcDriver.run();

            WebOperationContext ctx = WebOperationContext.Current;

            ctx.OutgoingResponse.StatusCode = Ret.Status;

            if (ctx.OutgoingResponse.StatusCode != HttpStatusCode.OK)
            {
                Ret = null;
            }

            return(Ret);
        }
コード例 #3
0
ファイル: CswNbtTestREAD.cs プロジェクト: crfroehlich/legacy
        public void TestResourceGET()
        {
            const string TestUsername = "******";
            const string RoleName     = "CISPro_Admin";
            const int    TestPageSize = 15;
            const string TestLanguage = "da";

            CswNbtObjClassUser testUser = _createTestUser(TestUsername, RoleName, TestPageSize, TestLanguage);

            CswNbtResource          Resource = new CswNbtResource();
            CswNbtAPIGenericRequest Request  = new CswNbtAPIGenericRequest("User", testUser.NodeId.PrimaryKey.ToString());

            string error = string.Empty;

            try
            {
                CswNbtWebServiceREAD.GetResource(TestData.CswNbtResources, Resource, Request);
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }

            Assert.IsEmpty(error, "GETing a resource failed with exception: " + error);

            //When CIS-53085 is finished, we may want to consider verifying the prop values at the top of this method is equal to the resource fetched
        }
コード例 #4
0
ファイル: API.svc.cs プロジェクト: crfroehlich/legacy
        public CswNbtResourceCollection GetCollection(string metadataname)
        {
            CswNbtAPIGenericRequest  Req = new CswNbtAPIGenericRequest(metadataname, string.Empty);
            CswNbtResourceCollection Ret = new CswNbtResourceCollection();

            Req.PropertyFilters = _Context.Request.QueryString;

            var SvcDriver = new CswWebSvcDriver <CswNbtResourceCollection, CswNbtAPIGenericRequest>(
                CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                ReturnObj: Ret,
                WebSvcMethodPtr: CswNbtWebServiceREAD.GetCollection,
                ParamObj: Req
                );

            SvcDriver.run();

            WebOperationContext ctx = WebOperationContext.Current;

            ctx.OutgoingResponse.StatusCode = Ret.Status;

            if (ctx.OutgoingResponse.StatusCode != HttpStatusCode.OK)
            {
                Ret = null;
            }

            return(Ret);
        }
コード例 #5
0
        public void Create(CswNbtResource Return, CswNbtAPIGenericRequest GenericRequest)
        {
            if (hasPermission(GenericRequest, Return))
            {
                try
                {
                    CswNbtMetaDataNodeType NodeType = _CswNbtResources.MetaData.getNodeType(GenericRequest.MetaDataName);
                    CswNbtNode             NewNode  = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(NodeType.NodeTypeId, IsTemp : GenericRequest.Properties.Count > 0, OnAfterMakeNode : delegate(CswNbtNode node)
                    {
                        foreach (CswNbtWcfProperty WcfProp in GenericRequest.Properties)
                        {
                            ReadPropertyData(node, WcfProp);
                        }
                    });


                    Return.NodeId       = NewNode.NodeId;
                    Return.NodeName     = NewNode.NodeName;
                    Return.NodeType     = NewNode.getNodeType().NodeTypeName;
                    Return.ObjectClass  = NewNode.ObjClass.ObjectClass.ObjectClassName;
                    Return.URI          = BuildURI(NodeType.NodeTypeName, NewNode.NodeId.PrimaryKey);
                    Return.PropertyData = GetPropertyData(NewNode);

                    Return.Status = HttpStatusCode.Created;
                }
                catch (Exception)
                {
                    Return.Status = HttpStatusCode.InternalServerError;
                }
            }
            else
            {
                Return.Status = HttpStatusCode.Forbidden;
            }
        }
コード例 #6
0
ファイル: API.svc.cs プロジェクト: crfroehlich/legacy
        public CswNbtResource Create(Collection <CswNbtWcfProperty> Properties, string metadataname)
        {
            CswNbtAPIGenericRequest Req = new CswNbtAPIGenericRequest(metadataname, string.Empty);
            CswNbtResource          Ret = new CswNbtResource();

            if (null != Properties)
            {
                Req.Properties = Properties;
            }

            var SvcDriver = new CswWebSvcDriver <CswNbtResource, CswNbtAPIGenericRequest>(
                CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                ReturnObj: Ret,
                WebSvcMethodPtr: CswNbtWebServiceCREATE.Create,
                ParamObj: Req
                );

            SvcDriver.run();

            WebOperationContext ctx = WebOperationContext.Current;

            ctx.OutgoingResponse.StatusCode = Ret.Status;

            if (ctx.OutgoingResponse.StatusCode != HttpStatusCode.Created)
            {
                Ret = null;
            }

            return(Ret);
        }
コード例 #7
0
ファイル: CswNbtTestREAD.cs プロジェクト: crfroehlich/legacy
        public void TestCollectionGET()
        {
            const string RoleName = "CISPro_Admin";

            const string       TestUsername1 = "MyRestUser1";
            const int          TestPageSize1 = 15;
            const string       TestLanguage1 = "da";
            CswNbtObjClassUser testUser1     = _createTestUser(TestUsername1, RoleName, TestPageSize1, TestLanguage1);

            const string       TestUsername2 = "MyRestUser2";
            const int          TestPageSize2 = 25;
            const string       TestLanguage2 = "es";
            CswNbtObjClassUser testUser2     = _createTestUser(TestUsername2, RoleName, TestPageSize2, TestLanguage2);

            CswNbtResourceCollection resourceCollection = new CswNbtResourceCollection();
            CswNbtAPIGenericRequest  request            = new CswNbtAPIGenericRequest("User", string.Empty);

            string error = string.Empty;

            try
            {
                CswNbtWebServiceREAD.GetCollection(TestData.CswNbtResources, resourceCollection, request);
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            Assert.IsEmpty(error, "GETing a collection failed with exception: " + error);

            bool Found1 = false;
            bool Found2 = false;

            foreach (CswNbtResource resource in resourceCollection.getEntities())
            {
                if (resource.NodeId == testUser1.NodeId)
                {
                    Found1 = true;
                }
                else if (resource.NodeId == testUser2.NodeId)
                {
                    Found2 = true;
                }
            }

            Assert.IsTrue(Found1, "GETing Resource did not contain the first test user when it should have.");
            Assert.IsTrue(Found2, "GETing Resource did not contain the second test user when it should have.");
        }
コード例 #8
0
        public void Edit(CswNbtAPIReturn Return, CswNbtAPIGenericRequest GenericRequest)
        {
            if (hasPermission(GenericRequest, Return))
            {
                try
                {
                    CswNbtNode Node = _CswNbtResources.Nodes.GetNode(GenericRequest.NodeId);
                    if (null != Node && GenericRequest.MetaDataName == Node.getNodeType().NodeTypeName)
                    {
                        if (null != GenericRequest.ResourceToUpdate)
                        {
                            foreach (string propKey in GenericRequest.ResourceToUpdate.PropertyData.properties.Keys)
                            {
                                CswNbtWcfProperty wcfProp = GenericRequest.ResourceToUpdate.PropertyData.properties[propKey];
                                ReadPropertyData(Node, wcfProp);
                            }
                        }

                        if (Node.IsTemp)
                        {
                            Node.PromoteTempToReal();
                        }
                        else
                        {
                            Node.postChanges(false);
                        }
                    }
                    else
                    {
                        Return.Status = HttpStatusCode.NotFound;
                    }
                }
                catch (Exception)
                {
                    Return.Status = HttpStatusCode.InternalServerError;
                }
            }
            else
            {
                Return.Status = HttpStatusCode.Forbidden;
            }
        }
コード例 #9
0
        public void TestCreate()
        {
            CswNbtMetaDataNodeType UserNT = TestData.CswNbtResources.MetaData.getNodeType("User");

            if (null == UserNT)
            {
                throw new CswDniException(CswEnumErrorType.Error, "Unable to create a test User for REST API unit tests - no User NT was found", "Could not find a user NT by name 'User'");
            }

            CswNbtAPIGenericRequest Request         = new CswNbtAPIGenericRequest("User", string.Empty);
            CswNbtResource          CreatedResource = new CswNbtResource();

            CswNbtWebServiceCREATE.Create(TestData.CswNbtResources, CreatedResource, Request);

            CswNbtObjClassUser createdUser = TestData.CswNbtResources.Nodes.GetNode(CreatedResource.NodeId);

            Assert.IsNotNull(createdUser, "Created User was null when fetching from CswNbtResources");

            //When CIS-53088 is finished we should consider extending this to also add POST data to test creating the user with some property values
        }
コード例 #10
0
 public void GetCollection(CswNbtResourceCollection Return, CswNbtAPIGenericRequest GenericRequest)
 {
     if (hasPermission(GenericRequest, Return))
     {
         try
         {
             CswNbtMetaDataNodeType NodeType = _CswNbtResources.MetaData.getNodeType(GenericRequest.MetaDataName);
             if (null != NodeType)
             {
                 CswNbtView GetNodeTypeView = new CswNbtView(_CswNbtResources);
                 GetNodeTypeView.AddViewRelationship(NodeType, false);
                 ICswNbtTree tree = _CswNbtResources.Trees.getTreeFromView(GetNodeTypeView, true, false, false);
                 for (int i = 0; i < tree.getChildNodeCount(); i++)
                 {
                     tree.goToNthChild(i);
                     CswNbtNodeKey             nodeKey     = tree.getNodeKeyForCurrentPosition();
                     CswPrimaryKey             nodeId      = tree.getNodeIdForCurrentPosition();
                     CswNbtMetaDataObjectClass objectClass = _CswNbtResources.MetaData.getObjectClass(nodeKey.ObjectClassId);
                     CswNbtMetaDataPropertySet propSet     = objectClass.getPropertySet();
                     string propSetStr = string.Empty;
                     if (null != propSet)
                     {
                         propSetStr = propSet.Name;
                     }
                     string nodeName = tree.getNodeNameForCurrentPosition();
                     Return.Add(nodeName, nodeId, NodeType.NodeTypeName, objectClass.ObjectClassName, propSetStr, BuildURI(NodeType.NodeTypeName, nodeKey.NodeId.PrimaryKey));
                     tree.goToParentNode();
                 }
             }
             else
             {
                 Return.Status = HttpStatusCode.NotFound;
             }
         }
         catch (Exception)
         {
             Return.Status = HttpStatusCode.InternalServerError;
         }
     }
 }
コード例 #11
0
        public void TestDelete()
        {
            CswNbtObjClassUser      TestUser = _createTestUser("TestDeleteUser1", "CISPro_Admin", 15, "en");
            CswNbtAPIGenericRequest Request  = new CswNbtAPIGenericRequest("User", TestUser.NodeId.PrimaryKey.ToString());

            CswNbtResource EditedResource = new CswNbtResource();
            string         error          = string.Empty;

            try
            {
                CswNbtWebServiceDELETE.Delete(TestData.CswNbtResources, EditedResource, Request);
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            Assert.IsEmpty(error, "Delete failed with exception: " + error);

            CswNbtObjClassUser User = TestData.CswNbtResources.Nodes.GetNode(TestUser.NodeId);

            Assert.IsNull(User, "User was not null when it should have been");
        }
コード例 #12
0
ファイル: API.svc.cs プロジェクト: crfroehlich/legacy
        public void Update(CswNbtResource ResourceToUpdate, string metadataname, string id)
        {
            WebOperationContext ctx = WebOperationContext.Current;

            CswNbtAPIReturn         Ret = new CswNbtAPIReturn();
            CswNbtAPIGenericRequest Req = new CswNbtAPIGenericRequest(metadataname, id);

            bool idsMatch = true;

            if (null != ResourceToUpdate)
            {
                Req.ResourceToUpdate = ResourceToUpdate;
                if (ResourceToUpdate.NodeId.PrimaryKey != Req.NodeId.PrimaryKey)
                {
                    //if someone posts a different node with a different ID in the URI template that's a problem.
                    ctx.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
                    idsMatch = false;
                }
            }

            if (idsMatch)
            {
                var SvcDriver = new CswWebSvcDriver <CswNbtAPIReturn, CswNbtAPIGenericRequest>(
                    CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                    ReturnObj: Ret,
                    WebSvcMethodPtr: CswNbtWebServiceUPDATE.Edit,
                    ParamObj: Req
                    );

                SvcDriver.run();
                ctx.OutgoingResponse.StatusCode = Ret.Status;
            }

            if (ctx.OutgoingResponse.StatusCode != HttpStatusCode.OK)
            {
                Ret = null;
            }
        }
コード例 #13
0
        public void TestUpdate()
        {
            CswNbtObjClassUser      TestUser        = _createTestUser("Username1", "CISPro_Admin", 15, "en");
            CswNbtAPIGenericRequest Request         = new CswNbtAPIGenericRequest("User", TestUser.NodeId.PrimaryKey.ToString());
            CswNbtResource          FetchedResource = new CswNbtResource();

            CswNbtWebServiceREAD.GetResource(TestData.CswNbtResources, FetchedResource, Request);

            CswNbtMetaDataNodeType     UserNT       = TestData.CswNbtResources.MetaData.getNodeType("User");
            CswNbtMetaDataNodeTypeProp UserNameProp = UserNT.getNodeTypeProp("Username");

            const string NewFirstName = "EditedFirstName";

            FetchedResource.PropertyData.properties["First Name"].values["text"] = NewFirstName;

            CswNbtAPIGenericRequest EditRequest = new CswNbtAPIGenericRequest("User", TestUser.NodeId.PrimaryKey.ToString())
            {
                ResourceToUpdate = FetchedResource
            };
            CswNbtResource EditedResource = new CswNbtResource();

            string error = string.Empty;

            try
            {
                CswNbtWebServiceUPDATE.Edit(TestData.CswNbtResources, EditedResource, EditRequest);
            }
            catch (Exception ex)
            {
                error = ex.Message;
            }
            Assert.IsEmpty(error, "Edit failed with the following exception: " + error);

            CswNbtObjClassUser EditedUser = TestData.CswNbtResources.Nodes.GetNode(TestUser.NodeId);

            Assert.AreEqual(EditedUser.FirstNameProperty.Text, NewFirstName, "Test first name did not have the same first name as the one supplied for the API EDIT request");
        }
コード例 #14
0
 public void GetResource(CswNbtResource Return, CswNbtAPIGenericRequest GenericRequest)
 {
     if (hasPermission(GenericRequest, Return))
     {
         try
         {
             CswNbtNode Node = _CswNbtResources.Nodes.GetNode(GenericRequest.NodeId);
             if (null != Node && GenericRequest.MetaDataName.ToLower() == Node.getNodeType().NodeTypeName.ToLower())
             {
                 Return.NodeId      = GenericRequest.NodeId;
                 Return.NodeName    = Node.NodeName;
                 Return.NodeType    = Node.getNodeType().NodeTypeName;
                 Return.ObjectClass = Node.ObjClass.ObjectClass.ObjectClassName;
                 CswNbtMetaDataPropertySet propSet = Node.getObjectClass().getPropertySet();
                 if (null != propSet)
                 {
                     Return.PropertySet = propSet.Name;
                 }
                 Return.URI          = BuildURI(Return.NodeType, Node.NodeId.PrimaryKey);
                 Return.PropertyData = GetPropertyData(Node);
             }
             else
             {
                 Return.Status = HttpStatusCode.NotFound;
             }
         }
         catch (Exception)
         {
             Return.Status = HttpStatusCode.InternalServerError;
         }
     }
     else
     {
         Return.Status = HttpStatusCode.Forbidden;
     }
 }
コード例 #15
0
        public static void Create(ICswResources CswResources, CswNbtResource Return, CswNbtAPIGenericRequest GenericRequest)
        {
            CswNbtWebServiceCREATE POST = new CswNbtWebServiceCREATE((CswNbtResources)CswResources);

            POST.Create(Return, GenericRequest);
        }
コード例 #16
0
        public static void Edit(ICswResources CswResources, CswNbtAPIReturn Return, CswNbtAPIGenericRequest GenericRequest)
        {
            CswNbtWebServiceUPDATE PUT = new CswNbtWebServiceUPDATE((CswNbtResources)CswResources);

            PUT.Edit(Return, GenericRequest);
        }
コード例 #17
0
        public static void Delete(ICswResources CswResources, CswNbtResource Return, CswNbtAPIGenericRequest GenericRequest)
        {
            CswNbtWebServiceDELETE POST = new CswNbtWebServiceDELETE((CswNbtResources)CswResources);

            POST.Delete(Return, GenericRequest);
        }
コード例 #18
0
 protected abstract bool hasPermission(CswNbtAPIGenericRequest GenericRequest, CswNbtAPIReturn Return);
コード例 #19
0
        public static void GetCollection(ICswResources CswResources, CswNbtResourceCollection Return, CswNbtAPIGenericRequest GenericRequest)
        {
            CswNbtWebServiceREAD GET = new CswNbtWebServiceREAD((CswNbtResources)CswResources);

            GET.GetCollection(Return, GenericRequest);
        }
コード例 #20
0
        /// <summary>
        /// Based on the input, verifies if the user has permission to continue
        /// </summary>
        public bool hasPermission(CswNbtResources NbtResources, CswEnumNbtNodeTypePermission Permission, CswNbtAPIGenericRequest GenericRequest, CswNbtAPIReturn Return)
        {
            bool ret = false;
            CswNbtMetaDataNodeType NodeType = NbtResources.MetaData.getNodeType(GenericRequest.MetaDataName);

            if (null != NodeType)
            {
                if (NbtResources.Permit.canAnyTab(Permission, NodeType, User: NbtResources.CurrentNbtUser))
                {
                    ret = true;
                }
                else
                {
                    Return.Status = Return.Status = HttpStatusCode.Forbidden; //Permission denied
                }
            }
            else
            {
                Return.Status = Return.Status = HttpStatusCode.NotFound;
            }
            return(ret);
        }
コード例 #21
0
 protected override bool hasPermission(CswNbtAPIGenericRequest GenericRequest, CswNbtAPIReturn Return)
 {
     return(base.hasPermission(_CswNbtResources, CswEnumNbtNodeTypePermission.Delete, GenericRequest, Return));
 }
コード例 #22
0
 protected override bool hasPermission(CswNbtAPIGenericRequest GenericRequest, CswNbtAPIReturn Return)
 {
     return(true); //TODO: search permissions?
 }