public static List <JournalEntry> FindEntry(JournalEntry ent, UserDatabaseConnection cn, JObject entjo = null) // entjo is not changed. { if (entjo == null) { entjo = GetJson(ent.Id, cn.Connection); } entjo = RemoveEDDGeneratedKeys(entjo); List <JournalEntry> entries = new List <JournalEntry>(); using (DbCommand cmd = cn.Connection.CreateCommand("SELECT * FROM JournalEntries WHERE CommanderId = @cmdrid AND EventTime = @time AND TravelLogId = @tluid AND EventTypeId = @evttype ORDER BY Id ASC")) { cmd.AddParameterWithValue("@cmdrid", ent.CommanderId); cmd.AddParameterWithValue("@time", ent.EventTimeUTC); cmd.AddParameterWithValue("@tluid", ent.TLUId); cmd.AddParameterWithValue("@evttype", ent.EventTypeID); using (DbDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { JournalEntry jent = CreateJournalEntry(reader); if (AreSameEntry(ent, jent, cn.Connection, entjo)) { entries.Add(jent); } } } } return(entries); }
public ActionResult Edit(UserDatabaseConnection userDatabaseConnection) { var existingUserDatabaseConnection = db.UserDatabaseConnections .Include(udc => udc.DatabaseConnection) .FirstOrDefault(udc => udc.UserDatabaseConnectionID == userDatabaseConnection.UserDatabaseConnectionID); if (existingUserDatabaseConnection == null) { return(NotFound()); } bool hasAccess = HasAccess(CurrentUser, existingUserDatabaseConnection.DatabaseConnection); if (hasAccess == false) { return(NotFound()); } if (ModelState.IsValid) { existingUserDatabaseConnection.Type = userDatabaseConnection.Type; db.SaveChanges(); return(RedirectToAction("Details", "Home", new { id = existingUserDatabaseConnection.DatabaseConnectionID })); } ViewBag.ApplicationUserID = new SelectList(db.ApplicationUsers, "Id", "Email", existingUserDatabaseConnection.ApplicationUserID); ViewBag.DatabaseConnectionID = new SelectList(db.DatabaseConnections, "DatabaseConnectionID", "Name", existingUserDatabaseConnection.DatabaseConnectionID); return(View(userDatabaseConnection)); }
public ActionResult Create(UserDatabaseConnection userDatabaseConnection) { var id = _userManager.GetUserId(User); // if (ModelState.IsValid) //{ var databaseConnection = db.DatabaseConnections.FirstOrDefault(dc => dc.DatabaseConnectionID == userDatabaseConnection.DatabaseConnectionID); if (databaseConnection == null) { return(NotFound()); } bool hasAccess = HasAccess(CurrentUser, databaseConnection); if (hasAccess == false) { return(NotFound()); } var lowercaseEmail = userDatabaseConnection.InviteEmail.ToLower(); var invitedUser = db.ApplicationUsers.FirstOrDefault(u => u.Email.ToLower() == lowercaseEmail); if (invitedUser != null && db.UserDatabaseConnections.Any(u => u.DatabaseConnectionID == userDatabaseConnection.DatabaseConnectionID && u.ApplicationUserID == invitedUser.Id)) { ModelState.AddModelError("Error", "This User already has an access to this Database Connection"); } else if (invitedUser != null && invitedUser.OrganisationId == userDatabaseConnection.DatabaseConnection.OrganisationId) { ModelState.AddModelError("Error", "This User is already an Organisation Admin for this Database Connection"); } else if (invitedUser != null && db.OrganisationInvites.Any(oi => oi.OrganisationId == userDatabaseConnection.DatabaseConnection.OrganisationId && oi.InviteEmail.ToLower() == lowercaseEmail && oi.AcceptedOn == null && oi.RejectedOn == null)) { ModelState.AddModelError("Error", "This User has already been invited to be an Organisation Admin for this Database Connection"); } else { userDatabaseConnection.CreatedOn = DateTime.Now; userDatabaseConnection.CreatedBy = CurrentUser; if (invitedUser != null) { userDatabaseConnection.ApplicationUser = invitedUser; userDatabaseConnection.InviteEmail = null; } db.UserDatabaseConnections.Add(userDatabaseConnection); db.SaveChanges(); SendDatabaseInviteMail(userDatabaseConnection); return(RedirectToAction("Details", "Home", new { id = userDatabaseConnection.DatabaseConnectionID })); } // } ViewBag.types = new[] { UserDatabaseTypes.Admin, UserDatabaseTypes.ReportBuilder, UserDatabaseTypes.ReportViewer }.Select(e => new { Id = (int)e, Value = e.ToString() }); return(View(userDatabaseConnection)); }
public void SendDatabaseInviteMail(UserDatabaseConnection userLink) { var email = new MimeMessage(); email.From.Add(new MailboxAddress(UTF8Encoding.UTF8, "QueryTree", _config.GetValue <string>("Email:SenderAddress"))); email.To.Add(new MailboxAddress(userLink.InviteEmail ?? userLink.ApplicationUser.Email)); email.Subject = string.Format("You have been invited to use QueryTree by {0}", userLink.CreatedBy.Email); var webRoot = _env.ContentRootPath.TrimEnd('/') + '/'; // load template string text, html; if (userLink.ApplicationUser != null) { text = System.IO.File.ReadAllText(Path.Combine(webRoot, @"EmailTemplates/InviteExistingUser.txt")); html = System.IO.File.ReadAllText(Path.Combine(webRoot, @"EmailTemplates/InviteExistingUser.html")); } else { text = System.IO.File.ReadAllText(Path.Combine(webRoot, @"EmailTemplates/InviteNewUser.txt")); html = System.IO.File.ReadAllText(Path.Combine(webRoot, @"EmailTemplates/InviteNewUser.html")); } // set up replacements var replacements = new Dictionary <string, string> { { "{sender}", userLink.CreatedBy.Email } }; if (userLink.ApplicationUser != null) { replacements.Add("{url}", Url.Action("Details", "Home", new { id = userLink.DatabaseConnectionID }, Request.Scheme)); } else { replacements.Add("{url}", Url.Action("Register", "Account", new { email = userLink.InviteEmail }, Request.Scheme)); } // do replacement foreach (var key in replacements.Keys) { text = text.Replace(key, replacements[key]); html = html.Replace(key, replacements[key]); } email.Body = new TextPart("html") { Text = html }; _emailSender.SendMail(email); }
public ActionResult Invite(PermissionViewModel viewModel) { if (viewModel.DatabasePermissions == null) { viewModel.DatabasePermissions = new List <PermissionViewModel.DatabasePermission>(); } if (CurrentUser == null) { return(NotFound("Could not find user")); } if (string.Compare(CurrentUser.Email, viewModel.Email, true) == 0) { ModelState.AddModelError("invited-self", "You can't invite yourself."); return(View(viewModel)); } if (viewModel.DatabasePermissions == null) { viewModel.DatabasePermissions = new List <PermissionViewModel.DatabasePermission>(); } if (viewModel.IsOrganisationAdmin == false && viewModel.DatabasePermissions.Any(d => d.AccessType != "None") == false) { ModelState.AddModelError("no-databases", "You must give the user access to at least one database."); return(View(viewModel)); } var organisation = db.Organisations.FirstOrDefault(ba => ba.OrganisationId == CurrentUser.OrganisationId); if (db.ApplicationUsers.Any(u => u.Email.ToLower() == viewModel.Email.ToLower() && u.OrganisationId == CurrentUser.OrganisationId)) { ModelState.AddModelError("already-a-member", "That user is already a member of your team."); return(View(viewModel)); } var targettedUser = db.ApplicationUsers.FirstOrDefault(u => u.Email == viewModel.Email); if (viewModel.IsOrganisationAdmin) { db.OrganisationInvites.Add(new OrganisationInvite() { InviteEmail = viewModel.Email, OrganisationId = CurrentUser.OrganisationId, CreatedOn = DateTime.Now, CreatedBy = CurrentUser }); organisation.OrganisationName = viewModel.OrganisationName; } else { foreach (var databasePermission in viewModel.DatabasePermissions.Where(uc => uc.AccessType != "None")) { var targettedUserId = targettedUser != null ? targettedUser.Id : null; // Remove any previous access rows for this database var previousPermissions = db.UserDatabaseConnections.Where(uc => uc.DatabaseConnectionID == databasePermission.DatabaseId && (uc.ApplicationUserID == targettedUserId || uc.InviteEmail.ToLower() == viewModel.Email)); if (previousPermissions.Any()) { db.UserDatabaseConnections.RemoveRange(previousPermissions); } UserDatabaseTypes accessType; if (Enum.TryParse(databasePermission.AccessType, out accessType)) { var connection = new UserDatabaseConnection { CreatedBy = CurrentUser, CreatedOn = DateTime.Now, DatabaseConnectionID = databasePermission.DatabaseId, Type = accessType }; if (targettedUser != null) { connection.ApplicationUser = targettedUser; } else { connection.InviteEmail = viewModel.Email; } db.UserDatabaseConnections.Add(connection); } } } db.SaveChanges(); SendOrganisationInviteEmail(CurrentUser.Email, viewModel.Email, targettedUser != null); return(RedirectToAction("Index", "Team")); }