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)); }
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)); }
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)); }
/// <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); }
// 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)); }
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); }