public OM2MResponseStatusCode ValidateServiceSubscroption(string serviceSubscriptionId, string serviceCapId) { try { using (var db = new OM2MDbContext()) { Model.OM2MDbServiceSubscription data; try { data = db.ServiceSubscriptions.Single(x => x.ServiceSubscriptionId == serviceSubscriptionId); } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Ok); }
public OM2MResponseStatusCode RefreshAEAssociationWithServiceSubscription(string aeId, string serviceSubscriptionId) { try { using (var db = new OM2MDbContext()) { Model.OM2MDbServiceSubscription data; try { data = db.ServiceSubscriptions.Single(x => x.AEId == aeId && x.ServiceSubscriptionId == serviceSubscriptionId); } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Updated); }
public OM2MResponseStatusCode DeregisterAE(string aeId) { try { using (var db = new OM2MDbContext()) { OM2MAEEntity data; try { data = db.Resources.Single(x => x is OM2MAEEntity && ((OM2MAEEntity)x).AEId == aeId) as OM2MAEEntity; } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } db.Resources.Remove(data); db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Deleted); }
public OM2MResponseStatusCode RefreshAERegistration(string aeId, string pointOfAccess, DateTime expirationTime, OM2MSchedule reachabilitySchedule) { try { using (var db = new OM2MDbContext()) { OM2MAEEntity data; try { data = db.Resources.Single(x => x is OM2MAEEntity && x.ResourceId == aeId) as OM2MAEEntity; } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Updated); }
public OM2MResponseStatusCode DeleteRoleFromM2MService(string serviceId, string[] serviceRoleIds) { if (serviceId == null) { throw new ArgumentNullException(nameof(serviceId)); } if (serviceRoleIds == null) { throw new ArgumentNullException(nameof(serviceRoleIds)); } try { using (var db = new OM2MDbContext()) { Model.OM2MServiceEntity data; // Get service try { data = db.Services.Single(x => x.ServiceId == serviceId); } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } // Check roleId existing foreach (var roleId in serviceRoleIds) { if (!data.ServiceRoleIds.Contains(roleId)) { return(OM2MResponseStatusCode.NoMembers); } } // Remove roleIds foreach (var roleId in serviceRoleIds) { data.ServiceRoleIds.Remove(roleId); } db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Ok); }
public OM2MResponseStatusCode GetAE(string aeId, out string applicationId, out string serviceSubscriptionId, out string[] externalIds, out OM2MSchedule reachabilitySchedule) { try { using (var db = new OM2MDbContext()) { Model.OM2MDbServiceSubscription data; try { data = db.ServiceSubscriptions.Single(x => x.AEId == aeId); } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); applicationId = null; serviceSubscriptionId = null; externalIds = null; reachabilitySchedule = null; return(OM2MResponseStatusCode.NotFound); } applicationId = data.ApplicationId; serviceSubscriptionId = null; externalIds = null; reachabilitySchedule = null; } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); applicationId = null; serviceSubscriptionId = null; externalIds = null; reachabilitySchedule = null; return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Ok); }
public OM2MResponseStatusCode AddRoleToM2MService(string serviceId, string[] serviceRoleIds) { if (serviceId == null) { throw new ArgumentNullException(nameof(serviceId)); } if (serviceRoleIds == null) { throw new ArgumentNullException(nameof(serviceRoleIds)); } try { using (var db = new OM2MDbContext()) { Model.OM2MServiceEntity data; try { data = db.Services.Single(x => x.ServiceId == serviceId); } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } foreach (var roleId in serviceRoleIds) { if (!data.ServiceRoleIds.Contains(roleId)) { data.ServiceRoleIds.Add(roleId); } } db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Ok); }
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(); } }
public OM2MResponseStatusCode CreateM2MService(string name, string description, out string serviceId) { if (name == null) { throw new ArgumentNullException(nameof(name)); } string serviceId_; serviceId = null; serviceId_ = Guid.NewGuid().ToString(); try { using (var db = new OM2MDbContext()) { var temp = db.Services.Count(x => x.Name == name); if (temp != 0) { return(OM2MResponseStatusCode.AlreadyExists); } var data = new Model.OM2MServiceEntity(); data.Name = name; data.Description = description; data.ServiceId = serviceId_; db.Services.Add(data); db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } serviceId = serviceId_; return(OM2MResponseStatusCode.Created); }
public OM2MResponseStatusCode AssociateAEWithServiceSubscription(string aeId, string credentialId, string applicationId, out string serviceSubscriptionId) { string serviceSubscriptionId_ = Guid.NewGuid().ToString(); try { using (var db = new OM2MDbContext()) { // Check duplicate while (true) { var temp = db.ServiceSubscriptions.Count(x => x.ServiceSubscriptionId == serviceSubscriptionId_); if (temp == 0) { break; } serviceSubscriptionId_ = Guid.NewGuid().ToString(); } var data = new Model.OM2MDbServiceSubscription(); data.ServiceSubscriptionId = serviceSubscriptionId_; data.AEId = aeId; data.CredentialId = credentialId; data.ApplicationId = applicationId; db.ServiceSubscriptions.Add(data); db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); serviceSubscriptionId = null; return(OM2MResponseStatusCode.InternalServerError); } serviceSubscriptionId = serviceSubscriptionId_; return(OM2MResponseStatusCode.Created); }
public static void StartServer() { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); using (var db = new OM2MDbContext()) { db.Database.EnsureDeleted(); db.Database.EnsureCreated(); } var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup <Startup>() .Build(); host.Run(); }
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 OM2MResponseStatusCode DeleteM2MService(string serviceId) { if (serviceId == null) { throw new ArgumentNullException(nameof(serviceId)); } try { using (var db = new OM2MDbContext()) { Model.OM2MServiceEntity data; try { data = db.Services.Single(x => x.ServiceId == serviceId); } catch (InvalidOperationException ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.NotFound); } db.Services.Remove(data); db.SaveChanges(); } } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } return(OM2MResponseStatusCode.Deleted); }
public static List <OM2MAccessControlPolicyEntity> GetAcpList(this OM2MDbContext db, OM2MResourceEntity entity) { var hasAcpIdsEntity = entity as IOM2MHasAccessControlPolicyIdsEntity; var acpIds = hasAcpIdsEntity != null ? hasAcpIdsEntity.AccessControlPolicyIds : null; var acpList = new List <OM2MAccessControlPolicyEntity>(); if (acpIds != null) { foreach (var acpId in acpIds) { var queryAcp = db.Resources.Find(acpId) as OM2MAccessControlPolicyEntity; if (queryAcp == null) { // Damaged continue; } acpList.Add(queryAcp); } } return(acpList); }
public OM2MResponseStatusCode RegisterAE(string pointOfAccess, string applicationId, string credentialId, DateTime exprirationTime, OM2MSchedule reachabilitySchedule, ref string aeId) { if (applicationId == null) { throw new ArgumentNullException(nameof(applicationId)); } if (aeId != null) { if (aeId.Length < 2 && aeId[0] != 'S') { throw new ArgumentException(nameof(aeId)); } } string serviceSubscriptionId; string aeId_ = aeId; int dummyId = 0; using (var db = new OM2MDbContext()) { db.Database.BeginTransaction(); if (aeId_ == null) { var id = db.GenerateId(); aeId_ = $"C{dummyId}"; } if (ServiceSubscription.AssociateAEWithServiceSubscription(aeId_, credentialId, applicationId, out serviceSubscriptionId) != OM2MResponseStatusCode.Ok) { db.Database.RollbackTransaction(); return(OM2MResponseStatusCode.InternalServerError); } try { // Check duplicate var query = db.Resources.Where(x => x.ResourceId == aeId_); if (query.Count() == 0) { var data = query.First() as OM2MAEEntity; data.AEId = aeId_; data.AppId = applicationId; //data.CredentialId = credentialId; //data.ExpirationTime = exprirationTime; } else { var data = new OM2MAEEntity(); data.AEId = aeId_; data.AppId = applicationId; //data.CredentialId = credentialId; //data.ExpirationTime = exprirationTime; db.Resources.Add(data); } db.SaveChanges(); db.Database.CommitTransaction(); } catch (Exception ex) { db.Database.RollbackTransaction(); Debug.WriteLine(ex.ToString()); return(OM2MResponseStatusCode.InternalServerError); } aeId = aeId_; } return(OM2MResponseStatusCode.Created); }
private OM2MResponsePrimitive DoRequestCore(OM2MRequestPrimitive request) { var response = new OM2MResponsePrimitive(CseConfig, request); try { OM2MController controller = null; if (request.TargetId == null && request.To == null) { throw new OM2MBadRequestException("To parameter is missing."); } if (request.TargetId == null) { request.TargetId = request.To; } // Remove last "/" if (request.TargetId.EndsWith("/", StringComparison.Ordinal)) { request.TargetId = request.TargetId.Substring(0, request.TargetId.Length - 1); } // Uri -> ResourceId using (var db = new OM2MDbContext()) { var uriMapEntity = db.UriMaps.Find(request.TargetId); if (uriMapEntity != null) { request.TargetId = uriMapEntity.ResourceId; } } // Recv-6.0.1: Receiver is Registrar CSE & Originator is AE & operation is create if (m_cseBasePattern.IsMatch(request.TargetId) && (request.From == null || m_aePattern.IsMatch(request.From)) && request.Operation == OM2MOperation.Create) { // Recv-6.0.2: “Check Service Subscription Profile” // ToDo: } if (request.Content == null) { if (request.PrimitiveContent != null && request.PrimitiveContent.Any != null && request.PrimitiveContent.Any.Count > 0) { request.Content = request.PrimitiveContent.Any[0]; } } // Recv-6.1: Hosting CSE of the targeted resource? if (IsHostingCseResouce(request.TargetId)) { if (request.Operation == OM2MOperation.Create) { if (request.ResourceType == null) { throw new OM2MBadRequestException($"Resouce type is missing for creation request."); } controller = GetControllerFromResouceType(request.ResourceType.Value); } else { controller = GetControllerFromUri(request.TargetId); } if (controller == null) { throw new OM2MBadRequestException($"Invalid request."); } response = controller.DoRequest(request); if (request.ResultContent != null && request.ResultContent == OM2MResultContent.Nothing) { response.Content = null; } } else { // ToDo:Recv-6.9: CMDH processing supported? // Now Not supported // Recv-6.11: “Forwarding” response = Fowarding(request); } } catch (OM2MException ex) { response.ResponseStatusCode = ex.ResponseStatusCode; } catch (Exception ex) { response.ResponseStatusCode = OM2MResponseStatusCode.InternalServerError; } return(response); }