Advertisement
Guest User

Untitled

a guest
Apr 20th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.93 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using Microsoft.AspNet.Identity;
  7. using Microsoft.AspNet.Identity.Owin;
  8. using Microsoft.Owin.Security;
  9. using Daily_Planner.Models;
  10. using System.IO;
  11. using System.Web.Hosting;
  12.  
  13. namespace Daily_Planner.Controllers
  14. {
  15. [Authorize]
  16. public class ManageController : Controller
  17. {
  18. private ApplicationSignInManager _signInManager;
  19. private ApplicationUserManager _userManager;
  20.  
  21. public ManageController()
  22. {
  23. }
  24.  
  25. public ManageController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
  26. {
  27. UserManager = userManager;
  28. SignInManager = signInManager;
  29. }
  30.  
  31. public ApplicationSignInManager SignInManager
  32. {
  33. get
  34. {
  35. return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
  36. }
  37. private set
  38. {
  39. _signInManager = value;
  40. }
  41. }
  42.  
  43. public ApplicationUserManager UserManager
  44. {
  45. get
  46. {
  47. return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
  48. }
  49. private set
  50. {
  51. _userManager = value;
  52. }
  53. }
  54.  
  55. //
  56. // GET: /Manage/Index
  57. public async Task<ActionResult> Index(ManageMessageId? message)
  58. {
  59. ViewBag.StatusMessage =
  60. message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed."
  61. : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set."
  62. : message == ManageMessageId.SetTwoFactorSuccess ? "Your two-factor authentication provider has been set."
  63. : message == ManageMessageId.Error ? "An error has occurred."
  64. : message == ManageMessageId.AddPhoneSuccess ? "Your phone number was added."
  65. : message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed."
  66. : message == ManageMessageId.PhotoUploadSuccess ? "Your photo has been uploaded."
  67. : message == ManageMessageId.FileExtensionError ? "Only jpg, png and gif file formats are allowed."
  68. : "";
  69.  
  70. var userId = User.Identity.GetUserId();
  71. var model = new IndexViewModel
  72. {
  73. HasPassword = HasPassword(),
  74. PhoneNumber = await UserManager.GetPhoneNumberAsync(userId),
  75. TwoFactor = await UserManager.GetTwoFactorEnabledAsync(userId),
  76. Logins = await UserManager.GetLoginsAsync(userId),
  77. BrowserRemembered = await AuthenticationManager.TwoFactorBrowserRememberedAsync(userId)
  78. };
  79. return View(model);
  80. }
  81.  
  82. //
  83. // POST: /Manage/RemoveLogin
  84. [HttpPost]
  85. [ValidateAntiForgeryToken]
  86. public async Task<ActionResult> RemoveLogin(string loginProvider, string providerKey)
  87. {
  88. ManageMessageId? message;
  89. var result = await UserManager.RemoveLoginAsync(User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
  90. if (result.Succeeded)
  91. {
  92. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  93. if (user != null)
  94. {
  95. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  96. }
  97. message = ManageMessageId.RemoveLoginSuccess;
  98. }
  99. else
  100. {
  101. message = ManageMessageId.Error;
  102. }
  103. return RedirectToAction("ManageLogins", new { Message = message });
  104. }
  105.  
  106. //
  107. // GET: /Manage/AddPhoneNumber
  108. public ActionResult AddPhoneNumber()
  109. {
  110. return View();
  111. }
  112.  
  113. //
  114. // POST: /Manage/AddPhoneNumber
  115. [HttpPost]
  116. [ValidateAntiForgeryToken]
  117. public async Task<ActionResult> AddPhoneNumber(AddPhoneNumberViewModel model)
  118. {
  119. if (!ModelState.IsValid)
  120. {
  121. return View(model);
  122. }
  123. // Generate the token and send it
  124. var code = await UserManager.GenerateChangePhoneNumberTokenAsync(User.Identity.GetUserId(), model.Number);
  125. if (UserManager.SmsService != null)
  126. {
  127. var message = new IdentityMessage
  128. {
  129. Destination = model.Number,
  130. Body = "Your security code is: " + code
  131. };
  132. await UserManager.SmsService.SendAsync(message);
  133. }
  134. return RedirectToAction("VerifyPhoneNumber", new { PhoneNumber = model.Number });
  135. }
  136.  
  137. //
  138. // POST: /Manage/EnableTwoFactorAuthentication
  139. [HttpPost]
  140. [ValidateAntiForgeryToken]
  141. public async Task<ActionResult> EnableTwoFactorAuthentication()
  142. {
  143. await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), true);
  144. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  145. if (user != null)
  146. {
  147. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  148. }
  149. return RedirectToAction("Index", "Manage");
  150. }
  151.  
  152. //
  153. // POST: /Manage/DisableTwoFactorAuthentication
  154. [HttpPost]
  155. [ValidateAntiForgeryToken]
  156. public async Task<ActionResult> DisableTwoFactorAuthentication()
  157. {
  158. await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), false);
  159. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  160. if (user != null)
  161. {
  162. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  163. }
  164. return RedirectToAction("Index", "Manage");
  165. }
  166.  
  167. //
  168. // GET: /Manage/VerifyPhoneNumber
  169. public async Task<ActionResult> VerifyPhoneNumber(string phoneNumber)
  170. {
  171. var code = await UserManager.GenerateChangePhoneNumberTokenAsync(User.Identity.GetUserId(), phoneNumber);
  172. // Send an SMS through the SMS provider to verify the phone number
  173. return phoneNumber == null ? View("Error") : View(new VerifyPhoneNumberViewModel { PhoneNumber = phoneNumber });
  174. }
  175.  
  176. //
  177. // POST: /Manage/VerifyPhoneNumber
  178. [HttpPost]
  179. [ValidateAntiForgeryToken]
  180. public async Task<ActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)
  181. {
  182. if (!ModelState.IsValid)
  183. {
  184. return View(model);
  185. }
  186. var result = await UserManager.ChangePhoneNumberAsync(User.Identity.GetUserId(), model.PhoneNumber, model.Code);
  187. if (result.Succeeded)
  188. {
  189. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  190. if (user != null)
  191. {
  192. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  193. }
  194. return RedirectToAction("Index", new { Message = ManageMessageId.AddPhoneSuccess });
  195. }
  196. // If we got this far, something failed, redisplay form
  197. ModelState.AddModelError("", "Failed to verify phone");
  198. return View(model);
  199. }
  200.  
  201. //
  202. // GET: /Manage/RemovePhoneNumber
  203. public async Task<ActionResult> RemovePhoneNumber()
  204. {
  205. var result = await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), null);
  206. if (!result.Succeeded)
  207. {
  208. return RedirectToAction("Index", new { Message = ManageMessageId.Error });
  209. }
  210. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  211. if (user != null)
  212. {
  213. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  214. }
  215. return RedirectToAction("Index", new { Message = ManageMessageId.RemovePhoneSuccess });
  216. }
  217.  
  218. //
  219. // GET: /Manage/ChangePassword
  220. public ActionResult ChangePassword()
  221. {
  222. return View();
  223. }
  224.  
  225. //
  226. // POST: /Manage/ChangePassword
  227. [HttpPost]
  228. [ValidateAntiForgeryToken]
  229. public async Task<ActionResult> ChangePassword(ChangePasswordViewModel model)
  230. {
  231. if (!ModelState.IsValid)
  232. {
  233. return View(model);
  234. }
  235. var result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
  236. if (result.Succeeded)
  237. {
  238. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  239. if (user != null)
  240. {
  241. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  242. }
  243. return RedirectToAction("Index", new { Message = ManageMessageId.ChangePasswordSuccess });
  244. }
  245. AddErrors(result);
  246. return View(model);
  247. }
  248.  
  249. //
  250. // GET: /Manage/SetPassword
  251. public ActionResult SetPassword()
  252. {
  253. return View();
  254. }
  255.  
  256. //
  257. // POST: /Manage/SetPassword
  258. [HttpPost]
  259. [ValidateAntiForgeryToken]
  260. public async Task<ActionResult> SetPassword(SetPasswordViewModel model)
  261. {
  262. if (ModelState.IsValid)
  263. {
  264. var result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);
  265. if (result.Succeeded)
  266. {
  267. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  268. if (user != null)
  269. {
  270. await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
  271. }
  272. return RedirectToAction("Index", new { Message = ManageMessageId.SetPasswordSuccess });
  273. }
  274. AddErrors(result);
  275. }
  276.  
  277. // If we got this far, something failed, redisplay form
  278. return View(model);
  279. }
  280.  
  281. //
  282. // GET: /Manage/ManageLogins
  283. public async Task<ActionResult> ManageLogins(ManageMessageId? message)
  284. {
  285. ViewBag.StatusMessage =
  286. message == ManageMessageId.RemoveLoginSuccess ? "The external login was removed."
  287. : message == ManageMessageId.Error ? "An error has occurred."
  288. : "";
  289. var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
  290. if (user == null)
  291. {
  292. return View("Error");
  293. }
  294. var userLogins = await UserManager.GetLoginsAsync(User.Identity.GetUserId());
  295. var otherLogins = AuthenticationManager.GetExternalAuthenticationTypes().Where(auth => userLogins.All(ul => auth.AuthenticationType != ul.LoginProvider)).ToList();
  296. ViewBag.ShowRemoveButton = user.PasswordHash != null || userLogins.Count > 1;
  297. return View(new ManageLoginsViewModel
  298. {
  299. CurrentLogins = userLogins,
  300. OtherLogins = otherLogins
  301. });
  302. }
  303.  
  304. //
  305. // POST: /Manage/LinkLogin
  306. [HttpPost]
  307. [ValidateAntiForgeryToken]
  308. public ActionResult LinkLogin(string provider)
  309. {
  310. // Request a redirect to the external login provider to link a login for the current user
  311. return new AccountController.ChallengeResult(provider, Url.Action("LinkLoginCallback", "Manage"), User.Identity.GetUserId());
  312. }
  313.  
  314. //
  315. // GET: /Manage/LinkLoginCallback
  316. public async Task<ActionResult> LinkLoginCallback()
  317. {
  318. var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(XsrfKey, User.Identity.GetUserId());
  319. if (loginInfo == null)
  320. {
  321. return RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error });
  322. }
  323. var result = await UserManager.AddLoginAsync(User.Identity.GetUserId(), loginInfo.Login);
  324. return result.Succeeded ? RedirectToAction("ManageLogins") : RedirectToAction("ManageLogins", new { Message = ManageMessageId.Error });
  325. }
  326.  
  327.  
  328. [HttpPost]
  329.  
  330. public async Task<ActionResult> UpLoadPhoto(HttpPostedFileBase file)
  331. {
  332. if(file != null && file.ContentLength > 0)
  333. {
  334. var user = await GetCurrentUserAsync();
  335. var username = user.UserName;
  336. var fileExt = Path.GetExtension(file.FileName);
  337. var fnm = username + ".png";
  338. if (fileExt.ToLower().EndsWith(".png") || fileExt.ToLower().EndsWith(".jpg") || fileExt.ToLower().EndsWith(".gif"))
  339. {
  340. var filePath = HostingEnvironment.MapPath("~/Content/images/profile/") + fnm;
  341. var directory = new DirectoryInfo(HostingEnvironment.MapPath("~/Content/images/profile/"));
  342. if (directory.Exists == false)
  343. {
  344. directory.Create();
  345. }
  346. ViewBag.FilePath = filePath.ToString();
  347. file.SaveAs(filePath);
  348. return RedirectToAction("index", "Home", new { Message = ManageMessageId.PhotoUploadSuccess });
  349. }
  350. else
  351. {
  352. return RedirectToAction("index", "Home", new { Message = ManageMessageId.FileExtensionError });
  353. }
  354. }
  355. return RedirectToAction("index", "Home", new { Message = ManageMessageId.Error });
  356. }
  357. protected override void Dispose(bool disposing)
  358. {
  359. if (disposing && _userManager != null)
  360. {
  361. _userManager.Dispose();
  362. _userManager = null;
  363. }
  364.  
  365. base.Dispose(disposing);
  366. }
  367.  
  368. #region Helpers
  369. // Used for XSRF protection when adding external logins
  370. private const string XsrfKey = "XsrfId";
  371.  
  372. private IAuthenticationManager AuthenticationManager
  373. {
  374. get
  375. {
  376. return HttpContext.GetOwinContext().Authentication;
  377. }
  378. }
  379.  
  380. private void AddErrors(IdentityResult result)
  381. {
  382. foreach (var error in result.Errors)
  383. {
  384. ModelState.AddModelError("", error);
  385. }
  386. }
  387.  
  388. private bool HasPassword()
  389. {
  390. var user = UserManager.FindById(User.Identity.GetUserId());
  391. if (user != null)
  392. {
  393. return user.PasswordHash != null;
  394. }
  395. return false;
  396. }
  397.  
  398. private bool HasPhoneNumber()
  399. {
  400. var user = UserManager.FindById(User.Identity.GetUserId());
  401. if (user != null)
  402. {
  403. return user.PhoneNumber != null;
  404. }
  405. return false;
  406. }
  407.  
  408. private async Task <ApplicationUser> GetCurrentUserAsync()
  409. {
  410. return await UserManager.FindByIdAsync(User.Identity.GetUserId());
  411. }
  412.  
  413. public enum ManageMessageId
  414. {
  415. AddPhoneSuccess,
  416. ChangePasswordSuccess,
  417. SetTwoFactorSuccess,
  418. SetPasswordSuccess,
  419. RemoveLoginSuccess,
  420. RemovePhoneSuccess,
  421. Error,
  422. PhotoUploadSuccess,
  423. FileExtensionError
  424. }
  425.  
  426. #endregion
  427. }
  428. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement