mirror of
https://github.com/lempamo/Project-Unite.git
synced 2025-02-03 13:17:33 +00:00
237 lines
No EOL
7.6 KiB
C#
237 lines
No EOL
7.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using Microsoft.AspNet.Identity;
|
|
using Project_Unite.Models;
|
|
|
|
namespace Project_Unite.Controllers
|
|
{
|
|
[Authorize]
|
|
public class DeveloperController : Controller
|
|
{
|
|
// GET: Developer
|
|
public ActionResult Index()
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
ViewBag.Developer = true;
|
|
return View();
|
|
}
|
|
|
|
public ActionResult ToggleObsolete(string id)
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
|
|
var db = new ApplicationDbContext();
|
|
var release = db.Downloads.FirstOrDefault(x => x.Id == id);
|
|
release.Obsolete = !release.Obsolete;
|
|
db.SaveChanges();
|
|
return RedirectToAction("Releases");
|
|
}
|
|
|
|
public ActionResult MakeUnstable(string id)
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
|
|
var db = new ApplicationDbContext();
|
|
var release = db.Downloads.FirstOrDefault(x => x.Id == id);
|
|
release.IsStable = false;
|
|
db.SaveChanges();
|
|
return RedirectToAction("Releases");
|
|
}
|
|
|
|
|
|
public ActionResult MakeStable(string id)
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
|
|
var db = new ApplicationDbContext();
|
|
var release = db.Downloads.FirstOrDefault(x => x.Id == id);
|
|
release.IsStable = true;
|
|
db.SaveChanges();
|
|
return RedirectToAction("Releases");
|
|
}
|
|
|
|
|
|
public ActionResult Releases()
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
var db = new ApplicationDbContext();
|
|
return View(db.Downloads);
|
|
}
|
|
|
|
public ActionResult AddRelease()
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
if (!ACL.Granted(User.Identity.Name, "CanReleaseBuild"))
|
|
return new HttpStatusCodeResult(403);
|
|
ViewBag.Developer = true;
|
|
|
|
var build = new PostDownloadViewModel();
|
|
return View(build);
|
|
}
|
|
|
|
const string ApprovedIdChars = ".-_abcdefghijklmnopqrstuvwxyz1234567890";
|
|
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken]
|
|
public ActionResult AddRelease(PostDownloadViewModel model)
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
if (!ACL.Granted(User.Identity.Name, "CanReleaseBuild"))
|
|
return new HttpStatusCodeResult(403);
|
|
if (!ModelState.IsValid)
|
|
return View(model);
|
|
|
|
//Create a new database context.
|
|
var db = new ApplicationDbContext();
|
|
|
|
//Create a new "Download" data object
|
|
var download = new Download();
|
|
//Set the ID.
|
|
string new_id = model.Name.ToLower();
|
|
|
|
foreach(var c in new_id.ToCharArray())
|
|
{
|
|
if (!ApprovedIdChars.Contains(c) || c == '.')
|
|
new_id = new_id.Replace(c, '_');
|
|
}
|
|
new_id += "_" + db.Downloads.Count().ToString();
|
|
download.Id = new_id;
|
|
//Set the name.
|
|
download.Name = model.Name;
|
|
//Set the author
|
|
download.ReleasedBy = User.Identity.GetUserId();
|
|
//Set the time
|
|
download.PostDate = DateTime.Now;
|
|
|
|
//Can't forget the changelog. Literally, I almost forgot.
|
|
download.Changelog = model.Changelog;
|
|
|
|
//Set the YT ID
|
|
download.DevUpdateId = model.DevUpdateId;
|
|
|
|
//Set whether the build is stable
|
|
download.IsStable = model.IsStable;
|
|
|
|
//We're not obsolete.
|
|
download.Obsolete = false;
|
|
|
|
//Now we upload the download.
|
|
|
|
string download_dir = "~/Uploads/Releases/";
|
|
string mapped_dir = Server.MapPath(download_dir);
|
|
if (!Directory.Exists(mapped_dir))
|
|
Directory.CreateDirectory(mapped_dir);
|
|
|
|
string file_name_d = model.Download.FileName.ToLower();
|
|
foreach(var c in file_name_d.ToCharArray())
|
|
{
|
|
if (!ApprovedIdChars.Contains(c))
|
|
file_name_d = file_name_d.Replace(c, '_');
|
|
}
|
|
download_dir += file_name_d;
|
|
mapped_dir = Server.MapPath(download_dir);
|
|
download.DownloadUrl = download_dir.Remove(0, 1);
|
|
//Now the download is saved in the DB. Let's get it on the server.
|
|
model.Download.SaveAs(mapped_dir);
|
|
|
|
if (model.Screenshot != null)
|
|
{
|
|
download_dir = "~/Uploads/Releases/Screenshots/";
|
|
mapped_dir = Server.MapPath(download_dir);
|
|
if (!Directory.Exists(mapped_dir))
|
|
Directory.CreateDirectory(mapped_dir);
|
|
|
|
file_name_d = model.Screenshot.FileName.ToLower(); ;
|
|
foreach (var c in file_name_d.ToCharArray())
|
|
{
|
|
if (!ApprovedIdChars.Contains(c))
|
|
file_name_d = file_name_d.Replace(c, '_');
|
|
}
|
|
download_dir += file_name_d;
|
|
mapped_dir = Server.MapPath(download_dir);
|
|
download.ScreenshotUrl = download_dir.Remove(0, 1);
|
|
model.Screenshot.SaveAs(mapped_dir);
|
|
}
|
|
|
|
//Now we just save to the database...
|
|
db.Downloads.Add(download);
|
|
db.SaveChanges();
|
|
|
|
return RedirectToAction("Releases");
|
|
}
|
|
|
|
[Authorize]
|
|
public ActionResult Wiki()
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
ViewBag.Developer = true;
|
|
var db = new ApplicationDbContext();
|
|
var cats = db.WikiCategories;
|
|
return View(cats);
|
|
}
|
|
|
|
public ActionResult AddWikiCategory()
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
|
|
ViewBag.Developer = true;
|
|
|
|
var mdl = new AddWikiCategoryViewModel();
|
|
return View(mdl);
|
|
|
|
}
|
|
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken]
|
|
public ActionResult AddWikiCategory(AddWikiCategoryViewModel model)
|
|
{
|
|
if (!ACL.Granted(User.Identity.Name, "CanAccessDevCP"))
|
|
return new HttpStatusCodeResult(403);
|
|
ViewBag.Developer = true;
|
|
if (!ModelState.IsValid)
|
|
return View(model);
|
|
|
|
var db = new ApplicationDbContext();
|
|
var cat = new WikiCategory();
|
|
|
|
var new_id = model.Name.ToLower();
|
|
|
|
foreach(var c in new_id.ToArray())
|
|
{
|
|
if(c == '.' || !ApprovedIdChars.Contains(c))
|
|
{
|
|
new_id = new_id.Replace(c, '_');
|
|
}
|
|
}
|
|
|
|
cat.Id = new_id;
|
|
cat.Name = model.Name;
|
|
|
|
cat.Parent = model.ParentId;
|
|
|
|
db.WikiCategories.Add(cat);
|
|
db.SaveChanges();
|
|
|
|
return RedirectToAction("Wiki");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
} |