private async Task <bool> RegisterUser(ApplicationUser User, AdminRegistrationBase AdminBase) { if (AdminBase.Role != Roles.AppAdmin) { var Invite = await db.Invites.Include("Organization").SingleOrDefaultAsync(x => x.Password == AdminBase.ConfirmationCode); if (Invite == null) { throw "Unable to retrieve the information of the specified invite. Please try again.".asException(); } if (Invite.Organization == null) { throw "Unable to retrieve the information of the specified organization. Please try again.".asException(); } db.Administrators.Add(new Administrator { User = User, Organization = Invite.Organization, Role = AdminBase.Role }); db.Invites.Remove(Invite); } return(true); }
public async Task <ActionResult> Init([Bind(Include = "StepCode, ResendActivity, Email")] GetEmailConfirmViewModel GetEmail) { try { if (ModelState.IsValid) { var Step = await db.InitStep.FindAsync(GetEmail.StepCode); if (Step != null) { var ConfirmationCode = Extensions.GetUniqueKey(7, Numeric: true); if (GetEmail.ResendActivity) { var AdminBase = await db.AdminBase.FindAsync(GetEmail.StepCode); AdminBase.Email = GetEmail.Email; AdminBase.ConfirmationCode = ConfirmationCode; db.Entry(AdminBase).State = EntityState.Modified; TempData.SetSuccess("New confirmation code has been sent."); } else { Step.Auth++; var AdminBase = new AdminRegistrationBase() { Email = GetEmail.Email, ConfirmationCode = ConfirmationCode, ResendActivity = true, Step = Step, Role = Roles.AppAdmin }; db.Entry(AdminBase.Step).State = EntityState.Modified; db.AdminBase.Add(AdminBase); } await db.SaveChangesAsync(); BackgroundJob.Enqueue(() => PostalMail.SendAdminConfrimationCode(GetEmail.Email, ConfirmationCode)); return(RedirectToAction("Init")); } else { throw "Step Initialization failed in sequence. Contact your vendor for more information.".asException(); } } else { throw "Submitted form is not valid. Please try again.".asException(); } } catch (Exception ex) { TempData.SetError(ex.Message); } SetInfo(); return(View(new InitViewModel() { GetEmail = GetEmail, })); }
public async Task <ActionResult> Verify(string id) { try { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var Invite = await db.Invites.SingleOrDefaultAsync(x => x.Password == id); if (Invite == null) { return(HttpNotFound()); } var InitStep = await db.InitStep.FindAsync(id); if (InitStep == null) { InitStep = new IntilizationStep { Auth = 3, Code = id, Mode = Invite.Username, }; var AdminBase = new AdminRegistrationBase() { Email = Invite.Email, ConfirmationCode = id, ResendActivity = true, StepCode = InitStep.Code, Step = InitStep, Role = Invite.Role }; using (var Transaction = db.Database.BeginTransaction(IsolationLevel.ReadCommitted)) { try { db.InitStep.Add(InitStep); db.AdminBase.Add(AdminBase); await db.SaveChangesAsync(); Transaction.Commit(); } catch (Exception) { Transaction.Rollback(); throw; } } } HttpContext.SetSecuredSessionCookie(AppSettings.GetValue("_SessionName"), InitStep.Code); return(RedirectToAction("Init", "App")); } catch (Exception) { throw; } }