public ProfileViewModel(Models.DataModels.UserModels.User user, bool isAuthenticated, Models.ViewModels.User.UserRoleViewModel[] roles, string token)
     : this(
         user?.Id,
         isAuthenticated,
         user?.UserName,
         user?.Title,
         user?.Name,
         user?.Surname,
         user?.Email,
         user?.PhoneNumber,
         user?.Avatar,
         user?.NationCode,
         user?.IdNumber,
         user?.HomePhoneNumber,
         user?.WorkPhoneNumber,
         user?.Fax,
         user?.Address,
         user?.PostalCode,
         user?.BankAccountNumber,
         user?.BankName,
         user?.BankCard,
         user?.BankIBAN,
         user?.IDPayLink,
         user?.FullName,
         user == null ? false : user.Disabled,
         user?.ChatId,
         user?.LastLoginDateTime,
         user?.LoginDateTime,
         roles,
         token)
 {
 }
Example #2
0
 public MinimumUserInfo(Models.DataModels.UserModels.User user)
     : this(
         user.Id,
         user.UserName,
         user.FullName,
         user.Avatar,
         user.LoginDateTime)
 {
 }
Example #3
0
        public async Task <IActionResult> GetUserInfo()
        {
            Models.DataModels.UserModels.User user = null;
            if (this.User.Identity.IsAuthenticated)
            {
                user = await this.userManager.GetUserAsync(this.User);
            }

            return(this.Json(new ProfileViewModel(user, this.User.Identity.IsAuthenticated, this.User.Identity.IsAuthenticated ? this.GetUserRoles(user) : null, string.Empty)));
        }
Example #4
0
        public async Task <IActionResult> UpdateProfile([FromBody] Models.ViewModels.User.ProfileViewModel model)
        {
            var user = await this.userManager.GetUserAsync(this.User);

            if (string.IsNullOrEmpty(model.Name))
            {
                model.Name = model.UserName;
            }

            Models.DataModels.UserModels.User newUser = new Models.DataModels.UserModels.User(user.Id, model.Email, user.EmailConfirmed, model.UserName, model.PhoneNumber, user.PhoneNumberConfirmed, model.Title, model.Name, model.Surname, model.Avatar, model.NationCode, model.IdNumber, model.HomePhoneNumber, model.WorkPhoneNumber, model.Fax, model.Address, model.PostalCode, user.RegisterDateTime, user.LastLoginDateTime, user.LoginDateTime, DateTime.Now, user.ChatId, user.Disabled, model.IDPayLink, model.BankName, model.BankAccountNumber, model.BankCard, model.BankIBAN);
            Models.DataModels.UserModels.User.Copy(newUser, user);
            await this.context.SaveChangesAsync();

            return(this.Json(new ProfileViewModel(user, true, this.GetUserRoles(user), string.Empty)));
        }
Example #5
0
        public async Task <IActionResult> Login([FromBody] LoginViewModel model)
        {
            if (!this.ModelState.IsValid)
            {
                string errors = string.Join("\n", this.ModelState.Values.Select(t => string.Join("\n", t.Errors.Select(e => e.ErrorMessage).ToArray())).ToArray());
                throw new Exception("لطفا خطاهای زیر را برطرف کنید:\n" + errors);
            }

            Models.DataModels.UserModels.User user = null;
            if (model.UserName.Contains("@", StringComparison.CurrentCulture))
            {
                user = await this.userManager.FindByEmailAsync(model.UserName);

                if (user == null)
                {
                    throw new Exception($"هیچ کاربری با ایمیل {model.UserName} پیدا نشد");
                }
            }
            else if (model.UserName.StartsWith("09"))
            {
                user = this.context.Users.Where(t => t.PhoneNumber == model.UserName || t.NormalizedUserName == model.UserName.ToUpper(System.Globalization.CultureInfo.CurrentCulture)).FirstOrDefault();
                if (user == null)
                {
                    throw new Exception($"هیچ کاربری با شماره موبایل {model.UserName} پیدا نشد");
                }
            }
            else
            {
                user = await this.userManager.FindByNameAsync(model.UserName);

                if (user == null)
                {
                    throw new Exception($"هیچ کاربری با نام کاربری {model.UserName} پیدا نشد");
                }
            }

            if (user.Disabled)
            {
                throw new Exception("حساب کاربری غیر فعال شده است");
            }

            if (!await this.userManager.HasPasswordAsync(user))
            {
                throw new Exception($"برای حساب کاربری شما رمز عبور تعیین نشده است. لطفا روی لینک زیر کلیک کنید و برای حساب کاربری خود رمز عبور تعیین کنید<br/><a href=\"/forgetPassword\">تعیین رمز عبور (لطفا اینجا کلیک کنید)</a>");
            }

            Microsoft.AspNetCore.Identity.SignInResult result = await this.signInManager.PasswordSignInAsync(user, model.Password, true, true);

            if (result.Succeeded)
            {
                this.antiforgery.GetAndStoreTokens(this.HttpContext);
                user.LastLoginDateTime = user.LoginDateTime;
                user.LoginDateTime     = DateTime.Now;
                await this.context.SaveChangesAsync();

                return(this.Json(new ProfileViewModel(user, true, this.GetUserRoles(user), string.Empty)));
            }

            if (result.RequiresTwoFactor)
            {
                throw new Exception("نیاز به تایید دو مرحله ای وجود دارد.");
            }

            if (result.IsLockedOut)
            {
                throw new Exception("بدلیل اینکه 5 بار رمز عبور اشتباه وارد شده است حساب کاربری حداکثر بمدت 10 دقیقه غیر فعال است");
            }
            else
            {
                throw new Exception("رمزعبور نادرست است.");
            }
        }
Example #6
0
 public Models.ViewModels.User.UserRoleViewModel[] GetUserRoles(Models.DataModels.UserModels.User user)
 {
     return(this.context.UserRoles.Where(t => t.UserId == user.Id).Select(t => new Models.ViewModels.User.UserRoleViewModel(t.RoleId, t.UserRole.Name, t.UserRole.Title)).ToArray());
 }
Example #7
0
        public async Task <IActionResult> Register([FromBody] RegisterViewModel model)
        {
            if (model == null)
            {
                throw new Exception("اطلاعات به درستی ارسال نشده است");
            }

            if (!this.ModelState.IsValid)
            {
                string errors = string.Join("\n", this.ModelState.Values.Select(t => string.Join("\n", t.Errors.Select(e => e.ErrorMessage).ToArray())).ToArray());
                throw new Exception("لطفا خطاهای زیر را برطرف کنید:\n" + errors);
            }

            if (!this.User.Identity.IsAuthenticated)
            {
                try
                {
                    ValidateCaptchaHelper.Instance.Execute(this.HttpContext, model.Captcha);
                }
                catch (Exception ex)
                {
                    throw new Exception("لطفا خطاهای زیر را برطرف کنید:\n" + ex.Message);
                }
            }

            if (model.SelectedRole == "Admin" && (!this.User.Identity.IsAuthenticated || !(await this.userManager.IsInRoleAsync(await this.userManager.GetUserAsync(this.User), "Admin"))))
            {
                throw new Exception("فقط کاربر مدیر می تواند یک مدیر ثبت نام کند");
            }

            if (!Regex.IsMatch(model.UserName, @"^[a-zA-Z0-9-._]+$"))
            {
                throw new Exception($"برای نام کاربری فقط از حروف انگلیسی، اعداد و کاراکترهای . - _ استفاده کنید");
            }

            if (this.context.Users.Where(t => t.NormalizedUserName == model.UserName.ToUpper()).Any())
            {
                throw new Exception($"نام کاربری {model.UserName} قبلا ثبت شده است");
            }

            if (!string.IsNullOrEmpty(model.Email) && this.context.Users.Where(t => t.NormalizedEmail == model.Email.ToUpper()).Any())
            {
                throw new Exception($"ایمیل {model.Email} قبلا ثبت شده است");
            }

            if (!string.IsNullOrEmpty(model.PhoneNumber) && this.context.Users.Where(t => t.PhoneNumber == model.PhoneNumber).Any())
            {
                throw new Exception($"شماره موبایل {model.PhoneNumber} قبلا ثبت شده است");
            }

            if (!string.IsNullOrEmpty(model.PhoneNumber) && !model.PhoneNumber.StartsWith("09"))
            {
                throw new Exception($"شماره موبایل باید با 09 شروع شود");
            }

            if (!string.IsNullOrEmpty(model.PhoneNumber) && model.PhoneNumber.Length != 11)
            {
                throw new Exception($"شماره موبایل باید 11 رقم باشد");
            }

            if (string.IsNullOrEmpty(model.Name))
            {
                model.Name = model.UserName;
            }

            Models.DataModels.UserModels.User user;
            using (var transaction = this.context.Database.BeginTransaction())
            {
                var            newUser      = new Models.DataModels.UserModels.User(0, model.Email, false, model.UserName, model.PhoneNumber, false, model.Title, model.Name, model.Surname, null, null, null, null, null, null, null, null, DateTime.Now, null, DateTime.Now, null, Guid.NewGuid().ToString(), false, null, null, null, null, null);
                IdentityResult createResult = await this.userManager.CreateAsync(newUser);

                if (!createResult.Succeeded)
                {
                    throw new Exception(string.Join("\n", createResult.Errors.Select(t => t.Description)));
                }

                user = await this.userManager.FindByNameAsync(model.UserName);

                if (!string.IsNullOrWhiteSpace(model.Password))
                {
                    await this.userManager.AddPasswordAsync(user, model.Password);
                }

                if (model.SelectedRole == "Charity")
                {
                    await this.userManager.AddToRoleAsync(user, "Charity");
                }
                else if (model.SelectedRole == "User")
                {
                    await this.userManager.AddToRoleAsync(user, "User");
                }
                else if (model.SelectedRole == "Admin")
                {
                    await this.userManager.AddToRoleAsync(user, "Admin");
                }
                else
                {
                    throw new Exception("نقش نامعتبر");
                }

                transaction.Commit();
            }

            if (!this.User.Identity.IsAuthenticated)
            {
                await this.signInManager.SignInAsync(user, true);

                this.antiforgery.GetAndStoreTokens(this.HttpContext);
                return(this.Json(new ProfileViewModel(user, true, this.GetUserRoles(user), string.Empty)));
            }
            else
            {
                var currentUser = await this.userManager.GetUserAsync(this.User);

                return(this.Json(new ProfileViewModel(currentUser, true, this.GetUserRoles(currentUser), string.Empty)));
            }
        }
        public static async Task Initialize(
            ApplicationDbContext context,
            UserManager <Models.DataModels.UserModels.User> userManager,
            RoleManager <Models.DataModels.UserModels.UserRole> roleManager,
            bool migarte)
        {
            if (migarte)
            {
                await context.Database.MigrateAsync();
            }

            if (!await roleManager.RoleExistsAsync("Admin"))
            {
                await roleManager.CreateAsync(new Models.DataModels.UserModels.UserRole("Admin", "مدیر سیستم"));
            }

            if (!await roleManager.RoleExistsAsync("Charity"))
            {
                await roleManager.CreateAsync(new Models.DataModels.UserModels.UserRole("Charity", "حسابدار"));
            }

            if (!await roleManager.RoleExistsAsync("User"))
            {
                await roleManager.CreateAsync(new Models.DataModels.UserModels.UserRole("User", "کاربر"));
            }

            await context.SaveChangesAsync();

            Models.DataModels.UserModels.User admin = await userManager.FindByNameAsync("admin");

            Models.DataModels.UserModels.User charity = await userManager.FindByNameAsync("charity");

            if (admin == null)
            {
                IdentityResult result = await userManager.CreateAsync(new Models.DataModels.UserModels.User(0, "*****@*****.**", false, "admin", null, false, null, "مدیر", "سیستم", null, null, null, null, null, null, null, null, DateTime.Now, null, null, null, Guid.NewGuid().ToString(), false, null, null, null, null, null));

                if (!result.Succeeded)
                {
                    throw new Exception(string.Join("\n", result.Errors.Select(t => t.Description)));
                }

                admin = await userManager.FindByNameAsync("admin");

                await userManager.AddPasswordAsync(admin, "1234");

                await userManager.AddToRoleAsync(admin, "Admin");
            }

            if (charity == null)
            {
                IdentityResult result = await userManager.CreateAsync(new Models.DataModels.UserModels.User(0, "*****@*****.**", false, "charity", null, false, null, "حسابدار", "سیستم", null, null, null, null, null, null, null, null, DateTime.Now, null, null, null, Guid.NewGuid().ToString(), false, null, null, null, null, null));

                if (!result.Succeeded)
                {
                    throw new Exception(string.Join("\n", result.Errors.Select(t => t.Description)));
                }

                charity = await userManager.FindByNameAsync("charity");

                await userManager.AddPasswordAsync(charity, "1234");

                await userManager.AddToRoleAsync(charity, "Charity");
            }

            if (context.Charities.Count() == 0)
            {
                Models.DataModels.Charity charity1 = new Models.DataModels.Charity(0, "محک", "تهران");
                Models.DataModels.Charity charity2 = new Models.DataModels.Charity(0, "ثاراله", "شیراز");
                Models.DataModels.Charity charity3 = new Models.DataModels.Charity(0, "کمیته امداد", "مشهد");
                Models.DataModels.Charity charity4 = new Models.DataModels.Charity(0, "حلال احمر", "تهران");
                context.Charities.Add(charity1);
                await context.SaveChangesAsync();

                Models.DataModels.CharityTag tag1 = new Models.DataModels.CharityTag(0, charity1.Id, "سرطان");
                context.CharityTags.Add(tag1);
                Models.DataModels.CharityTag tag2 = new Models.DataModels.CharityTag(0, charity1.Id, "کودک");
                context.CharityTags.Add(tag2);
                await context.SaveChangesAsync();

                context.Charities.Add(charity2);
                await context.SaveChangesAsync();

                Models.DataModels.CharityTag tag3 = new Models.DataModels.CharityTag(0, charity2.Id, "سرطان");
                context.CharityTags.Add(tag3);
                Models.DataModels.CharityTag tag4 = new Models.DataModels.CharityTag(0, charity2.Id, "کودک");
                context.CharityTags.Add(tag4);
                Models.DataModels.CharityTag tag5 = new Models.DataModels.CharityTag(0, charity2.Id, "نوزاد");
                context.CharityTags.Add(tag5);
                await context.SaveChangesAsync();

                context.Charities.Add(charity3);
                await context.SaveChangesAsync();

                Models.DataModels.CharityTag tag6 = new Models.DataModels.CharityTag(0, charity3.Id, "بازنشسته");
                context.CharityTags.Add(tag6);
                await context.SaveChangesAsync();

                context.Charities.Add(charity4);
                await context.SaveChangesAsync();

                Models.DataModels.CharityTag tag7 = new Models.DataModels.CharityTag(0, charity4.Id, "سیل");
                context.CharityTags.Add(tag7);
                Models.DataModels.CharityTag tag8 = new Models.DataModels.CharityTag(0, charity4.Id, "زلزله");
                context.CharityTags.Add(tag8);
                await context.SaveChangesAsync();
            }
        }