public ActionResult CopyConfig(int id, int fromGameId = 0)
        {
            try
            {
                var game     = new TCAdmin.GameHosting.SDK.Objects.Game(id);
                var fromGame = new TCAdmin.GameHosting.SDK.Objects.Game(fromGameId);

                if (fromGame.CustomFields["BannerModule:Settings"] != null)
                {
                    var fromGameSettings =
                        JsonConvert.DeserializeObject <SettingsModel>(fromGame.CustomFields["BannerModule:Settings"]
                                                                      .ToString());

                    SaveBannerSettingsToGame(game, fromGameSettings);

                    return(JavaScript("window.location.reload(false);"));
                }

                return(Json(new
                {
                    Message = "Could not parse config from " + fromGame.Name
                }));
            }
            catch (Exception e)
            {
                return(Json(new
                {
                    Message = "Could not copy configuration - " + e.Message
                }));
            }
        }
        public override async Task DoAction()
        {
            await base.DoAction();

            await CommandContext.TriggerTypingAsync();

            var game = new TCAdmin.GameHosting.SDK.Objects.Game(Authentication.Service.GameId);

            if (!game.WebConsole.EnableWebConsole || string.IsNullOrEmpty(game.WebConsole.LogFile))
            {
                await CommandContext.RespondAsync("**This game does not support Log Viewing.**");

                return;
            }

            try
            {
                var logFileDirectory = Path.GetDirectoryName(game.WebConsole.LogFile);
                var tcaFileManager   = new TcaFileManager(CommandContext, Authentication,
                                                          Authentication.Service.RootDirectory + "\\" + logFileDirectory, true);
                await tcaFileManager.InitializeFileManagerAsync();
            }
            catch (ArgumentException)
            {
                await CommandContext.RespondAsync("**The path for the logs contains too many files to show.");
            }
            catch (Exception ex)
            {
                var id = SentrySdk.CaptureException(ex);
                await CommandContext.RespondAsync(
                    $"**An error occurred when using the File Manager\nSentry ID: {id}.**");
            }
        }
        public ActionResult DeleteConfig(int id)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            game.CustomFields["BannerModule:Settings"] = null;
            game.Save();

            return(JavaScript("window.location.reload(false);"));
        }
        public ActionResult DeleteOverlay(int id, int bannerObjectId)
        {
            var game     = new TCAdmin.GameHosting.SDK.Objects.Game(id);
            var settings = GetSettingsForGame(game);

            settings.Overlays.RemoveAll(x => x.BannerObjectId == bannerObjectId);
            SaveBannerSettingsToGame(game, settings);
            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
        public ActionResult GeneralSettings(int id)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            ViewData.Add("gameId", id);

            var settings = GetSettingsForGame(game);

            return(PartialView("_GeneralSettings", settings.GeneralSettingsModel));
        }
        public ActionResult WatermarkSettings(int id, int watermarkId)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            ViewData.Add("gameId", id);

            var settings  = GetSettingsForGame(game);
            var watermark = settings.Watermarks.FirstOrDefault(x => x.BannerObjectId == watermarkId);

            return(PartialView("_UpdateWatermark", watermark));
        }
        public ActionResult Settings(int id)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            ViewData.Add("gameId", id);

            var model = new SettingsModel
            {
                GameId     = game.GameId,
                Watermarks = GetSettingsForGame(game).Watermarks
            };

            return(View(model));
        }
        public ActionResult AddOverlay(int id, string url)
        {
            var game     = new TCAdmin.GameHosting.SDK.Objects.Game(id);
            var settings = GetSettingsForGame(game);

            settings.Overlays.Add(new OverlayModel
            {
                BannerObjectId = settings.Overlays.OrderByDescending(x => x.BannerObjectId).ToList()[0].BannerObjectId +
                                 1,
                Url = url
            });
            SaveBannerSettingsToGame(game, settings);
            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
        public ActionResult AddWatermark(int id, string text)
        {
            var game     = new TCAdmin.GameHosting.SDK.Objects.Game(id);
            var settings = GetSettingsForGame(game);

            settings.Watermarks.Add(new WatermarkModel
            {
                BannerObjectId =
                    settings.Watermarks.OrderByDescending(x => x.BannerObjectId).ToList()[0].BannerObjectId + 1,
                Text = text
            });
            SaveBannerSettingsToGame(game, settings);
            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }
        public ActionResult GeneralSettings(int id, GeneralSettingsModel model)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            var settings = GetSettingsForGame(game);

            settings.GeneralSettingsModel = model;
            SaveBannerSettingsToGame(game, settings);

            return(new JsonHttpStatusResult(new
            {
                Message = "Saved Successfully"
            }, HttpStatusCode.OK));
        }
        public VirtualDirectorySecurity(TCAdmin.SDK.Web.References.FileSystem.FileSystem fileSystem,
                                        string currentDirectory, UserType type, int gameId)
        {
            UserType = type;
            if (!fileSystem.DirectoryExists(currentDirectory))
            {
                throw new CustomMessageException(EmbedTemplates.CreateErrorEmbed("Could not find directory."));
            }

            var game = new TCAdmin.GameHosting.SDK.Objects.Game(gameId);

            var ds = new TCAdmin.SDK.VirtualFileSystem.VirtualDirectorySecurity
            {
                PermissionMode   = PermissionMode.Basic,
                Permissions      = Permission.Read | Permission.Write | Permission.Delete,
                PermissionType   = PermissionType.Root,
                RootPhysicalPath = currentDirectory + "\\",
                RealPhysicalPath =
                    TCAdmin.SDK.Misc.FileSystem.FixAbsoluteFilePath(currentDirectory, OperatingSystem.Windows),
                DisableOwnerCheck    = true,
                DisableSymlinkCheck  = true,
                VirtualDirectoryName = currentDirectory
            };

            if (type == UserType.SubAdmin)
            {
                var f = game.FileSystemPermissions.FirstOrDefault(x => x.RootPhysicalPath == "$[SubAdminFiles]");
                ds.AdditionalPermissions = f.AdditionalPermissions;
                ds.Filters = f.Filters;
            }

            if (type == UserType.User)
            {
                var f = game.FileSystemPermissions.FirstOrDefault(x => x.RootPhysicalPath == "$[UserFiles]");
                ds.AdditionalPermissions = f.AdditionalPermissions;
                ds.Filters = f.Filters;
            }

            VirtualDirectorySecurityObject = ds;
            VirtualDirectorySecurityString = ObjectXml.ObjectToXml(ds);
        }
        public static SettingsModel GetSettingsForGame(TCAdmin.GameHosting.SDK.Objects.Game game)
        {
            var bannerSettings = game.CustomFields["BannerModule:Settings"];

            if (bannerSettings == null)
            {
                return(new SettingsModel
                {
                    GeneralSettingsModel = new GeneralSettingsModel(),
                    Watermarks = GenerateDefaultWatermarks(),
                    Overlays = new List <OverlayModel>(),
                    GameId = game.GameId
                });
            }

            return(JsonConvert.DeserializeObject <SettingsModel>(bannerSettings.ToString(), new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                DefaultValueHandling = DefaultValueHandling.Populate,
            }));
        }
        public ActionResult OverlaySettings(int id, OverlayModel model)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            if (!ModelState.IsValid)
            {
                return(new JsonHttpStatusResult(new
                {
                    Message = "Cannot save - Model state invalid."
                }, HttpStatusCode.BadRequest));
            }

            var settings = GetSettingsForGame(game);

            settings.Overlays.Add(model);
            SaveBannerSettingsToGame(game, settings);

            return(new JsonHttpStatusResult(new
            {
                Message = "Saved Successfully"
            }, HttpStatusCode.OK));
        }
        public ActionResult OverlaySettings(int id, int overlayId)
        {
            var game = new TCAdmin.GameHosting.SDK.Objects.Game(id);

            ViewData.Add("gameId", id);

            var settings = GetSettingsForGame(game);

            if (settings.Overlays == null || settings.Overlays.Count <= 0)
            {
                return(PartialView("_UpdateOverlay", new OverlayModel()
                {
                    BannerObjectId = 1,
                    Url = "",
                    PositionX = 5,
                    PositionY = 5,
                }));
            }

            var overlay = settings.Overlays.FirstOrDefault(x => x.BannerObjectId == overlayId);

            return(PartialView("_UpdateOverlay", overlay));
        }
Esempio n. 15
0
        private void DeleteModpackCmdLines(TCAdmin.GameHosting.SDK.Objects.Service service)
        {
            var deleted  = false;
            var cmdlines = TCAdmin.GameHosting.SDK.Objects.CustomCmdLine.GetCustomCommandLines(service.ServiceId);

            foreach (TCAdmin.GameHosting.SDK.Objects.CustomCmdLine cmdline in cmdlines)
            {
                if (cmdline.Variables.HasValue("CM:ModpackCmd") && (bool)cmdline.Variables["CM:ModpackCmd"])
                {
                    deleted = true;
                    cmdline.Delete();
                }
            }

            if (deleted && service.OverrideCommandLine)
            {
                var game = new TCAdmin.GameHosting.SDK.Objects.Game(service.GameId);
                service.CustomFields["d3b2aa93-7e2b-4e0d-8080-67d14b2fa8a9:CmdLineManager:CmdLineName"] = string.Empty;
                service.UnparsedCommandLine = service.Private && !string.IsNullOrEmpty(game.CommandLines.PrivateCmdLine) ? game.CommandLines.PrivateCmdLine : game.CommandLines.DefaultCmdLine;
                service.Save();
                service.Configure();
            }
        }
        // [AllowAnonymous]
        public ActionResult Index(int id)
        {
            try
            {
                ObjectBase.GlobalSkipSecurityCheck = true;
                var skipCache  = bool.Parse(Request.QueryString["SkipCache"]);
                var service    = new Service(id);
                var game       = new TCAdmin.GameHosting.SDK.Objects.Game(service.GameId);
                var settings   = GetSettingsForGame(game);
                var cachedFile = new FileInfo(Path.Combine(TCAdmin.SDK.Utility.GetTempPath(),
                                                           $"__BannerModule.Service.{service.ServiceId}.jpg"));
                var cachedTime = game.QueryMonitoring.QueryInterval;
                if (skipCache && cachedFile.Exists)
                {
                    cachedFile.Delete();
                }
                else
                {
                    if (cachedFile.Exists)
                    {
                        if (DateTime.Now - cachedFile.CreationTime < TimeSpan.FromSeconds(cachedTime))
                        {
                            return(File(cachedFile.FullName, "image/jpeg"));
                        }
                        else
                        {
                            cachedFile.Delete();
                        }
                    }
                }

                using (var imageFactory = new ImageFactory(true))
                {
                    var image = GenerateImageSize(settings.GeneralSettingsModel.SizeX,
                                                  settings.GeneralSettingsModel.SizeY);

                    imageFactory.Load(image);
                    var dimensions = imageFactory.Image.PhysicalDimension;
                    foreach (var overlay in settings.Overlays.OrderBy(x => x.ViewOrder))
                    {
                        var overlayImage = ImageFromUrl(overlay.Url);
                        overlayImage = ResizeImage(overlayImage, (int)dimensions.Width, (int)dimensions.Height,
                                                   ResizeMode.Stretch);
                        overlay.PositionX = 0;
                        overlay.PositionY = 0;
                        imageFactory.Overlay(new ImageLayer
                        {
                            Image    = overlayImage,
                            Opacity  = 100,
                            Position = new Point(overlay.PositionX, overlay.PositionY),
                        });
                    }

                    foreach (var parsedWatermark in settings.Watermarks.OrderBy(x => x.ViewOrder).Select(watermark =>
                                                                                                         watermark.ReplaceWithContext(service)))
                    {
                        imageFactory.Watermark(new TextLayer
                        {
                            Position  = new Point(parsedWatermark.PositionX, parsedWatermark.PositionY),
                            Text      = parsedWatermark.Text,
                            FontSize  = parsedWatermark.FontSize,
                            Style     = FontStyle.Bold,
                            FontColor = ColorTranslator.FromHtml(parsedWatermark.Color),
                        });
                    }

                    var tempFileName = Path.GetTempFileName();
                    imageFactory.Save(tempFileName);
                    System.IO.File.Copy(tempFileName, cachedFile.FullName);
                    return(File(tempFileName, "image/jpeg"));
                }
            }
            finally
            {
                ObjectBase.GlobalSkipSecurityCheck = false;
            }
        }
 public bool SetConfigurationForGame(TCAdmin.GameHosting.SDK.Objects.Game game, GeneralConfiguration obj)
 {
     game.AppData[$"__CustomModsModule::General_Config"] = JsonConvert.SerializeObject(obj);
     return(game.Save());
 }
        public static GeneralConfiguration GetConfigurationForGame(TCAdmin.GameHosting.SDK.Objects.Game game)
        {
            var value = game.AppData.GetValue($"__CustomModsModule::General_Config", "{}").ToString();

            return(JsonConvert.DeserializeObject <GeneralConfiguration>(value));
        }
        private static void SaveBannerSettingsToGame(TCAdmin.GameHosting.SDK.Objects.Game game,
                                                     SettingsModel settingsModel)
        {
            var bannerSettings = game.CustomFields["BannerModule:Settings"];

            if (bannerSettings == null)
            {
                game.CustomFields["BannerModule:Settings"] = JsonConvert.SerializeObject(settingsModel);
                game.Save();
            }

            bannerSettings = game.CustomFields["BannerModule:Settings"];
            var settings = JsonConvert.DeserializeObject <SettingsModel>(bannerSettings.ToString(),
                                                                         new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Include,
            });

            if (settings == null)
            {
                throw new NullReferenceException("Cannot parse Settings variable for Game.");
            }

            if (settingsModel.GeneralSettingsModel != null)
            {
                settings.GeneralSettingsModel = settingsModel.GeneralSettingsModel;
            }

            if (settingsModel.Watermarks != null)
            {
                foreach (var settingsWatermark in settingsModel.Watermarks)
                {
                    if (settings.Watermarks.Any(x => x.BannerObjectId == settingsWatermark.BannerObjectId))
                    {
                        settings.Watermarks[
                            settings.Watermarks.FindIndex(ind =>
                                                          ind.BannerObjectId.Equals(settingsWatermark.BannerObjectId))] = settingsWatermark;
                    }
                    else
                    {
                        settings.Watermarks.Add(settingsWatermark);
                    }
                }

                var watermarksToDelete = settings.Watermarks.Except(settingsModel.Watermarks).ToList();
                foreach (var watermarkModel in watermarksToDelete)
                {
                    settings.Watermarks.Remove(watermarkModel);
                }
            }

            if (settingsModel.Overlays != null)
            {
                foreach (var settingsOverlay in settingsModel.Overlays)
                {
                    if (settings.Overlays.Any(x => x.BannerObjectId == settingsOverlay.BannerObjectId))
                    {
                        settings.Overlays[
                            settings.Overlays.FindIndex(ind =>
                                                        ind.BannerObjectId.Equals(settingsOverlay.BannerObjectId))] = settingsOverlay;
                    }
                    else
                    {
                        settings.Overlays.Add(settingsOverlay);
                    }
                }

                var overlaysToDelete = settings.Overlays.Except(settingsModel.Overlays).ToList();
                foreach (var watermarkModel in overlaysToDelete)
                {
                    settings.Overlays.Remove(watermarkModel);
                }
            }

            game.CustomFields["BannerModule:Settings"] = JsonConvert.SerializeObject(settings);
            game.Save();
        }
Esempio n. 20
0
 public bool SetConfigurationForGame(TCAdmin.GameHosting.SDK.Objects.Game game, object obj)
 {
     game.AppData[$"__CustomModsModule::{this.Name.ReplaceWhitespace()}_Config"] = JsonConvert.SerializeObject(obj);
     return(game.Save());
 }
Esempio n. 21
0
        public JObject GetConfigurationForGame(TCAdmin.GameHosting.SDK.Objects.Game game)
        {
            var value = game.AppData.GetValue($"__CustomModsModule::{this.Name.ReplaceWhitespace()}_Config", "{}").ToString();

            return(JsonConvert.DeserializeObject <JObject>(value));
        }