Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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);
            }
        }
Exemple #3
0
        /// <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
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
            }
        }
Exemple #6
0
        /// <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);
        }