Beispiel #1
0
        public ActionResult JsonAsync(string link)
        {
            var mission = db.Missions.Where(m => m.MissionLink.Equals(link)).FirstOrDefault();

            if (!JsonAuthCheck(mission))
            {
                return(HttpNotFound());
            }
            var exportText = MissionExportHelper.GetExportText(mission.Id);
            var fMission   = StarbaseUGC.Foundry.Engine.Serializers.FoundryMissionSerializer.ParseMissionText(exportText);
            var text       = StarbaseUGC.Foundry.Engine.Serializers.FoundryMissionSerializer.ExportMissionToJson(fMission, Newtonsoft.Json.Formatting.None);

            //ok lets get the json
            return(Content(text));
        }
Beispiel #2
0
        public ActionResult Export(string link)
        {
            var mission = db.Missions.Where(m => m.MissionLink.Equals(link)).FirstOrDefault();

            if (!JsonAuthCheck(mission))
            {
                return(RedirectToAction("index", "Home"));
            }

            var fileName = $"{link}.txt";
            var text     = MissionExportHelper.GetExportText(mission.Id);
            var bytes    = System.Text.Encoding.UTF8.GetBytes(text);
            var stream   = new MemoryStream(bytes);

            return(File(stream, "text/plan", fileName));
        }
Beispiel #3
0
        public ActionResult Json(string link)
        {
            var mission = db.Missions.Where(m => m.MissionLink.Equals(link)).FirstOrDefault();

            if (!JsonAuthCheck(mission))
            {
                return(RedirectToAction("Home"));
            }

            var fileName   = $"{link}-json.txt";
            var exportText = MissionExportHelper.GetExportText(mission.Id);
            var fMission   = StarbaseUGC.Foundry.Engine.Serializers.FoundryMissionSerializer.ParseMissionText(exportText);
            var text       = StarbaseUGC.Foundry.Engine.Serializers.FoundryMissionSerializer.ExportMissionToJson(fMission);
            var bytes      = System.Text.Encoding.UTF8.GetBytes(text);
            var stream     = new MemoryStream(bytes);

            return(File(stream, "text/plan", fileName));
        }
Beispiel #4
0
        /// <summary>
        /// Check if this user can download this mission info
        /// </summary>
        /// <param name="mission"></param>
        /// <returns></returns>
        private bool JsonAuthCheck(Mission mission)
        {
            //first does it exist
            if (mission == null)
            {
                return(false);
            }

            //next if it has an export file
            if (!MissionExportHelper.HasExport(mission.Id))
            {
                return(false);
            }

            //next if the user has access to the file (admin or same user) also expose those belonging to Zorbane
            if (User.IsInRole(ConstantsHelper.AdminRole) || User.Identity.Name.Equals(mission.Author.UserName) || mission.Author.UserName.Equals("Zorbane"))
            {
                return(true);
            }
            return(false);
        }
Beispiel #5
0
        // GET: Missions/duritanium-man
        public ActionResult Details(string link)
        {
            if (string.IsNullOrEmpty(link))
            {
                return(RedirectToAction("index", "home"));
            }
            Mission mission = db.Missions.Where(m => m.MissionLink.Equals(link)).FirstOrDefault();

            if (mission == null)
            {
                return(HttpNotFound());
            }

            //if it is in review or unpubilshed only an aadministrator or the author can view it
            if (mission.Status == Models.FoundryMissionModels.Enums.MissionStatus.InReview ||
                mission.Status == Models.FoundryMissionModels.Enums.MissionStatus.Unpublished)
            {
                if ((mission.Author != null && !mission.Author.UserName.Equals(User.Identity.Name)) &&
                    (!User.IsInRole("Administrator")))
                {
                    return(HttpNotFound());
                }
            }

            //if it is removed only an admnistrator can view it
            if (mission.Status == Models.FoundryMissionModels.Enums.MissionStatus.Removed)
            {
                if (!User.IsInRole("Administrator"))
                {
                    return(HttpNotFound());
                }
            }

            ViewMissionViewModel viewMission = new ViewMissionViewModel()
            {
                Id                   = mission.Id,
                Author               = mission.Author,
                AuthorCrypticTag     = mission.AuthorUserId,
                CrypticId            = mission.CrypticId.ToUpper(),
                Name                 = mission.Name,
                Description          = mission.Description,
                Faction              = mission.Faction,
                FactionImageUrl      = MissionHelper.GetBigFactionImageUrl(mission.Faction),
                MinimumLevel         = mission.MinimumLevel,
                MinimumLevelImageUrl = MissionHelper.GetBigLevelImageUrl(mission.MinimumLevel, mission.Faction),
                DateLastUpdated      = mission.DateLastUpdated,
                Length               = mission.Length,
                Tags                 = mission.Tags.OrderBy(t => t.TagName).ToList(),
                Videos               = mission.Videos.OrderBy(v => v.Order).Select(v => v.YoutubeVideoId).ToList(),
                Status               = mission.Status,
                MissionLink          = mission.MissionLink,
                Images               = mission.Images.OrderBy(i => i.Order).Select(i => i.Filename).ToList(),
                HasExport            = MissionExportHelper.HasExport(mission.Id),
            };

            //It's okay to show the mission now

            if (TempData["Message"] != null)
            {
                ViewBag.Message = TempData["Message"];
            }

            return(View(viewMission));
        }
Beispiel #6
0
        private string UploadExportFile(HttpPostedFileBase exportFile)
        {
            //first read the file
            var     b           = new BinaryReader(exportFile.InputStream);
            var     binData     = b.ReadBytes(exportFile.ContentLength);
            var     text        = System.Text.Encoding.UTF8.GetString(binData);
            var     missionlink = "";
            Mission mission     = null;

            //Get the mission object
            try
            {
                mission = MissionExportHelper.ParseExportToMission(db, text);
            }
            catch
            {
                throw new Exception("Error parsing upload file.  Please contact us at [email protected] or @STOMissions on twitter so we can determine what is wrong.");
            }

            //now that we have the mission we need to first check if it exists or not.
            var samemissions = db.Missions.Where(m => m.Name.Equals(mission.Name)).ToList();

            if (samemissions.Count > 0)
            {
                foreach (var samemission in samemissions)
                {
                    //We check with name check.then author check
                    //if the author is null we cannot add it as we can't make sure it is the same
                    if (samemission.Author == null)
                    {
                        throw new Exception("Another mission with the same name and ambiguous author already exists.  Please add your mission manually.  If you believe that mission belongs to you please contact us at [email protected] or @STOMissions on twitter so we can link it to your account.");
                    }

                    //now check author
                    if (mission.AuthorUserId.ToUpper().Equals(samemission.Author.CrypticTag.ToUpper()))
                    {
                        missionlink = samemission.MissionLink;
                        //if it is the same this is the exact same mission now make sure that the person uploading it is the author, or an admit
                        if (User.Identity.Name.Equals(samemission.Author.UserName) || User.IsInRole(ConstantsHelper.AdminRole))
                        {
                            samemission.DateLastUpdated = DateTime.Now;
                            db.SaveChanges();
                            break;
                        }
                        else
                        {
                            //if it is not the same user name they are not allowed to update it.
                            //just go to the mission
                            return(missionlink);
                        }
                    }
                }
            }

            //if mission link is still empty means we haven't found the same mission so lets add it
            if (string.IsNullOrWhiteSpace(missionlink))
            {
                missionlink             = MissionHelper.GetMissionLink(db, mission);
                mission.MissionLink     = missionlink;
                mission.DateLastUpdated = DateTime.Now;
                mission.DateAdded       = DateTime.Now;
                mission.CrypticId       = MissionExportHelper.GenerateRandomID();
                mission.Length          = MissionLength.FifteenToThirtyMinutes;
                mission.Published       = false;
                mission.Spotlit         = false;
                mission.Status          = MissionStatus.Unpublished;
                db.Missions.Add(mission);
                db.SaveChanges();
            }

            //get the mission's id
            var id = db.Missions.Where(m => m.MissionLink.Equals(missionlink)).FirstOrDefault().Id;

            //set the export file
            MissionExportHelper.SaveExportFile(text, id);

            return(missionlink);
        }