コード例 #1
0
 public async Task <IActionResult> SelectCluster(ClusterSelectViewModel model)
 {
     if (ModelState.IsValid)
     {
         var clusterInfo        = HttpContext.Session.GetString("AuthorizedClusters");
         var authorizedClusters = JsonConvert.DeserializeObject <Dictionary <string, UserEntry> >(clusterInfo);
         var useCluster         = model.CurrentCluster;
         if (authorizedClusters.ContainsKey(useCluster))
         {
             HttpContext.Session.SetString("CurrentClusters", useCluster);
             await AddUser(authorizedClusters[useCluster], useCluster);
         }
     }
     return(RedirectToAction("Index", "Home"));
 }
コード例 #2
0
        public IActionResult SelectCluster()
        {
            var vm = new ClusterSelectViewModel();

            _logger.LogInformation("Try to render SelectCluster");
            var info = HttpContext.Session.GetString("CurrentClusters");

            vm.CurrentCluster = HttpContext.Session.GetString("ClustersList");
            var lstClusters = (String.IsNullOrEmpty(info) ? new List <string>() : JsonConvert.DeserializeObject <List <string> >(info));

            vm.ClustersList = new List <SelectListItem>();
            for (int i = 0; i < lstClusters.Count(); i++)
            {
                vm.ClustersList.Add(new SelectListItem
                {
                    Value = (i + 1).ToString(),
                    Text  = lstClusters[i]
                });
                _logger.LogInformation("Cluster Option {0} is {1}", i + 1, lstClusters[i]);
            }
            ;
            return(View(vm));
        }
コード例 #3
0
        /*
         * public async Task<int> UpdateUser(string email, UserID userID, string clusterName )
         * {
         *  var userEntry = new UserEntry(userID, email);
         *  var db = Startup.DatabaseForUser[clusterName];
         *  var priorEntrys = db.User.Where(b => b.Email == email).ToAsyncEnumerable();
         *  long  nEntry = 0;
         *  await priorEntrys.ForEachAsync( entry =>
         *      {
         *          // We will not update existing entry in database.
         *          // db.Entry(entry).CurrentValues.SetValues(userEntry);
         *          Interlocked.Add(ref nEntry, 1);
         *      }
         *  );
         *  if (Interlocked.Read(ref nEntry) == 0)
         *  {
         *      await db.User.AddAsync(userEntry);
         *  }
         *  return await db.SaveChangesAsync();
         * }
         *
         * public async Task<int> UpdateUserToAll(string email, UserID userID)
         * {
         *  await Task.WhenAll(Startup.DatabaseForUser.Select(pair => UpdateUser(email, userID, pair.Key)));
         *  return 0;
         * }*/

        #region ASP Controllers
        public async Task <IActionResult> Index()
        {
            if (User.Identity.IsAuthenticated && !HttpContext.Session.Keys.Contains("uid"))
            {
                string userObjectID = null;
                string username     = null;
                string tenantID     = null;
                string upn          = null;
                string endpoint     = null;
                ParseClaims(out userObjectID, out username, out tenantID, out upn, out endpoint);

                var retVal = ConfigurationParser.GetConfiguration("WinBindServers");

                var winBindServers = retVal as Dictionary <string, object>;

                var lst = ((Object.ReferenceEquals(winBindServers, null) || winBindServers.Count() == 0) ? FindGroupMembershipByUserGroups() : new List <UserID>());

                if (true)
                {
                    var    email     = HttpContext.Session.GetString("Email");
                    string useServer = null;

                    if (!Object.ReferenceEquals(winBindServers, null))
                    {
                        Random rnd = new Random();
                        int    idx = rnd.Next(winBindServers.Count);
                        foreach (var value in winBindServers.Values)
                        {
                            if (idx == 0)
                            {
                                useServer = value as string;
                            }
                            else
                            {
                                idx--;
                            }
                        }
                    }

                    if (!String.IsNullOrEmpty(useServer))
                    {
                        var userID = await FindGroupMembershipByServer(useServer);

                        if (!Object.ReferenceEquals(userID, null))
                        {
                            lst.Add(userID);
                        }
                    }
                    _logger.LogDebug("User {0} group memberships {1}", email, string.Join(",", lst.SelectMany(x => x.groups).ToArray()));

                    var authorizedClusters = AuthenticateUserByGroupMembership(lst);
                    _logger.LogDebug("User {0} authorized clusters preDB {1}", email, string.Join(",", authorizedClusters.Keys.ToArray()));
                    var authorizationFinal = new Dictionary <string, UserEntry>();
                    var ret = await AuthenticateByDB(upn, tenantID, username, authorizedClusters, authorizationFinal);

                    _logger.LogDebug("User {0} authorized clusters afterDB {1}", email, string.Join(",", authorizationFinal.Keys.ToArray()));

                    // bRet = await AuthenticateByAAD(userObjectID, username, tenantID, upn, endpoint);
                    string useCluster = "";

                    if (authorizationFinal.Count() > 0)
                    {
                        foreach (var pair in authorizationFinal)
                        {
                            await AddUser(pair.Value, pair.Key);

                            useCluster = pair.Key;
                            _logger.LogInformation("User {0} is authorized for cluster {1}", email, pair.Key);
                        }
                    }
                    // Store authorized clusters.
                    HttpContext.Session.SetString("AuthorizedClusters", JsonConvert.SerializeObject(authorizationFinal));
                    HttpContext.Session.SetString("CurrentClusters", useCluster);
                    var lstClusters = authorizedClusters.Keys.ToList <string>();
                    HttpContext.Session.SetString("ClustersList", JsonConvert.SerializeObject(lstClusters));
                    if (String.IsNullOrEmpty(useCluster))
                    {
                        // Mark user as unauthorized.
                        UserUnauthorized();
                        _logger.LogInformation("User {0} is not authorized for any cluster ... ", email);
                    }
                }
            }


            var vm = new ClusterSelectViewModel();

            if (HttpContext.Session.Keys.Contains("isAuthorized"))
            {
                if (HttpContext.Session.GetString("isAuthorized") == "true")
                {
                    ViewData["isAuthorized"] = true;
                    _logger.LogInformation("Try to render SelectCluster");
                    var info = HttpContext.Session.GetString("CurrentClusters");
                    ViewData["CurrentCluster"] = info;
                    vm.CurrentCluster          = info;
                    var lstClustersInfo = HttpContext.Session.GetString("ClustersList");
                    var lstClusters     = (String.IsNullOrEmpty(info) ? new List <string>() : JsonConvert.DeserializeObject <List <string> >(lstClustersInfo));
                    vm.ClustersList = new List <SelectListItem>();
                    for (int i = 0; i < lstClusters.Count(); i++)
                    {
                        if (!String.IsNullOrEmpty(lstClusters[i]))
                        {
                            vm.ClustersList.Add(new SelectListItem
                            {
                                Value = lstClusters[i], // (i + 1).ToString(),
                                Text  = lstClusters[i]
                            });
                            _logger.LogInformation("Cluster Option {0} is {1}", i + 1, lstClusters[i]);
                        }
                    }
                    ;
                }
                else
                {
                    ViewData["isAuthorized"] = false;
                }
            }

            if (User.Identity.IsAuthenticated)
            {
                string username = HttpContext.Session.GetString("Username");
                string workFolderAccessPoint = HttpContext.Session.GetString("WorkFolderAccessPoint");
                string dataFolderAccessPoint = HttpContext.Session.GetString("DataFolderAccessPoint");
                string smbUsername           = HttpContext.Session.GetString("smbUsername");
                string smbUserPassword       = HttpContext.Session.GetString("smbUserPassword");
                ViewData["Username"] = username;

                ViewData["workPath"]        = workFolderAccessPoint + username + "/";
                ViewData["dataPath"]        = dataFolderAccessPoint;
                ViewData["smbUsername"]     = smbUsername;
                ViewData["smbUserPassword"] = smbUserPassword;
                var configString = Startup.DashboardConfig.ToString();
                var configArray  = ASCIIEncoding.ASCII.GetBytes(configString);
                ViewData["Dashboard"] = Convert.ToBase64String(configArray);
            }
            return(View(vm));
        }