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")); }
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)); }
/* * 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)); }