using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.IO; using System.Web.Security; using System.Text.RegularExpressions; namespace Yavsc.Controllers { /// /// File system controller. /// public class FileSystemController : Controller { private static string usersDir = "~/users"; /// /// Gets the users dir. /// /// The users dir. public static string UsersDir { get { return usersDir; } } /// /// Index this instance. /// [Authorize] public ActionResult Index () { string user = Membership.GetUser ().UserName; ViewData ["UserName"] = user; DirectoryInfo di = new DirectoryInfo ( Path.Combine ( Server.MapPath (UsersDir), user)); if (!di.Exists) di.Create (); return View (new FileInfoCollection (di.GetFiles ())); } /// /// Details the specified id. /// /// Identifier. public ActionResult Details (string id) { foreach (char x in Path.GetInvalidPathChars()) { if (id.Contains (x)) { ViewData ["Message"] = string.Format ( "Something went wrong following the following path : {0} (\"{1}\")", id, x); return RedirectToAction ("Index"); } } string fpath = Path.Combine (BaseDir, id); ViewData ["Content"] = Url.Content (fpath); FileInfo fi = new FileInfo (fpath); return View (fi); } /// /// Create this instance. /// public ActionResult Create () { return View (); } /// /// Create the specified collection. /// /// Collection. [HttpPost] [Authorize] public ActionResult Create (FormCollection collection) { try { string fnre = "[A-Za-z0-9~\\-.]+"; HttpFileCollectionBase hfc = Request.Files; for (int i = 0; i < hfc.Count; i++) { if (!Regex.Match (hfc [i].FileName, fnre).Success) { ViewData ["Message"] += string.Format ("

File name '{0}' refused

", hfc [i].FileName); ModelState.AddModelError ( "AFile", string.Format ( "The file name {0} dosn't match an acceptable file name {1}", hfc [i].FileName, fnre)); return View (); } } for (int i = 0; i < hfc.Count; i++) { // TODO Limit with hfc[h].ContentLength string filename = Path.Combine (Server.MapPath (BaseDir), hfc [i].FileName); hfc [i].SaveAs (filename); ViewData ["Message"] += string.Format ("

File name '{0}' saved

", hfc [i].FileName); } return RedirectToAction ("Index", "FileSystem"); } catch (Exception e) { ViewData ["Message"] = "Exception:" + e.Message; return View (); } } /// /// Gets the base dir. /// /// The base dir. public static string BaseDir { get { return Path.Combine (UsersDir, Membership.GetUser ().UserName); } } /// /// Edit the specified id. /// /// Identifier. public ActionResult Edit (int id) { return View (); } /// /// Edit the specified id and collection. /// /// Identifier. /// Collection. [HttpPost] public ActionResult Edit (int id, FormCollection collection) { try { return RedirectToAction ("Index"); } catch { return View (); } } /// /// Delete the specified id. /// /// Identifier. public ActionResult Delete (int id) { return View (); } /// /// Delete the specified id and collection. /// /// Identifier. /// Collection. [HttpPost] public ActionResult Delete (int id, FormCollection collection) { try { return RedirectToAction ("Index"); } catch { return View (); } } } }