Exemplo n.º 1
0
        public IActionResult Dashboard()
        {
            IEnumerable <ViewDashboardClientViewModel> _clients = _mapper.Map <IEnumerable <ViewDashboardClientViewModel> >(_clientRepo.GetClients());
            IEnumerable <ViewDashboardServerViewModel> _servers = _mapper.Map <IEnumerable <ViewDashboardServerViewModel> >(_serverRepo.GetServers());
            IEnumerable <ViewDashboardVpnViewModel>    _vpns    = _mapper.Map <IEnumerable <ViewDashboardVpnViewModel> >(_vpnRepo.GetVpns());

            var dashboardViewModel = new ViewDashboardViewModel
            {
                TotalClients = _clients.Count(),
                TotalServers = _servers.Count(),
                TotalVpns    = _vpns.Count()
            };

            foreach (var item in _servers)
            {
                item.ClientName = _clients.Where(c => c.Id == item.ClientId).FirstOrDefault().Name;
            }

            foreach (var item in _vpns)
            {
                item.ClientName = _clients.Where(c => c.Id == item.ClientId).FirstOrDefault().Name;
            }
            dashboardViewModel.Clients = _clients.Take(5);
            dashboardViewModel.Servers = _servers.Take(5);
            dashboardViewModel.Vpns    = _vpns.Take(5);
            return(View(dashboardViewModel));
        }
        // GET: Dashboards/View/5
        public ActionResult View(int?id)
        {
            if (id == 0)
            {
                return(HttpNotFound());
            }

            var model = new ViewDashboardViewModel();

            model.Dashlets          = new List <Dashlet>();
            model.DataSources       = new List <DataSource>();
            model.DashletsSqlResult = new Dictionary <int, string>();
            model.DashletsFirstCol  = new List <Dashlet>();
            model.DashletsSecondCol = new List <Dashlet>();
            model.DashletsThirdCol  = new List <Dashlet>();

            var userEmail = HttpContext.User.Identity.Name;
            var user      = db.AppUsers.SingleOrDefault(u => u.Email == userEmail);

            model.IsCompanyAdmin = (user.Roles.Where(r => r.Name == "CompanyAdmin")).Count() == 1;
            model.IsSuperAdmin   = (user.Roles.Where(r => r.Name == "SuperAdmin")).Count() == 1;
            model.IsUser         = (user.Roles.Where(r => r.Name == "User")).Count() == 1;

            model.Dashboard           = db.Dashboards.SingleOrDefault(d => d.Id == id);
            model.DashboardList       = db.Dashboards.ToList();
            model.DashboardListToUser = user.Dashboards.Select(p => new DashboardItemViewModel()
            {
                DashboardId = p.Id, DashboardName = p.Title
            }).ToList();

            model.Dashlets = db.Dashlets.Include(m => m.DataSource).Where(d => d.DashboardId == id).OrderBy(d => d.Position).ToList();

            model.CurrentUser = user;
            model.Email       = user.Email;
            model.ID          = user.Id;

            if (id == null)
            {
                if (model.IsSuperAdmin)
                {
                    return(RedirectToAction("index", "dashboards"));
                }
                else if (model.IsCompanyAdmin)
                {
                    return(RedirectToAction("index", "dashboards"));
                }
                else if (model.IsUser)
                {
                    return(RedirectToAction("index", "dashboards"));
                }
                else
                {
                    return(HttpNotFound("Undefiend role"));
                }
            }

            model.DataSources = db.DataSources.Where(x => x.OwnerId == model.Dashboard.IdOwner).ToList();

            foreach (var dashlet in model.Dashlets)
            {
                switch (dashlet.DataSource.Type)
                {
                case "MSSQL":
                    try
                    {
                        using (SqlConnection connection = new SqlConnection())
                        {
                            connection.ConnectionString = dashlet.DataSource.ConnectionString;
                            connection.Open();

                            SqlCommand command = new SqlCommand(dashlet.Sql, connection);

                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    model.DashletsSqlResult.Add(dashlet.Id, reader[0].ToString());
                                }
                            }

                            connection.Close();
                        }
                    }
                    catch
                    {
                        model.DashletsSqlResult.Add(dashlet.Id, "SQL queary is incorrect!");
                        //continue;
                        //return Content("Invalid Connection to Database in Dashhlet: " + dashlet.Id);
                    }
                    break;

                default:
                    model.DashletsSqlResult.Add(dashlet.Id, "Type of Database is unknown!");
                    //continue;
                    //return Content("Invalid Type of Database in Dashhlet: " + dashlet.Id);
                    break;
                }

                switch (dashlet.Column)
                {
                case 1:
                    model.DashletsFirstCol.Add(dashlet);
                    break;

                case 2:
                    model.DashletsSecondCol.Add(dashlet);
                    break;

                case 3:
                    model.DashletsThirdCol.Add(dashlet);
                    break;

                default:
                    Console.WriteLine("Toggle is broke. It's equal to " + dashlet.Column);
                    break;
                }
            }

            model.IsOwner          = model.Dashboard.IdOwner == user.Id;
            model.IsDashboardAdmin = model.Dashboard.IdDashboardAdmin == user.Id;

            if (model.IsSuperAdmin)
            {
                return(View(model));
            }
            else if (model.IsOwner)
            {
                model.DashboardList = model.DashboardList.Where(x => x.IdOwner == user.Id).ToList();
                return(View("ViewCompanyAdmin", model));
            }
            else if (model.IsDashboardAdmin)
            {
                model.DashboardList = model.DashboardList.Where(x => x.IdDashboardAdmin == user.Id).ToList();

                return(View("ViewUser", model));
            }
            else if (model.IsUser)
            {
                var isAllowedDashboard = user.Dashboards.SingleOrDefault(x => x.Id == id);
                if (isAllowedDashboard != null)
                {
                    return(View("ViewUserReadOnly", model));
                }
                else
                {
                    return(View("~/Views/Shared/Errors/Error_NotFound_Available_Dashboard.cshtml"));
                }
            }

            return(RedirectToAction("index", "home", null));
        }
        // GET: Dashboards/View/5
        public ActionResult ViewUser(int id)
        {
            if (id == 0)
            {
                return(HttpNotFound());
            }

            var viewDashboardViewModel = new ViewDashboardViewModel();

            viewDashboardViewModel.DashletsSqlResult = new Dictionary <int, string>();

            viewDashboardViewModel.DashletsFirstCol  = new List <Dashlet>();
            viewDashboardViewModel.DashletsSecondCol = new List <Dashlet>();
            viewDashboardViewModel.DashletsThirdCol  = new List <Dashlet>();

            viewDashboardViewModel.DashboardList = db.Dashboards.ToList();
            viewDashboardViewModel.Dashboard     = db.Dashboards.SingleOrDefault(d => d.Id == id);
            viewDashboardViewModel.Dashlets      = db.Dashlets.Include(d => d.DataSource).Where(d => d.DashboardId == id).OrderBy(d => d.Position).ToList();


            foreach (var dashlet in viewDashboardViewModel.Dashlets)
            {
                switch (dashlet.DataSource.Type)
                {
                case "MSSQL":
                    try
                    {
                        using (SqlConnection connection = new SqlConnection())
                        {
                            connection.ConnectionString = dashlet.DataSource.ConnectionString;
                            connection.Open();

                            SqlCommand command = new SqlCommand(dashlet.Sql, connection);

                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                if (reader.Read())
                                {
                                    viewDashboardViewModel.DashletsSqlResult.Add(dashlet.Id, reader[0].ToString());
                                }
                            }

                            connection.Close();
                        }
                    }
                    catch
                    {
                        viewDashboardViewModel.DashletsSqlResult.Add(dashlet.Id, "SQL queary is incorrect!");
                        //continue;
                        //return Content("Invalid Connection to Database in Dashhlet: " + dashlet.Id);
                    }
                    break;

                default:
                    viewDashboardViewModel.DashletsSqlResult.Add(dashlet.Id, "Type of Database is unknown!");
                    //continue;
                    //return Content("Invalid Type of Database in Dashhlet: " + dashlet.Id);
                    break;
                }

                switch (dashlet.Column)
                {
                case 1:
                    viewDashboardViewModel.DashletsFirstCol.Add(dashlet);
                    break;

                case 2:
                    viewDashboardViewModel.DashletsSecondCol.Add(dashlet);
                    break;

                case 3:
                    viewDashboardViewModel.DashletsThirdCol.Add(dashlet);
                    break;

                default:
                    Console.WriteLine("Toggle is broke. It's equal to " + dashlet.Column);
                    break;
                }
            }

            return(View(viewDashboardViewModel));
        }