using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Teknik.Areas.Admin.ViewModels; using Teknik.Areas.Users.Models; using Teknik.Areas.Users.Utility; using Teknik.Attributes; using Teknik.Controllers; using Teknik.Filters; using Teknik.Models; using Teknik.Utilities; using Teknik.ViewModels; namespace Teknik.Areas.Admin.Controllers { [TeknikAuthorize(Roles = "Admin")] public class AdminController : DefaultController { private TeknikEntities db = new TeknikEntities(); [HttpGet] [TrackPageView] public ActionResult Dashboard() { DashboardViewModel model = new DashboardViewModel(); return View(model); } [HttpGet] [TrackPageView] public ActionResult UserSearch() { UserSearchViewModel model = new UserSearchViewModel(); return View(model); } [HttpGet] [TrackPageView] public ActionResult UserInfo(string username) { if (UserHelper.UserExists(db, username)) { User user = UserHelper.GetUser(db, username); UserInfoViewModel model = new UserInfoViewModel(); model.Username = user.Username; model.AccountType = user.AccountType; model.AccountStatus = user.AccountStatus; return View(model); } return Redirect(Url.SubRouteUrl("error", "Error.Http404")); } [HttpGet] public ActionResult UploadSearch() { UploadSearchViewModel model = new UploadSearchViewModel(); return View(model); } [HttpPost] public ActionResult GetUserSearchResults(string query) { List models = new List(); var results = db.Users.Where(u => u.Username.Contains(query)).ToList(); if (results != null) { foreach (User user in results) { try { UserResultViewModel model = new UserResultViewModel(); model.Username = user.Username; if (Config.EmailConfig.Enabled) { model.Email = string.Format("{0}@{1}", user.Username, Config.EmailConfig.Domain); } model.JoinDate = user.JoinDate; model.LastSeen = UserHelper.GetLastAccountActivity(db, Config, user); models.Add(model); } catch (Exception ex) { // Skip this result } } } return Json(new { result = new { html = PartialView("~/Areas/Admin/Views/Admin/UserResults.cshtml", models).RenderToString() } }); } [HttpPost] public ActionResult GetUploadSearchResults(string url) { Upload.Models.Upload foundUpload = db.Uploads.Where(u => u.Url == url).FirstOrDefault(); if (foundUpload != null) { UploadResultViewModel model = new UploadResultViewModel(); model.Url = foundUpload.Url; model.ContentType = foundUpload.ContentType; model.ContentLength = foundUpload.ContentLength; model.DateUploaded = foundUpload.DateUploaded; model.Downloads = foundUpload.Downloads; model.DeleteKey = foundUpload.DeleteKey; return Json(new { result = new { html = PartialView("~/Areas/Admin/Views/Admin/UploadResult.cshtml", model).RenderToString() } }); } return Json(new { error = new { message = "Upload does not exist" } }); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult EditUserAccountType(string username, AccountType accountType) { if (UserHelper.UserExists(db, username)) { // Edit the user's account type UserHelper.EditAccountType(db, Config, username, accountType); return Json(new { result = new { success = true } }); } return Redirect(Url.SubRouteUrl("error", "Error.Http404")); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult EditUserAccountStatus(string username, AccountStatus accountStatus) { if (UserHelper.UserExists(db, username)) { // Edit the user's account type UserHelper.EditAccountStatus(db, Config, username, accountStatus); return Json(new { result = new { success = true } }); } return Redirect(Url.SubRouteUrl("error", "Error.Http404")); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult CreateInviteCode(string username) { if (UserHelper.UserExists(db, username)) { User user = UserHelper.GetUser(db, username); InviteCode inviteCode = db.InviteCodes.Create(); inviteCode.Active = true; inviteCode.Code = Guid.NewGuid().ToString(); inviteCode.Owner = user; db.InviteCodes.Add(inviteCode); db.SaveChanges(); return Json(new { result = new { code = inviteCode.Code } }); } return Redirect(Url.SubRouteUrl("error", "Error.Http404")); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult DeleteAccount(string username) { try { using (TeknikEntities db = new TeknikEntities()) { User user = UserHelper.GetUser(db, username); if (user != null) { UserHelper.DeleteAccount(db, Config, user); return Json(new { result = true }); } } } catch (Exception ex) { return Json(new { error = ex.GetFullMessage(true) }); } return Json(new { error = "Unable to delete user" }); } } }