private async Task <bool> CreateIdentityUser(string userName) { var user = new IdentityUserDefaultPwd { UserName = userName }; var result = await _userManager.CreateAsync(user, IdentityUserDefaultPwd.DefaultPassword); if (result.Succeeded) { await _userManager.AddToRoleAsync(user, "PG"); return(true); } foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } return(false); }
public async Task <string> Post(List <IFormFile> xml_file, bool append_to_db) { var errorMessage = ""; var result = string.Empty; try { using (var reader = new StreamReader(xml_file[0].OpenReadStream())) { result = reader.ReadToEnd(); } } catch (Exception e) { return("Echec de l'upload du fichier\n" + e); } XDocument xml; try { xml = XDocument.Parse(result); } catch (Exception e) { return("Fichier XML invalide\n" + e); } // Activation du mode maintenance SetMaintainanceOn(); if (!append_to_db) { try { _context.Database.ExecuteSqlCommand("delete from UserData"); } catch (Exception e) { errorMessage += "Impossible de vider la DB UserData actuelle\n" + e; } foreach (var user in _userManager.Users.ToList()) { // On ne wipe pas le compte zifoys if (user.UserName == "admin") { continue; } var identityResult = await _userManager.DeleteAsync(user); if (!identityResult.Succeeded) { errorMessage += "Impossible de supprimer l'utilisateur " + user.UserName + "\n-->" + string.Join(",", identityResult.Errors.Select(o => o.ToString())); } } var eraseContextError = await SaveContext(); if (!string.IsNullOrEmpty(eraseContextError)) { SetMaintainanceOff(); return(eraseContextError); } } if (!string.IsNullOrEmpty(errorMessage)) { SetMaintainanceOff(); return("\n\n" + errorMessage); } var failedList = ""; var duplicateList = ""; var ud = new List <UserData>(); foreach (var elem in xml.Root.Elements("tbUser")) { var parsed = TryParseUserFromXElement(elem, ref failedList); if (parsed != null) { if (!ud.Select(o => o.UserName).Contains(parsed.UserName)) { ud.Add(parsed); } else { duplicateList += " " + parsed.UserName; } } } if (!string.IsNullOrEmpty(failedList)) { errorMessage = "TryParseUserFromXElement: Impossible d'ajouter les utilisateurs " + failedList; } if (!string.IsNullOrEmpty(duplicateList)) { errorMessage = "/!\\ Il existe des utilisateurs en double.<br/> Les doublons ont été ignorés : " + duplicateList; } failedList = ""; // Pas de AddRange pour avoir des erreurs détaillées foreach (var user in ud) { try { if (_context.UserData.Any(o => o.UserName == user.UserName)) { continue; } await _context.UserData.AddAsync(user); } catch { failedList += " \"" + user.UserName + " \""; } } var saveContextError = await SaveContext(); if (!string.IsNullOrEmpty(saveContextError)) { SetMaintainanceOff(); return(saveContextError); } if (!string.IsNullOrEmpty(failedList)) { errorMessage += "<br/><br/>_context.UserData.AddAsync: Impossible d'ajouter les utilisateurs " + failedList; } failedList = ""; var userDataEvaluated = _context.UserData.ToList(); foreach (var userData in userDataEvaluated) { if (await _userManager.FindByNameAsync(userData.UserName) != null) { continue; } var user = new IdentityUserDefaultPwd { UserName = userData.UserName }; try { var ir = await _userManager.CreateAsync(user, IdentityUserDefaultPwd.DefaultPassword); if (!ir.Succeeded) { failedList += " \"" + user.UserName + " \""; _context.UserData.Remove(ud.First(o => o.UserName == user.UserName)); } else { await _userManager.AddToRoleAsync(user, "PG"); } } catch (Exception e) { errorMessage += "Erreur interne à Identity : " + e; } } saveContextError = await SaveContext(); if (!string.IsNullOrEmpty(saveContextError)) { SetMaintainanceOff(); return(saveContextError); } if (!string.IsNullOrEmpty(failedList)) { errorMessage += "<br/><br/>Identity: Impossible de créer les comptes pour les utilisateurs " + failedList; } SetMaintainanceOff(); return("0" + errorMessage); }