예제 #1
0
        public virtual KullanıcıGirişSonuçları KullanıcıDoğrula(string kullanıcıAdıVeyaEmail, string şifre)
        {
            var kullanıcı = _kullanıcıAyarları.KullanıcıAdlarıEtkin ?
                            _kullanıcıServisi.KullanıcıAlKullanıcıAdı(kullanıcıAdıVeyaEmail) :
                            _kullanıcıServisi.KullanıcıAlEmail(kullanıcıAdıVeyaEmail);

            if (kullanıcı == null)
            {
                return(KullanıcıGirişSonuçları.KullanıcıMevcutDeğil);
            }
            if (kullanıcı.Silindi)
            {
                return(KullanıcıGirişSonuçları.Silindi);
            }
            if (!kullanıcı.Aktif)
            {
                return(KullanıcıGirişSonuçları.AktifDeğil);
            }
            //sadece kayıtlı olanlar girebilir
            if (!kullanıcı.IsRegistered())
            {
                return(KullanıcıGirişSonuçları.KayıtlıDeğil);
            }
            //check whether a kullanıcı is locked out
            if (kullanıcı.ŞuTarihdenBeriGirişYapamıyor.HasValue && kullanıcı.ŞuTarihdenBeriGirişYapamıyor.Value > DateTime.UtcNow)
            {
                return(KullanıcıGirişSonuçları.Kilitlendi);
            }

            if (!ŞifreUyuşturması(_kullanıcıServisi.MevcutŞifreAl(kullanıcı.Id), şifre))
            {
                //yanlış şifre
                kullanıcı.HatalıGirişSayısı++;
                if (_kullanıcıAyarları.HatalıŞifreDenemesi > 0 &&
                    kullanıcı.HatalıGirişSayısı >= _kullanıcıAyarları.HatalıŞifreDenemesi)
                {
                    //kilitle
                    kullanıcı.ŞuTarihdenBeriGirişYapamıyor = DateTime.UtcNow.AddMinutes(_kullanıcıAyarları.HatalıŞifredeKilitDakikası);
                    //sayacı sıfırla
                    kullanıcı.HatalıGirişSayısı = 0;
                }
                _kullanıcıServisi.KullanıcıGüncelle(kullanıcı);

                return(KullanıcıGirişSonuçları.HatalıŞifre);
            }

            //giriş detaylarını güncelle
            kullanıcı.HatalıGirişSayısı            = 0;
            kullanıcı.ŞuTarihdenBeriGirişYapamıyor = null;
            kullanıcı.GirişGerekli   = false;
            kullanıcı.SonGirişTarihi = DateTime.UtcNow;
            _kullanıcıServisi.KullanıcıGüncelle(kullanıcı);

            return(KullanıcıGirişSonuçları.Başarılı);
        }