public UserValidator(IAgrideaService service) { RuleFor(model => model.UserName) .NotEmpty().WithMessage(AgrideaCoreStrings.CannotBeEmpty) .Length(3, 30).WithMessage(AgrideaCoreStrings.SecurityPasswordLength); RuleFor(m => m.UserName) .IsUnique(service); RuleFor(model => model.Email) .EmailAddress().WithMessage(AgrideaCoreStrings.SecurityEmail); }
/// <summary> /// Case where B navigates to A, A is mandatory but A cant navigate to B is not handled. /// </summary> public void CleanOrphans(Type pocoType, IAgrideaService service, bool cleanNonDependentPocos = false) { var instances = service.All(pocoType).ToList(); var cleantCount = 0; foreach (var instance in instances) { var classHasRelationships = false; var instanceHasLinks = false; foreach (var referenceProperty in instance.GetType().GetReferenceProperties()) { classHasRelationships = true; var reference = referenceProperty.GetValue(instance) as IPocoBase; if (reference != null) { instanceHasLinks = true; break; } } if (instanceHasLinks) { continue; } foreach (var collectionProperty in instance.GetType().GetCollectionProperties()) { classHasRelationships = true; var inputCollection = collectionProperty.GetValue(instance) as IList; if (inputCollection.Count != 0) { instanceHasLinks = true; break; } } if (classHasRelationships && instanceHasLinks) { continue; } if (!classHasRelationships && !cleanNonDependentPocos) { continue; } service.RemoveItem(instance); cleantCount++; } service.Save().Reset(); if (cleantCount > 0) { Log.Info("CloningHelper.CleanOrphans ({0}, cleanNonDependentPocos:{1} Total:{2} / Cleant:{3})", pocoType.Name, cleanNonDependentPocos, instances.Count, cleantCount); } }
/// <summary> /// Removes a whole tree under input, this is the 'inverse' of Clone but this is too slow for a whole Canton... /// </summary> public void Remove(IPocoBase input, IAgrideaService service) { if (input == null) { return; } var pocoType = ObjectContext.GetObjectType(input.GetType()); var pocoTypeName = pocoType.Name; if (excludedPocos_.Contains(pocoType)) { return; } if (input.GetType().IsReferenceEntity()) { return; } if (deleted_.ContainsKey(input)) { return; } Log.Verbose("CloningHelper.Remove ({0})", input); deleted_.Add(input, true); foreach (var referenceProperty in input.GetType().GetReferenceProperties()) { var reference = referenceProperty.GetValue(input) as IPocoBase; if (reference == null) { continue; } Remove(reference, service); } foreach (var collectionProperty in input.GetType().GetCollectionProperties()) { var inputCollection = collectionProperty.GetValue(input) as IList; if (inputCollection.Count == 0) { continue; } foreach (IPocoBase inputItem in new ArrayList(inputCollection)) //to avoid collection change during iteration { Remove(inputItem, service); } } service.RemoveItem(input); //Must be at the end otherwise all relationships are cleared }
public RoleValidator(IAgrideaService service) { service_ = service; RuleFor(model => model.Name) .NotEmpty().WithMessage(AgrideaCoreStrings.CannotBeEmpty) .Length(3, 30).WithMessage(AgrideaCoreStrings.SecurityPasswordLength); RuleFor(model => model.Name) .IsUnique(service) .WithName("Nom du rôle"); RuleFor(model => model.Name) .Must(name => service_.GetRoleByName(name) == null) .When(x => !string.IsNullOrEmpty(x.Name)) .WithMessage(AgrideaCoreStrings.SecurityRoleAlreadyExists); }
public static bool TryRecoverPasswordFor(string from, string subject, IAgrideaService service, User user, ModelStateDictionary modelState) { try { string newPassword = PasswordHelper.GeneratePassword(); SmtpClient smtpClient = new SmtpClient(); smtpClient.Send( from, user.Email, subject, string.Format("Votre mot de passe a été réinitialisé. Merci de vous connecter avec les informations de connexion ci-dessous, puis de modifier votre mot de passe:\n\n" + "Nom d'utilisateur: {0}\n" + "Mot de passe: {1}", user.UserName, newPassword)); service.ChangePassword(user.UserName, newPassword); return(true); } catch (SmtpException e) { Log.Error(e); modelState.AddModelError("", "Un problème est survenu lors de l'envoi du mot de passe."); return(false); } }
/// <summary> /// Clones a whole tree under input. /// ReferenceEntity are copied by ref, all others by values /// Dicrimimants are changed to maintain UC, except when pragmatic condition is met /// </summary> public IPocoBase Clone(IPocoBase input, IAgrideaService service) { if (input == null) { return(null); } var pocoType = ObjectContext.GetObjectType(input.GetType()); var pocoTypeName = pocoType.Name; if (excludedPocos_.Contains(pocoType)) { return(null); } if (input.GetType().IsReferenceEntity()) { return(input); } if (clones_.ContainsKey(input)) { return(clones_[input]); } Log.Verbose("CloningHelper.Clone ({0})", input); IPocoBase result = Activator.CreateInstance(input.GetType()) as IPocoBase; result.CreatedBy = service.UserName; result.CreationDate = DateTime.Now; clones_.Add(input, result); var discriminantProperties = input.GetType().GetPrimitiveDiscriminantProperties().ToList(); var generateNewDiscriminant = discriminantProperties.All(m => m.IsPrimitive() || discriminantProperties.Count() == 1); foreach (var primitiveProperty in input.GetType().GetPrimitiveProperties()) { var val = primitiveProperty.GetValue(input); if (primitiveProperty.IsDiscriminant()) { //bug for BankAccount Ccp Number and Iban => discriminant but potentially null val = val is string && string.IsNullOrWhiteSpace(val.ToString()) ? "-" : val; val = generateNewDiscriminant ? NextDicriminantValue(primitiveProperty, val) : val; } primitiveProperty.SetValue(result, val); } foreach (var referenceProperty in input.GetType().GetReferenceProperties()) { var reference = referenceProperty.GetValue(input) as IPocoBase; if (reference == null) { continue; } referenceProperty.SetValue(result, Clone(reference, service)); } foreach (var collectionProperty in input.GetType().GetCollectionProperties()) { var inputCollection = collectionProperty.GetValue(input) as IList; if (inputCollection.Count == 0) { continue; } IList inputCollectionClone = Activator.CreateInstance(typeof(List <>).MakeGenericType(collectionProperty.PropertyType.GenericTypeArguments[0])) as IList; collectionProperty.SetValue(result, inputCollectionClone); foreach (IPocoBase inputItem in inputCollection) { inputCollectionClone.Add(Clone(inputItem, service)); } } return(result); }