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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }