Esempio n. 1
0
        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);
        }
Esempio n. 5
0
        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"));
        }