using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Threading.Tasks; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Weee.Areas.Admin.ViewModels; using Weee.DAL; using Weee.Models; using Resources; using System.Net; using CScommon; using Weee.Service; using Weee.ViewModels; namespace Weee.Areas.Admin.Controllers { public class AccountController : AdminControllerBase { private readonly UserManager usermanager; private readonly UserStore userstore; protected WeeeSiteInfoService _siteInfoService; public AccountController(WeeeDataContext db, UserManager u, UserStore c, WeeeSiteInfoService siteInfoService) : base(db) { usermanager = u; userstore = c; _siteInfoService = siteInfoService; } public ActionResult Index() { return View(db.Users.Where(x => x.IsSystemAdmin).ToList()); } public ActionResult UpdateProfile() { var id = User.Identity.GetUserId(); var viewModel = db.Users .Where(x => x.Id == id) .Select(x => new AccountUpdateProfileViewModel() { Id = x.Id, AccountName = x.UserName, Name = x.Name, Email = x.Email }) .Single(); return View(viewModel); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult UpdateProfile(AccountUpdateProfileViewModel viewModel) { if (User.Identity.GetUserId() != viewModel.Id) { ViewBag.ErrorMsg = Resource.AccountIsNotValid; return View(viewModel); } var user = db.Users.Find(viewModel.Id); user.Name = viewModel.Name; user.Email = viewModel.Email; db.SaveChanges(); ViewBag.SuccessMsg = Resource.SuccessUpdateProfile; return View(viewModel); } public ActionResult ChangePassword() { var id = User.Identity.GetUserId(); var viewModel = db.Users .Where(x => x.Id == id) .Select(x => new AccountChangePasswordViewModel() { Id = x.Id }) .Single(); return View(viewModel); } [HttpPost] [ValidateAntiForgeryToken] public async Task ChangePassword(AccountChangePasswordViewModel viewModel) { var manager = DependencyResolver.Current.GetService>(); var user = manager.Find(User.Identity.GetUserName(), viewModel.OriginalPassword ?? ""); if (user == null) { ViewBag.ErrorMsg = Resource.InvalidPasswordMsg; return View(); } if (!ModelState.IsValid || User.Identity.GetUserId() != viewModel.Id) { ViewBag.ErrorMsg = Resource.PwValidationConfirmationMsg; return View(); } //var passwordValidator = new PasswordValidator //{ // RequiredLength = 6, // RequireNonLetterOrDigit = false, // RequireDigit = true, // RequireLowercase = true, // RequireUppercase = false, //}; //var result = await passwordValidator.ValidateAsync(viewModel.NewPassword); //if (!result.Succeeded) //{ // ViewBag.ErrorMsg = Resource.PasswordRule; // return View(); //} string ck = PassWordUtl.PasswordCheck(viewModel.NewPassword); if (!string.IsNullOrWhiteSpace(ck)) { ViewBag.ErrorMsg = ck; return View(new AccountChangePasswordViewModel()); } var userId = usermanager.Find(User.Identity.GetUserName(), viewModel.OriginalPassword); var hashed = usermanager.PasswordHasher.HashPassword(viewModel.NewPassword); userstore.SetPasswordHashAsync(userId, hashed).Wait(); userstore.UpdateAsync(userId).Wait(); ViewBag.SuccessMsg = Resource.SuccessUpdatePassword; return View(viewModel); } [AllowAnonymous] public ActionResult login() { return RedirectToAction("login", "account", new { area = "" }); } [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult logout() { HttpContext.GetOwinContext().Authentication.SignOut(); return RedirectToAction("index", "Home", new { area = "" }); } public ActionResult WebSiteInfoSet() { var re = new AccountWebSiteInfoSetViewModel(); var siteInfo = _siteInfoService.GetWebSiteInfo(); if (siteInfo != null) re = JsonUtl.jsonCopy(siteInfo); return View(re); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult WebSiteInfoSet(AccountWebSiteInfoSetViewModel viewModel) { var id = User.Identity.GetUserId(); if(!_siteInfoService.IsSysAdmin(id)) { ViewBag.ErrorMsg = Resource.AccountIsNotValid; return View(viewModel); } try { string errMsg = ""; var it = JsonUtl.jsonCopy(viewModel); var result = _siteInfoService.SaveWebSiteInfo(it, out errMsg); if (string.IsNullOrWhiteSpace(errMsg)) { if (result != null) { viewModel.ID = result.ID; viewModel.loginImagePath = result.loginImagePath; } TempData["SuccessMsg"] = Resource.SaveSuccess; } else TempData["ErrorMsg"] = errMsg; } catch(Exception ex) { TempData["ErrorMsg"] = ex.Message; } return View(viewModel); } public ActionResult UploadImg() { if (Request == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); HttpPostedFileBase file = Request.Files["UploadedFile"]; try { var id = User.Identity.GetUserId(); if (!_siteInfoService.IsSysAdmin(id)) { TempData["ErrorMsg"] = "只有SystemAdmin可以修改底圖"; return RedirectToAction("WebSiteInfoSet"); } var list = db.UserAccountType.Where(x => x.UserId == id).ToList(); if (list == null || list.Count == 0) { TempData["ErrorMsg"] = "請先儲存再上傳圖檔"; return RedirectToAction("WebSiteInfoSet"); } if (file == null || file.ContentLength == 0) { TempData["ErrorMsg"] = "未選擇檔案"; return RedirectToAction("WebSiteInfoSet"); } string newFileName = ProgramConstants.WebSiteBackgroundImgNm + "."; string fileFolder = ProgramConstants.WebSiteInfoPath; if (!imgFileCk(file)) { TempData["ErrorMsg"] = "上傳圖片檔案格式錯誤"; return RedirectToAction("WebSiteInfoSet"); } string extesion = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1); newFileName += extesion; var storage = System.Web.Http.GlobalConfiguration.Configuration.DependencyResolver.GetService(typeof(Storage.AzureStorage)) as Storage.AzureStorage; var uri = storage.SaveToAzure(file.InputStream, file.FileName, baseUrl, fileFolder, false , newFileName); var it = list.FirstOrDefault(); it.loginImagePath = newFileName; db.SaveChanges(); TempData["SuccessMsg"] = "上傳圖片成功"; return RedirectToAction("WebSiteInfoSet"); } catch (Exception ex) { TempData["ErrorMsg"] = ex.Message; return RedirectToAction("WebSiteInfoSet"); } } public ActionResult DelSiteImg() { var id = User.Identity.GetUserId(); if (!_siteInfoService.IsSysAdmin(id)) { TempData["ErrorMsg"] = "只有SystemAdmin可以刪除底圖"; return RedirectToAction("WebSiteInfoSet"); } _siteInfoService.DelSiteImg(); TempData["SuccessMsg"] = "成功刪除圖片"; return RedirectToAction("WebSiteInfoSet"); } private bool imgFileCk(HttpPostedFileBase file) { var formats = new List() {"jpg", "png", "svg", "gif"}; if (file != null && file.ContentLength > 0) { string extesion = file.FileName.Substring(file.FileName.LastIndexOf(".") + 1); if (!string.IsNullOrWhiteSpace(extesion) && formats.Any(x => x == extesion.ToLower())) return true; else return false; } return false; } } }