Beispiel #1
0
 private IEnumerable <ManagedApp> GetApps()
 {
     using (Profiler.Measure("PlatformService.GetApps"))
     {
         return(CastEntityHelper.GetEntitiesByType <ManagedApp>());
     }
 }
Beispiel #2
0
        private IEnumerable <ManagedTenant> UpdateTenants(IManagedPlatform platform, IList <RemoteTenantInfo> tenants, ICollection <IEntity> entities, ICollection <ManagedApp> existingApps)
        {
            using (Profiler.Measure("PlatformService.UpdateTenants"))
            {
                if (platform == null)
                {
                    throw new ArgumentNullException("platform");
                }

                var ids = tenants == null?Enumerable.Empty <string>() : tenants.Select(t => t.RemoteId.ToString());

                CastEntityHelper.Delete(platform.ContainsTenants.Where(t => !ids.Contains(t.RemoteId)).Select(t => new EntityRef(t.Id)));

                if (tenants == null)
                {
                    return(new List <ManagedTenant>());
                }

                var updatedEntities = tenants.Select(t => UpdateTenant(platform, t, entities, existingApps)).ToList();

                entities.AddRange(updatedEntities);

                return(updatedEntities);
            }
        }
Beispiel #3
0
        private IEnumerable <ManagedRole> UpdateRoles(IManagedTenant tenant, RoleList roles, ICollection <IEntity> entities)
        {
            using (Profiler.Measure("PlatformService.UpdateRoles:tenant"))
            {
                if (tenant == null)
                {
                    throw new ArgumentNullException("tenant");
                }

                var ids = roles == null?Enumerable.Empty <string>() : roles.Select(r => r.RemoteId.ToString());

                CastEntityHelper.Delete(tenant.Roles.Where(r => !ids.Contains(r.RemoteId)).Select(t => new EntityRef(t.Id)));

                if (roles == null)
                {
                    return(Enumerable.Empty <ManagedRole>());
                }

                var updatedEntities = roles.Where(r => r.RemoteId > 0).Select(r => UpdateRole(tenant, r, entities)).ToList();

                entities.AddRange(updatedEntities);

                return(updatedEntities);
            }
        }
Beispiel #4
0
        private IEnumerable <ManagedUser> UpdateUsers(IManagedTenant tenant, UserList users, ICollection <IEntity> entities)
        {
            using (Profiler.Measure("PlatformService.UpdateUsers"))
            {
                if (tenant == null)
                {
                    throw new ArgumentNullException("tenant");
                }

                var ids = users == null?Enumerable.Empty <string>() : users.Select(u => u.RemoteId.ToString());

                CastEntityHelper.Delete(tenant.Users.Where(u => !ids.Contains(u.RemoteId)).Select(t => new EntityRef(t.Id)));

                if (users == null)
                {
                    return(Enumerable.Empty <ManagedUser>());
                }

                var updatedEntities = users.Where(u => u.RemoteId > 0).Select(u => UpdateUser(tenant, u, entities)).ToList();

                entities.AddRange(updatedEntities);

                return(updatedEntities);
            }
        }
Beispiel #5
0
 public IManagedAppVersion GetAppVersion(Guid appVersionId)
 {
     using (Profiler.Measure("PlatformService.GetAppVersion"))
     {
         return(CastEntityHelper.GetEntityByField <ManagedAppVersion>(new EntityRef(ManagedAppVersionSchema.AppVersionIdField), appVersionId.ToString("B")));
     }
 }
Beispiel #6
0
        public IManagedPlatform GetPlatformByDatabaseId(string id)
        {
            using (Profiler.Measure("PlatformService.GetPlatformByDatabaseId"))
            {
                if (string.IsNullOrEmpty(id))
                {
                    throw new ArgumentNullException("id");
                }

                var platform = CastEntityHelper.GetEntityByField <ManagedPlatform>(new EntityRef(ManagedPlatformSchema.DatabaseIdField), id);

                if (platform != null)
                {
                    // pre-load? may be doing this wrong. i forget how to check it.
                    EntityRepository.Get <ManagedPlatform>(platform.Id, ManagedPlatform.ManagedPlatformPreloadQuery);
                }

                return(platform);

                //return CastQueryHelper.GetEntityByFieldValue<ManagedPlatform>(
                //    new EntityRef(ManagedPlatform.ManagedPlatformType),
                //    new EntityRef(ManagedPlatform.DatabaseIdField),
                //    id, preloadQuery: ManagedPlatform.ManagedPlatformPreloadQuery);
            }
        }
Beispiel #7
0
        private ManagedApp UpdateApp(AvailableApplication app)
        {
            using (Profiler.Measure("PlatformService.UpdateApp"))
            {
                var managedApp = default(IManagedApp);

                if (app != null && app.ApplicationId != Guid.Empty)
                {
                    managedApp = GetApp(app.ApplicationId);

                    // update or create apps
                    if (managedApp != null)
                    {
                        managedApp = managedApp.AsWritable <ManagedApp>();
                    }
                    else
                    {
                        managedApp = CastEntityHelper.CreateApp();
                        managedApp.ApplicationId = app.ApplicationId;
                    }

                    managedApp.Name         = app.Name;
                    managedApp.Publisher    = app.Publisher;
                    managedApp.PublisherUrl = app.PublisherUrl;
                    managedApp.ReleaseDate  = app.ReleaseDate;
                }

                return((ManagedApp)managedApp);
            }
        }
Beispiel #8
0
        /// <summary>
        /// Gets the product that is identified by the given sku.
        /// </summary>
        /// <param name="sku">The stock keeping unit.</param>
        /// <returns>The marketplace product.</returns>
        public IMarketplaceProduct GetProduct(string sku)
        {
            using (Profiler.Measure("MarketplaceService.GetProduct"))
            {
                if (string.IsNullOrEmpty(sku))
                {
                    throw new ArgumentNullException("sku");
                }

                return(CastEntityHelper.GetEntityByField <MarketplaceProduct>(new EntityRef(MarketplaceProductSchema.SkuField), sku));
            }
        }
Beispiel #9
0
        private ManagedUser UpdateUser(IManagedTenant tenant, RemoteUserInfo user, ICollection <IEntity> entities)
        {
            using (Profiler.Measure("PlatformService.UpdateUser"))
            {
                var mu = default(IManagedUser);

                if (user.RemoteId <= 0)
                {
                    return(null);
                }

                if (tenant != null)
                {
                    mu = tenant.Users.FirstOrDefault(u => u.RemoteId == user.RemoteId.ToString());
                }

                if (mu != null)
                {
                    mu = mu.AsWritable <ManagedUser>();
                }
                else
                {
                    mu          = CastEntityHelper.CreateUser();
                    mu.RemoteId = user.RemoteId.ToString();
                }

                mu.Name = user.Name;

                switch (user.Status)
                {
                case UserStatus.Active: mu.Status_Enum = ManagedUserStatusEnumeration.Active; break;

                case UserStatus.Disabled: mu.Status_Enum = ManagedUserStatusEnumeration.Disabled; break;

                case UserStatus.Expired: mu.Status_Enum = ManagedUserStatusEnumeration.Expired; break;

                case UserStatus.Locked: mu.Status_Enum = ManagedUserStatusEnumeration.Locked; break;

                default: mu.Status_Enum = ManagedUserStatusEnumeration.Unknown; break;
                }

                var r = UpdateRoles(mu, user.Roles, entities);
                mu.Roles.AddRange(r);

                if (tenant != null)
                {
                    mu.Tenant = tenant;
                }

                return((ManagedUser)mu);
            }
        }
Beispiel #10
0
        private ManagedPlatform Create(string dbid)
        {
            using (Profiler.Measure("PlatformService.Create"))
            {
                var managedPlatform = CastEntityHelper.CreatePlatform();

                managedPlatform.Name        = dbid;
                managedPlatform.DatabaseId  = dbid;
                managedPlatform.LastContact = DateTime.UtcNow;

                return((ManagedPlatform)managedPlatform);
            }
        }
Beispiel #11
0
        public IManagedPlatform CreateOrUpdate(RemotePlatformInfo pi)
        {
            using (Profiler.Measure("PlatformService.CreateOrUpdate"))
            {
                if (pi == null || string.IsNullOrEmpty(pi.Id))
                {
                    throw new ArgumentException("Platform information was invalid.");
                }

                var entities = new EntityCollection <IEntity>();

                IManagedPlatform mp;

                try
                {
                    mp = GetPlatformByDatabaseId(pi.Id);

                    // load or create the platform instance
                    mp = mp != null?mp.AsWritable <ManagedPlatform>() : Create(pi.Id);

                    if (mp == null)
                    {
                        throw new Exception(string.Format("Failed to create or update info for the platform instance '{0}'.", pi.Id));
                    }

                    mp.LastContact = DateTime.UtcNow;

                    entities.Add(mp);

                    var fe = UpdateFrontEnds(mp, pi.FrontEndHost, pi.FrontEndDomain, entities);
                    mp.FrontEndHistory.Add(fe);

                    var db = UpdateDatabases(mp, pi.Database, pi.DatabaseServer, entities);
                    mp.DatabaseHistory.Add(db);

                    var apps = GetApps().ToList();

                    var appVersions = UpdateAvailableApps(mp, pi.Apps, entities, apps);
                    mp.AvailableAppVersions.AddRange(appVersions);

                    var tenants = UpdateTenants(mp, pi.Tenants, entities, apps);
                    mp.ContainsTenants.AddRange(tenants);
                }
                finally
                {
                    CastEntityHelper.Save(entities);
                }

                return(mp);
            }
        }
Beispiel #12
0
        /// <summary>
        /// Gets information about a tenant with the given name.
        /// </summary>
        /// <param name="name">The tenant name.</param>
        /// <returns>A tenant info object.</returns>
        public RemoteTenantInfo GetTenant(string name)
        {
            using (Profiler.Measure("TenantService.GetTenant"))
            {
                using (new GlobalAdministratorContext())
                {
                    var tenant = CastEntityHelper.GetEntityByField <TenantModel>(new EntityRef(TenantModel.Name_Field), name);

                    if (tenant == null)
                    {
                        return(null);
                    }

                    return(GetTenantInfo(tenant));
                }
            }
        }
Beispiel #13
0
        private PlatformDatabase UpdateDatabases(IManagedPlatform platform, string catalog, string server, ICollection <IEntity> entities)
        {
            using (Profiler.Measure("PlatformService.UpdateDatabases"))
            {
                if (string.IsNullOrEmpty(catalog))
                {
                    throw new ArgumentNullException("catalog");
                }

                if (string.IsNullOrEmpty(server))
                {
                    throw new ArgumentNullException("server");
                }

                IPlatformDatabase db = null;

                if (platform != null)
                {
                    db = platform.DatabaseHistory.FirstOrDefault(d =>
                                                                 string.Equals(d.Catalog, catalog, StringComparison.InvariantCultureIgnoreCase) &&
                                                                 string.Equals(d.Server, server, StringComparison.InvariantCultureIgnoreCase));
                }

                if (db != null)
                {
                    db = db.AsWritable <PlatformDatabase>();
                }
                else
                {
                    db         = CastEntityHelper.CreatePlatformDatabase();
                    db.Catalog = catalog;
                    db.Server  = server;
                }

                db.Name        = string.Format("{0} ({1})", server, catalog);
                db.LastContact = DateTime.UtcNow;

                entities.Add(db);

                return((PlatformDatabase)db);
            }
        }
Beispiel #14
0
        public IManagedUser CreateOrUpdateUser(string databaseId, string tenant, RemoteUserInfo u)
        {
            using (Profiler.Measure("PlatformService.CreateOrUpdateUser"))
            {
                if (u == null)
                {
                    throw new ArgumentException("User information was invalid.");
                }

                var entities = new EntityCollection <IEntity>();

                var mu = default(IManagedUser);

                try
                {
                    var mp = GetPlatformByDatabaseId(databaseId);
                    if (mp != null)
                    {
                        mp = mp.AsWritable <ManagedPlatform>();

                        var mt = mp.ContainsTenants.FirstOrDefault(t => t.Name == tenant);
                        if (mt != null)
                        {
                            mt = mt.AsWritable <ManagedTenant>();

                            entities.Add(mt);

                            mu = UpdateUser(mt, u, entities);

                            entities.Add(mu);
                        }
                    }
                }
                finally
                {
                    CastEntityHelper.Save(entities);
                }

                return(mu);
            }
        }
Beispiel #15
0
        private PlatformFrontEnd UpdateFrontEnds(IManagedPlatform platform, string host, string domain, ICollection <IEntity> entities)
        {
            using (Profiler.Measure("PlatformService.UpdateFrontEnds"))
            {
                if (string.IsNullOrEmpty(host))
                {
                    throw new ArgumentNullException("host");
                }

                IPlatformFrontEnd fe = null;

                if (platform != null)
                {
                    fe = platform.FrontEndHistory.FirstOrDefault(f =>
                                                                 string.Equals(f.Host, host, StringComparison.InvariantCultureIgnoreCase) &&
                                                                 string.Equals(f.Domain, domain, StringComparison.InvariantCultureIgnoreCase));
                }

                if (fe != null)
                {
                    fe = fe.AsWritable <PlatformFrontEnd>();
                }
                else
                {
                    fe        = CastEntityHelper.CreatePlatformFrontEnd();
                    fe.Host   = host;
                    fe.Domain = domain;
                }

                fe.Name = host;
                if (!string.IsNullOrEmpty(domain) && !host.EndsWith(domain))
                {
                    fe.Name = host + "." + domain;
                }
                fe.LastContact = DateTime.UtcNow;

                entities.Add(fe);

                return((PlatformFrontEnd)fe);
            }
        }
Beispiel #16
0
        private ManagedTenant UpdateTenant(IManagedPlatform platform, RemoteTenantInfo tenant, ICollection <IEntity> entities, ICollection <ManagedApp> existingApps)
        {
            using (Profiler.Measure("PlatformService.UpdateTenant"))
            {
                IManagedTenant mt = null;

                if (platform != null)
                {
                    mt = platform.ContainsTenants.FirstOrDefault(t => t.RemoteId == tenant.RemoteId.ToString());
                }

                if (mt != null)
                {
                    mt = mt.AsWritable <ManagedTenant>();
                }
                else
                {
                    mt          = CastEntityHelper.CreateTenant();
                    mt.RemoteId = tenant.RemoteId.ToString();
                }

                mt.Name     = tenant.Name;
                mt.Disabled = tenant.Disabled;

                var userRoles = UpdateRoles(mt, tenant.Roles, entities);
                mt.Roles.AddRange(userRoles);

                var users = UpdateUsers(mt, tenant.Users, entities);
                mt.Users.AddRange(users);

                var apps = UpdateInstalledApps(mt, tenant.Apps, entities, existingApps);
                mt.HasAppsInstalled.AddRange(apps);

                if (platform != null)
                {
                    mt.Platform = platform;
                }

                return((ManagedTenant)mt);
            }
        }
Beispiel #17
0
        public IManagedTenant UpdateInstalledApplications(string databaseId, string tenant, IList <InstalledApplication> apps)
        {
            using (Profiler.Measure("PlatformService.UpdateInstalledApplications"))
            {
                var entities = new EntityCollection <IEntity>();

                var mt = default(IManagedTenant);

                try
                {
                    var mp = GetPlatformByDatabaseId(databaseId);
                    if (mp != null)
                    {
                        mp = mp.AsWritable <ManagedPlatform>();

                        mt = mp.ContainsTenants.FirstOrDefault(t => t.Name == tenant);
                        if (mt != null)
                        {
                            mt = mt.AsWritable <ManagedTenant>();

                            entities.Add(mt);

                            var existingApps = GetApps().ToList();

                            var installed = UpdateInstalledApps(mt, apps, entities, existingApps);

                            mt.HasAppsInstalled.AddRange(installed);
                        }
                    }
                }
                finally
                {
                    CastEntityHelper.Save(entities);
                }

                return(mt);
            }
        }
Beispiel #18
0
        public IManagedTenant CreateOrUpdateTenant(string databaseId, RemoteTenantInfo ti)
        {
            using (Profiler.Measure("PlatformService.CreateOrUpdateTenant"))
            {
                if (ti == null)
                {
                    throw new ArgumentException("Tenant information was invalid.");
                }

                var entities = new EntityCollection <IEntity>();

                IManagedTenant mt;

                try
                {
                    var mp = GetPlatformByDatabaseId(databaseId);
                    if (mp != null)
                    {
                        mp = mp.AsWritable <ManagedPlatform>();

                        entities.Add(mp);
                    }

                    var apps = GetApps().ToList();

                    mt = UpdateTenant(mp, ti, entities, apps);

                    entities.Add(mt);
                }
                finally
                {
                    CastEntityHelper.Save(entities);
                }

                return(mt);
            }
        }
Beispiel #19
0
        private ManagedRole UpdateRole(IManagedTenant tenant, RemoteRoleInfo role, ICollection <IEntity> entities)
        {
            using (Profiler.Measure("PlatformService.UpdateRole"))
            {
                var mr = default(IManagedRole);

                if (role.RemoteId <= 0)
                {
                    return(null);
                }

                if (tenant != null)
                {
                    mr = tenant.Roles.FirstOrDefault(r => r.RemoteId == role.RemoteId.ToString());
                }

                if (mr != null)
                {
                    mr = mr.AsWritable <ManagedRole>();
                }
                else
                {
                    mr          = CastEntityHelper.CreateRole();
                    mr.RemoteId = role.RemoteId.ToString();
                }

                mr.Name = role.Name;

                if (tenant != null)
                {
                    mr.Tenant = tenant;
                }

                return((ManagedRole)mr);
            }
        }
Beispiel #20
0
        private ManagedAppVersion UpdateAppVersion(IManagedPlatform platform, IManagedTenant tenant, AvailableApplication app, ICollection <ManagedApp> existingApps)
        {
            using (Profiler.Measure("PlatformService.UpdateAppVersion"))
            {
                IManagedApp        managedApp        = existingApps.FirstOrDefault(e => e.ApplicationId == app.ApplicationId);
                IManagedAppVersion managedAppVersion = null;

                // does it exit on the platform?
                if (platform != null)
                {
                    managedAppVersion = platform.AvailableAppVersions.FirstOrDefault(v => v.VersionId == app.ApplicationVersionId) ??
                                        GetAppVersion(app.ApplicationVersionId);
                }

                // or the tenant?
                if (tenant != null && managedAppVersion == null)
                {
                    managedAppVersion = tenant.HasAppsInstalled.FirstOrDefault(i => i.VersionId == app.ApplicationVersionId);
                }

                // or in amongst the list of apps just being created?
                if (managedAppVersion == null)
                {
                    managedAppVersion = existingApps.SelectMany(a => a.Versions).FirstOrDefault(v =>
                                                                                                (v.VersionId == app.ApplicationVersionId) &&
                                                                                                (v.Version == app.PackageVersion) &&
                                                                                                (v.Name == app.Name));
                }

                if (managedAppVersion != null)
                {
                    managedAppVersion = managedAppVersion.AsWritable <ManagedAppVersion>();

                    // it should have an app
                    if (managedAppVersion.Application != null)
                    {
                        managedApp = managedAppVersion.Application;
                    }
                }
                else
                {
                    managedAppVersion           = CastEntityHelper.CreateAppVersion();
                    managedAppVersion.VersionId = app.ApplicationVersionId;
                }

                managedAppVersion.Name        = app.Name;
                managedAppVersion.Version     = app.PackageVersion;
                managedAppVersion.PublishDate = app.ReleaseDate;

                // does the app exist then?
                if (managedApp == null)
                {
                    managedApp = UpdateApp(app);
                }

                if (managedApp != null)
                {
                    managedApp = managedApp.AsWritable <ManagedApp>();
                    managedApp.Versions.Add((ManagedAppVersion)managedAppVersion);

                    managedAppVersion.Application = managedApp;

                    existingApps.Add((ManagedApp)managedApp);
                }

                if (platform != null || tenant != null)
                {
                    if (platform != null)
                    {
                        platform.AvailableAppVersions.Add((ManagedAppVersion)managedAppVersion);
                    }

                    if (tenant != null)
                    {
                        tenant.HasAppsInstalled.Add((ManagedAppVersion)managedAppVersion);
                    }
                }

                return((ManagedAppVersion)managedAppVersion);
            }
        }