private void InitCseBase() { var cseConfig = CseConfig; using (var db = new OM2MDbContext()) { var cseBaseEntity = new OM2MCseBaseEntity(); var query = db.Resources.OfType <OM2MAccessControlPolicyEntity>(); var acpEntity = query.First(); cseBaseEntity.AccessControlPolicyIds.Add(acpEntity.ResourceId); cseBaseEntity.Resources.Add(acpEntity); cseBaseEntity.CreationTime = OM2MTimeStamp.NowTimeStamp; cseBaseEntity.LastModifiedTime = cseBaseEntity.CreationTime; cseBaseEntity.CseId = cseConfig.CseBaseId; cseBaseEntity.CseType = (int)cseConfig.CseType; cseBaseEntity.ResourceName = cseConfig.CseBaseName; cseBaseEntity.ResourceId = $"/{cseConfig.CseBaseId}"; cseBaseEntity.ResourceType = (int)OM2MResourceType.CSEBase; cseBaseEntity.HierarchicalUri = $"/{cseConfig.CseBaseId}/{cseConfig.CseBaseName}"; cseBaseEntity.SupportedResourceType.AddRange(new OM2MResourceType[] { OM2MResourceType.AccessControlPolicy, OM2MResourceType.AE, OM2MResourceType.Container, OM2MResourceType.ContentInstance, OM2MResourceType.CSEBase, OM2MResourceType.Group, OM2MResourceType.Node, OM2MResourceType.PollingChannel, OM2MResourceType.RemoteCSE, OM2MResourceType.Request, OM2MResourceType.Subscription }); cseBaseEntity.PointOfAccess.Add("http://localhost:5000/"); db.Resources.Add(cseBaseEntity); var uriMapEntity = new OM2MUriMapEntity(); uriMapEntity.Uri = cseBaseEntity.HierarchicalUri; uriMapEntity.ResourceId = cseBaseEntity.ResourceId; db.UriMaps.Add(uriMapEntity); db.SaveChanges(); } }
private void InitACP() { using (var db = new OM2MDbContext()) { var cseConfig = CseConfig; var acpId = db.GenerateId(); var acpEntity = new OM2MAccessControlPolicyEntity(); acpEntity.ParentId = $"/{cseConfig.CseBaseId}"; acpEntity.CreationTime = OM2MTimeStamp.NowTimeStamp; acpEntity.LastModifiedTime = acpEntity.CreationTime; acpEntity.ResourceId = $"/{cseConfig.CseBaseId}/acp-{acpId}"; acpEntity.ResourceName = CseConfig.AdminAcpName; acpEntity.ResourceType = (int)OM2MResourceType.AccessControlPolicy; acpEntity.HierarchicalUri = $"/{cseConfig.CseBaseId}/{cseConfig.CseBaseName}/{acpEntity.ResourceName}"; var ruleEntity = new OM2MAccessControlRuleEntity(); ruleEntity.AccessControlOriginators.Add(CseConfig.AdminOriginator); ruleEntity.AccessControlOperations = 63; acpEntity.SelfPrivileges.Add(ruleEntity); ruleEntity = new OM2MAccessControlRuleEntity(); ruleEntity.AccessControlOriginators.Add(CseConfig.AdminOriginator); ruleEntity.AccessControlOriginators.Add($"/{cseConfig.CseBaseId}"); ruleEntity.AccessControlOperations = 63; acpEntity.Privileges.Add(ruleEntity); db.Resources.Add(acpEntity); var uriMapEntity = new OM2MUriMapEntity(); uriMapEntity.Uri = acpEntity.HierarchicalUri; uriMapEntity.ResourceId = acpEntity.ResourceId; db.UriMaps.Add(uriMapEntity); db.SaveChanges(); } }
public override OM2MResponsePrimitive DoCreate(OM2MRequestPrimitive request) { using (var db = CreateDbContext()) { var parentEntity = db.Resources.Find(request.TargetId); if (parentEntity == null) { throw new OM2MNotFoundException($"Cannot find parent resource: {request.TargetId}."); } List <string> acpIds = null; if (parentEntity is OM2MCseBaseEntity) { var ee = parentEntity as OM2MCseBaseEntity; acpIds = ee.AccessControlPolicyIds; } else if (parentEntity is OM2MAEEntity) { var ee = parentEntity as OM2MAEEntity; acpIds = ee.AccessControlPolicyIds; } else if (parentEntity is OM2MContainerEntity) { var ee = parentEntity as OM2MContainerEntity; acpIds = ee.AccessControlPolicyIds; } else if (parentEntity is OM2MRemoteCseEntity) { var ee = parentEntity as OM2MContainerEntity; acpIds = ee.AccessControlPolicyIds; } var acpList = new List <OM2MAccessControlPolicyEntity>(); if (acpIds != null) { foreach (var i in acpIds) { var queryAcp = db.Resources.Find(i) as OM2MAccessControlPolicyEntity; if (queryAcp == null) { // Damaged continue; } acpList.Add(queryAcp); } } CheckACP(acpList, request.From, OM2MOperation.Create); if (request.Content == null) { throw new OM2MBadRequestException("A content is required for creation."); } var resource = request.Content as OM2MContainer; if (resource == null) { throw new OM2MBadRequestException("Incorrect resource representation in content."); } /* * creator O * maxNrOfInstances O * maxByteSize O * maxInstanceAge O * currentNrOfInstances NP * currentByteSize NP * locationID O * ontologyRef O */ var entity = new OM2MContainerEntity(); // Check NP attributes if (resource.CurrentNrOfInstances != null) { throw new OM2MBadRequestException("currentNrOfInstances is not permitted."); } if (resource.CurrentByteSize != null) { throw new OM2MBadRequestException("currentNrOfInstances is not permitted."); } // Assign M/O attributes if (resource.Labels != null) { entity.Labels.AddRange(resource.Labels); } if (resource.ExpirationTime != null) { entity.ExpirationTime = resource.ExpirationTime; } if (resource.AnnounceTo != null) { entity.AnnounceTo.AddRange(resource.AnnounceTo); } if (resource.AnnouncedAttribute != null) { entity.AnnouncedAttribute.AddRange(resource.AnnouncedAttribute); } if (resource.Creator != null) { entity.Creator = resource.Creator; } if (resource.MaxNrOfInstances != null) { entity.MaxNrOfInstances = resource.MaxNrOfInstances; } if (resource.MaxByteSize != null) { entity.MaxByteSize = resource.MaxByteSize; } if (resource.MaxInstanceAge != null) { entity.MaxInstanceAge = resource.MaxInstanceAge; } if (resource.LocationID != null) { entity.LocationID = resource.LocationID; } if (resource.OntologyRef != null) { entity.OntologyRef = resource.OntologyRef; } var id = db.GenerateId(); entity.ResourceId = $"/{CseConfig.CseBaseId}/con-{id}"; entity.CreationTime = OM2MTimeStamp.NowTimeStamp; entity.LastModifiedTime = entity.CreationTime; entity.ParentId = parentEntity.ResourceId; entity.ResourceType = (int)OM2MResourceType.Container; if (resource.ResourceName != null) { // ToDo: need to check resource name entity.ResourceName = resource.ResourceName; } else { entity.ResourceName = $"con_{id}"; } entity.HierarchicalUri = parentEntity.HierarchicalUri + "/" + entity.ResourceName; if (resource.AccessControlPolicyIDs != null && resource.AccessControlPolicyIDs.Count > 0) { // ToDo: throw new OM2MNotImplementedException(); } else { entity.AccessControlPolicyIds.AddRange(acpIds); } entity.StateTag = 0; parentEntity.Resources.Add(entity); var uriMapEntity = new OM2MUriMapEntity(); uriMapEntity.Uri = entity.HierarchicalUri; uriMapEntity.ResourceId = entity.ResourceId; db.UriMaps.Add(uriMapEntity); db.SaveChanges(); var subs = parentEntity.Resources.OfType <OM2MSubscriptionEntity>().ToList(); CseService.Notify(subs, entity, OM2MResourceStatus.ChildCreated); var response = new OM2MResponsePrimitive(CseConfig, request); response.ResponseStatusCode = OM2MResponseStatusCode.Created; response.Content = entity.ToResource(OM2MResultContent.Attributes); return(response); } }
public override OM2MResponsePrimitive DoCreate(OM2MRequestPrimitive request) { using (var db = CreateDbContext()) { var parentEntity = db.Resources.Find(request.TargetId); if (parentEntity == null) { throw new OM2MNotFoundException($"Cannot find parent resource: {request.TargetId}."); } List <string> acpIds = null; if (parentEntity is OM2MCseBaseEntity) { var ee = parentEntity as OM2MCseBaseEntity; acpIds = ee.AccessControlPolicyIds; } else if (parentEntity is OM2MRemoteCseEntity) { var ee = parentEntity as OM2MContainerEntity; acpIds = ee.AccessControlPolicyIds; } if (request.From != null) { } var acpList = new List <OM2MAccessControlPolicyEntity>(); if (acpIds != null) { foreach (var i in acpIds) { var queryAcp = db.Resources.Where(x => x.ResourceId == i) .OfType <OM2MAccessControlPolicyEntity>() .Include(x => x.PrivilegesCore); if (queryAcp.Count() == 0) { // Damaged continue; } acpList.Add(queryAcp.First()); } } CheckACP(acpList, request.From, OM2MOperation.Create); if (request.Content == null) { throw new OM2MBadRequestException("A content is required for creation."); } var resource = request.Content as OM2MAE; if (resource == null) { throw new OM2MBadRequestException("Incorrect resource representation in content."); } /* * appName O * App-ID M * AE-ID NP * pointOfAccess O * ontologyRef O * nodeLink O * requestReachability M * contentSerialization O * e2eSecInfo O */ var entity = new OM2MAEEntity(); // Check NP attributes if (resource.AEID != null) { throw new OM2MBadRequestException("AE-ID is not permitted."); } // Assign M attributes if (resource.AppID == null) { throw new OM2MBadRequestException("App-ID is mandatory."); } /* * if (aeResource.RequestReachability == null) * { * throw new OM2MBadRequestException("requestReachability is mandatory."); * }*/ entity.AppId = resource.AppID; // Assign M/O attributes if (resource.AppName != null) { entity.AppName = resource.AppName; } if (resource.PointOfAccess != null) { entity.PointOfAccess.AddRange(resource.PointOfAccess); } if (resource.OntologyRef != null) { entity.OntologyRef = resource.OntologyRef; } if (resource.RequestReachability == null) { entity.RequestReachability = true; } else { entity.RequestReachability = resource.RequestReachability.Value; } if (resource.NodeLink != null) { entity.NodeLink = resource.NodeLink; } var id = db.GenerateId(); entity.ResourceId = $"/{CseConfig.CseBaseId}/CAE{id}"; entity.CreationTime = OM2MTimeStamp.NowTimeStamp; entity.LastModifiedTime = entity.CreationTime; entity.ParentId = parentEntity.ResourceId; entity.ResourceType = (int)OM2MResourceType.AE; entity.AEId = $"CAE{id}"; if (resource.ResourceName != null) { // ToDo: need to check resource name entity.ResourceName = resource.ResourceName; } else { entity.ResourceName = $"ae_{id}"; } entity.HierarchicalUri = parentEntity.HierarchicalUri + "/" + entity.ResourceName; { var acpId = db.GenerateId(); var acpEntity = new OM2MAccessControlPolicyEntity(); acpEntity.CreationTime = OM2MTimeStamp.NowTimeStamp; acpEntity.LastModifiedTime = acpEntity.CreationTime; acpEntity.ParentId = $"/{CseConfig.CseBaseId}"; acpEntity.ResourceId = $"/{CseConfig.CseBaseId}/acp-{acpId}"; acpEntity.ResourceName = $"acpae_{acpId}"; var ruleEntity = new OM2MAccessControlRuleEntity(); ruleEntity.AccessControlOperations = 63; ruleEntity.AccessControlOriginators.Add(CseConfig.AdminOriginator); acpEntity.SelfPrivileges.Add(ruleEntity); ruleEntity = new OM2MAccessControlRuleEntity(); ruleEntity.AccessControlOperations = 63; ruleEntity.AccessControlOriginators.Add(entity.AEId); ruleEntity.AccessControlOriginators.Add(CseConfig.AdminOriginator); acpEntity.Privileges.Add(ruleEntity); acpEntity.HierarchicalUri = $"/{CseConfig.CseBaseId}/{CseConfig.CseBaseName}/{acpEntity.ResourceName}"; entity.AccessControlPolicyIds.Add(acpEntity.ResourceId); //parentEntity.Resources.Add(acpEntity); db.Resources.Add(acpEntity); var uriMapEntity2 = new OM2MUriMapEntity(); uriMapEntity2.Uri = acpEntity.HierarchicalUri; uriMapEntity2.ResourceId = acpEntity.ResourceId; db.UriMaps.Add(uriMapEntity2); } //parentEntity.Resources.Add(entity); db.Resources.Add(entity); var uriMapEntity = new OM2MUriMapEntity(); uriMapEntity.Uri = entity.HierarchicalUri; uriMapEntity.ResourceId = entity.ResourceId; db.UriMaps.Add(uriMapEntity); db.SaveChanges(); var subs = db.Resources .OfType <OM2MSubscriptionEntity>() .Where(x => x.ParentId == parentEntity.ResourceId).ToList(); CseService.Notify(subs, entity, OM2MResourceStatus.ChildCreated); var response = new OM2MResponsePrimitive(CseConfig, request); response.ResponseStatusCode = OM2MResponseStatusCode.Created; response.Content = entity.ToResource(OM2MResultContent.Attributes); return(response); } }