예제 #1
0
        /// <summary>
        /// Initialize entities for scenario
        /// </summary>
        public override void InitializeEntities()
        {
            //Inizializzazione base
            base.InitializeEntities();

            //Aggiungo l'amministrator
            Users.Add(new User
            {
                Id             = Guid.NewGuid().ToString("D"),
                UserName       = "******",
                Email          = "*****@*****.**",
                IsEnabled      = true,
                IsLocked       = false,
                PersonName     = "Mario",
                PersonSurname  = "Rossi",
                PasswordHash   = ShaProcessor.Sha256Encrypt("password"),
                LastAccessDate = DateTime.UtcNow.AddDays(-1),
                PhotoBinary    = new byte[] { }
            });

            //Creo l'audience corrente (Nativa)
            Audiences.Add(new Audience
            {
                Id                      = Guid.NewGuid().ToString("D"),
                Name                    = "Sample Resource",
                ClientId                = "sample.resource",
                ClientSecret            = "_IqrVEUhwO19o9nQ-9DtOfzYAL5THZrGcWgCO1-Xa0k",
                HasAdministrativeAccess = false,
                IsEnabled               = true,
                IsNative                = true,
                AllowedOrigin           = "*",
                RefreshTokenLifeTime    = 30
            });
        }
예제 #2
0
        /// <summary>
        /// Initialize entities for scenario
        /// </summary>
        public override void InitializeEntities()
        {
            //Aggiungo l'amministrator
            Users.Add(new User
            {
                Id             = Guid.NewGuid().ToString("D"),
                UserName       = "******",
                Email          = "*****@*****.**",
                IsEnabled      = true,
                IsLocked       = false,
                PersonName     = "Digital",
                PersonSurname  = "ZenProgramming",
                PasswordHash   = ShaProcessor.Sha256Encrypt("password"),
                LastAccessDate = DateTime.UtcNow.AddDays(-1),
                PhotoBinary    = new byte[] {}
            });

            //Creo l'audience corrente (Nativa)
            Audiences.Add(new Audience
            {
                Id                      = Guid.NewGuid().ToString("D"),
                Name                    = "Heimdallr Api",
                ClientId                = "heimdallr.api",
                ClientSecret            = "IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw",
                HasAdministrativeAccess = true,
                IsEnabled               = true,
                IsNative                = true,
                AllowedOrigin           = "*",
                RefreshTokenLifeTime    = 30
            });
        }
        public User SignIn(string userName, string password)
        {
            //Recuperare utente con username indicata da database
            User user = GetUserByUserName(userName);

            //Se non ho utente, esco
            if (user == null)
            {
                return(null);
            }

            //Se è disabilitato, esco
            if (!user.IsEnabled)
            {
                return(null);
            }

            //Enconding della password passata
            var encondedPassword = ShaProcessor.Sha256Encrypt(password);

            //Se le password non sono corrette, null
            //altrimenti emetto l'utente
            return(encondedPassword == user.PasswordHash
                ? user
                : null);
        }
        /// <summary>
        /// Seed on provided DbContext initialization data
        /// </summary>
        /// <param name="instance">DbContext instance</param>
        public void Seed(HeimdallrDbContext instance)
        {
            //Arguments validation
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            //If has NO users, create
            if (!instance.Users.Any(u => u.UserName == "Administrator"))
            {
                //Aggiungo l'amministrator
                instance.Users.Add(new User
                {
                    Id             = Guid.NewGuid().ToString("D"),
                    UserName       = "******",
                    Email          = "*****@*****.**",
                    IsEnabled      = true,
                    IsLocked       = false,
                    PersonName     = "Digital",
                    PersonSurname  = "ZenProgramming",
                    PasswordHash   = ShaProcessor.Sha256Encrypt("password"),
                    LastAccessDate = DateTime.UtcNow.AddDays(-1),
                    PhotoBinary    = new byte[] { }
                });

                //Save changes
                instance.SaveChanges();
            }

            //If has NO audience, create
            if (!instance.Audiences.Any(a => a.ClientId == "heimdallr.api"))
            {
                //Creo l'audience corrente (Nativa)
                instance.Audiences.Add(new Audience
                {
                    Id                      = Guid.NewGuid().ToString("D"),
                    Name                    = "Heimdallr Api",
                    ClientId                = "heimdallr.api",
                    ClientSecret            = "IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw",
                    HasAdministrativeAccess = true,
                    IsEnabled               = true,
                    IsNative                = true,
                    AllowedOrigin           = "*",
                    RefreshTokenLifeTime    = 30
                });

                //Save changes
                instance.SaveChanges();
            }
        }
        public override void InitializeEntities()
        {
            var user = new User
            {
                UserName        = "******",
                PasswordHash    = ShaProcessor.Sha256Encrypt("P@ssw0rd"),
                FirstName       = "Mauro",
                LastName        = "Bussini",
                Email           = "*****@*****.**",
                IsAdministrator = true,
                IsEnabled       = true
            };

            this.Push(e => e.Users, user);
        }
예제 #6
0
        /// <summary>
        /// Initialize elements
        /// </summary>
        /// <param name="elements">Empty elements to initialize</param>
        protected override void Initialize(IList <Credential> elements)
        {
            //Validatione argomenti
            if (elements == null)
            {
                throw new ArgumentNullException(nameof(elements));
            }

            //Accodo gli elementi
            elements.Add(new Credential {
                Key = "*****@*****.**", Password = ShaProcessor.Sha1Encrypt("ABC")
            });
            elements.Add(new Credential {
                Key = "*****@*****.**", Password = ShaProcessor.Sha1Encrypt("CDE")
            });
            elements.Add(new Credential {
                Key = "*****@*****.**", Password = ShaProcessor.Sha1Encrypt("FGH")
            });
        }
예제 #7
0
        /// <summary>
        /// Sign-in using credentials and return user
        /// </summary>
        /// <param name="userName">UserName</param>
        /// <param name="password">Password</param>
        /// <returns>Returns signed-in result</returns>
        public SignInResult SignIn(string userName, string password)
        {
            //Validazione argomenti
            if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password))
            {
                return(null);
            }

            //Recupero l'utente tramite username
            var user = GetUserByUserName(userName);

            //Se non è stato tovato, esco
            if (user == null)
            {
                return(null);
            }

            //Calcolo l'hash delle credenziali passate
            string hash = ShaProcessor.Sha256Encrypt(password);

            //Se NON corrisponde con quello su user, esco
            if (!hash.Equals(user.PasswordHash))
            {
                return(null);
            }

            //TODO: Blocco l'account se ci sono le condizioni (es. troppi tentativi ravvicinati)
            //LockAccountOnConditions(user);

            //Eseguo il salvataggio dell'ultimo accesso, precedente a
            //questo, perchè l'operazione di sign-in a tutti gli effetti
            //esegue un aggiornamento di questo campo. Ma è corretto
            //che nel risultato la data di emissione sia quella precedente
            //in modo che le informazioni mostrate all'utente siano in qualche
            //modo orientate a rendere l'utente stesso consapevole del
            //timing con cui è stato fatto l'ultimo accesso. Questa cosa gli
            //potrebbe permettere di verificare accessi fraudolenti al sistema
            var previousAccessDate = user.LastAccessDate;

            //Aggiorno la data di ultimo accesso
            user.LastAccessDate = DateTime.UtcNow;
            var validations = SaveEntity(user, _UserRepository);

            if (validations.Count > 0)
            {
                throw new InvalidOperationException($"Validation of user failed: {validations.ToValidationSummary()}");
            }

            //TODO: Se l'account è locked, verifico le condizioni di sblocco e lo sblocco
            //UnlockAccountOnConditions(user);

            //Imposto il provider interno di sign-in
            const string InternalSignInProvider = "default";

            //Eseguo la composizione ed emissione del result
            return(new SignInResult
            {
                UserName = user.UserName,
                Email = user.Email,
                PersonName = user.PersonName,
                PersonSurname = user.PersonSurname,
                IsEnabled = user.IsEnabled,
                IsLocked = user.IsLocked,
                LastAccessDate = previousAccessDate,
                SignInProvider = InternalSignInProvider
            });
        }