Advertisement
Guest User

Untitled

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