예제 #1
0
        public virtual KullanıcıKayıtSonuçları KullanıcıKaydet(KullanıcıKayıtİsteği istek)
        {
            if (istek == null)
            {
                throw new ArgumentNullException("istek");
            }

            if (istek.Kullanıcı == null)
            {
                throw new ArgumentException("Mevcut kullanıcı yüklenemedi");
            }

            var sonuç = new KullanıcıKayıtSonuçları();

            if (istek.Kullanıcı.AramaMotoruHesabı())
            {
                sonuç.HataEkle("Arama motoru kaydedilemedi");
                return(sonuç);
            }
            if (istek.Kullanıcı.ArkaPlanGöreviHesabı())
            {
                sonuç.HataEkle("Arka plan görevi hesabı kaydedilemedi");
                return(sonuç);
            }
            if (istek.Kullanıcı.IsRegistered())
            {
                sonuç.HataEkle("Mevcut kullanıcı zaten kayıtlı");
                return(sonuç);
            }
            if (String.IsNullOrEmpty(istek.Email))
            {
                sonuç.HataEkle("E-mail sağlanamadı");
                return(sonuç);
            }
            if (!GenelYardımcı.GeçerliMail(istek.Email))
            {
                sonuç.HataEkle("Hatalı E-mail");
                return(sonuç);
            }
            if (String.IsNullOrWhiteSpace(istek.Şifre))
            {
                sonuç.HataEkle("Şifre sağlanamadı");
                return(sonuç);
            }
            if (_kullanıcıAyarları.KullanıcıAdlarıEtkin)
            {
                if (String.IsNullOrEmpty(istek.KullanıcıAdı))
                {
                    sonuç.HataEkle("Kullanıcı adı sağlanamadı");
                    return(sonuç);
                }
            }

            //benzersiz kullanıcıyı doğrulama
            if (_kullanıcıServisi.KullanıcıAlEmail(istek.Email) != null)
            {
                sonuç.HataEkle("E-Mail adresi zaten mevcut");
                return(sonuç);
            }
            if (_kullanıcıAyarları.KullanıcıAdlarıEtkin)
            {
                if (_kullanıcıServisi.KullanıcıAlKullanıcıAdı(istek.KullanıcıAdı) != null)
                {
                    sonuç.HataEkle("Kullanıcı adı zaten mevcut");
                    return(sonuç);
                }
            }

            //buradan sonra istek doğrulandı
            istek.Kullanıcı.KullanıcıAdı = istek.KullanıcıAdı;
            istek.Kullanıcı.Email        = istek.Email;

            var kullanıcıŞifre = new KullanıcıŞifre
            {
                Kullanıcı         = istek.Kullanıcı,
                ŞifreFormatı      = istek.ŞifreFormatı,
                OluşturulmaTarihi = DateTime.UtcNow
            };

            switch (istek.ŞifreFormatı)
            {
            case ŞifreFormatı.Temiz:
                kullanıcıŞifre.Şifre = istek.Şifre;
                break;

            case ŞifreFormatı.Encrypted:
                kullanıcıŞifre.Şifre = _şifrelemeServisi.TextŞifrele(istek.Şifre);
                break;

            case ŞifreFormatı.Hashed:
            {
                var saltKey = _şifrelemeServisi.SaltAnahtarıOluştur(5);
                kullanıcıŞifre.ŞifreSalt = saltKey;
                kullanıcıŞifre.Şifre     = _şifrelemeServisi.ŞifreHashOluştur(istek.Şifre, saltKey, _kullanıcıAyarları.HashŞifreFormatı);
            }
            break;
            }
            _kullanıcıServisi.KullanıcıŞifresiEkle(kullanıcıŞifre);

            istek.Kullanıcı.Aktif = istek.Onaylandı;

            //kayıtlı rol ekle
            var kayıtlıRol = _kullanıcıServisi.KullanıcıRolüAlSistemAdı(SistemKullanıcıRolAdları.Kayıtlı);

            if (kayıtlıRol == null)
            {
                throw new TSHata("Kayıtlı rolü eklenemedi");
            }
            istek.Kullanıcı.KullanıcıRolleri.Add(kayıtlıRol);
            //ziyaretçi rolünü sil
            var ziyaretçiRolü = istek.Kullanıcı.KullanıcıRolleri.FirstOrDefault(cr => cr.SistemAdı == SistemKullanıcıRolAdları.Ziyaretçi);

            if (ziyaretçiRolü != null)
            {
                istek.Kullanıcı.KullanıcıRolleri.Remove(ziyaretçiRolü);
            }

            //Add reward points for kullanıcı registration (if enabled)
            //
            //

            _kullanıcıServisi.KullanıcıGüncelle(istek.Kullanıcı);

            //publish event
            _olayYayınlayıcı.Yayınla(new KullanıcıŞifreDeğiştirdiOlayı(kullanıcıŞifre));

            return(sonuç);
        }