// لاگین کاربر public async Task <Person> Login(LoginViewModel login) { // هش کردن پسورد کاربر string hashPassword = PasswordHasher.ComputeSha256Hash($"{login.UserName}seemsys{login.Password}"); // پیدا کردن کاربر بر اساس نام کاربری و پسورد هش شده var user = await _context.People.SingleOrDefaultAsync(a => a.UserName == login.UserName && a.Password == hashPassword); // چک کردن موجود بودن کاربر در صورت وجود if (user != null) { // ساخت تو کن jwt // authentication successful so generate jwt token var tokenHandler = new JwtSecurityTokenHandler(); //jwt ایجاد شی var key = Encoding.ASCII.GetBytes(_appSettings.Secret); // گرفتن کلید خارجی از اپ ستینگ var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim("seemsys", user.PersonNational_ID) // ایجاد توکن بر اساس کلید داخلی و ایجاد توکن ای دی }), Expires = DateTime.UtcNow.AddDays(7), // زمان معتبر بودن توکن SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; // ساخت نوکن var token = tokenHandler.CreateToken(tokenDescriptor); // قرار دادن توکن در یوزر user.Token = tokenHandler.WriteToken(token); // remove password before returning // نال کردن پسورد برای ارسال نشدن به سمت کلاینت user.Password = null; } // ارسال یوزر return(user); }
// post // api/developer public async Task <ActionResult <bool> > PostStaff(DeveloperViwModel model) { // چک کردن یونیک بودن یوزر نام if (await _personService.IsExistUserName(model.UserName)) { // ارسال بد ریکوست در صورت تکراری بودن نام کاربری return(BadRequest("نام کاربری تکراری میباشد")); } // چک کردن یونیک بودن شماره ملی if (await _personService.IsExistNationalId(model.PersonNationalId)) { // ارسال بد ریکوست در صورت تکراری بودن شماره ملی return(BadRequest("شماره ملی تکراری میباشد")); } // چک کردن تکراری نبودن ایمیل if (await _personService.IsExistEmail(model.Email)) { // ارسال بد ریکوست در صورت تکراری بودن ایمیل return(BadRequest("ایمیل وارد شده قبلا ثبت شده است")); } //ایجاد شی پرسن Person person = new Person() { PersonNational_ID = model.PersonNationalId, FirstName = model.FirstName, LastName = model.LastName, Email = FixedText.FixedEmail(model.Email), FatherName = model.FatherName, Gender = model.Gender, UserName = model.UserName, ShenasNum = model.ShenasNum, ShenasSerial = model.ShenasSerial, NationalCardSerial = model.NationalCardSerial, BirthDate = new DateTime(model.BirthDate, 1, 1), CreateTime = DateTime.Now, LastEditTime = DateTime.Now, IsActive = true, NeedChangePassword = true, Password = PasswordHasher.ComputeSha256Hash($"{model.UserName}seemsys{model.Password}") }; // ایجاد شی دولوپر Developer developer = new Developer() { MobileNumber = model.MobileNumber, CreateTime = DateTime.Now, LastEditTime = DateTime.Now, PersonNational_ID = await _personService.AddPerson(person), }; // ارسال شی دولوپر به سروریس و متد دولوپر return(await _developerService.AddDeveloper(developer)); }
// متد تغیر پسورد public async Task <bool> ChangePassword(string personNationalId, ChangePassword changePassword) { // پیدا کردن یوزر بر اساس ای دی var user = await _context.People.FindAsync(personNationalId); // هش کردن پسورد قبلی changePassword.OldPassword = PasswordHasher.ComputeSha256Hash($"{user.UserName}seemsys{changePassword.OldPassword}"); // چک کردن درست بودن پسورد if (user.Password == changePassword.OldPassword) { // فالس کردن مقدار الزامی بودن تغیر پسورد user.NeedChangePassword = false; // قرار دادن پسورد جدید در یوزر و ذخیره دیتابیس user.Password = PasswordHasher.ComputeSha256Hash($"{user.UserName}seemsys{changePassword.Password}"); _context.Entry(user).State = EntityState.Modified; await _context.SaveChangesAsync(); return(true); } return(false); }
//post // api/staff public async Task <ActionResult <bool> > PostStaff(RegisterStaffViewModel model) { // چک کردن معتبر بودن مدل if (!ModelState.IsValid) { // ارسال خطا return(BadRequest("لطفاً فیلد های مشخص شده را تکمیل نمایید")); } // چک کردن یونیک بودن نام کاربری if (await _personService.IsExistUserName(model.UserName)) { // ارسال خطای تکراری بودن نام کاربری در صورت یونیک نبودن return(BadRequest("نام کاربری تکراری میباشد")); } // چک کردن یونیک بودن شماره ملی if (await _personService.IsExistNationalId(model.PersonNationalId)) { // ارسال خطا در صورت تکراری بودن شماره ملی return(BadRequest("شماره ملی تکراری میباشد")); } // چک کردن یونیک بودن ایمیل if (await _personService.IsExistEmail(model.Email)) { // ارسال خطا در صورت یونیک نبودن ایمیل کاربر return(BadRequest("ایمیل وارد شده قبلا ثبت شده است")); } // ایجاد شی از پرسن Person person = new Person() { PersonNational_ID = model.PersonNationalId, FirstName = model.FirstName, LastName = model.LastName, Email = FixedText.FixedEmail(model.Email), FatherName = model.FatherName, Gender = model.Gender, UserName = model.UserName, ShenasNum = model.ShenasNum, ShenasSerial = model.ShenasSerial, NationalCardSerial = model.NationalCardSerial, BirthDate = new DateTime(model.BirthDate, 1, 1), CreateTime = DateTime.Now, LastEditTime = DateTime.Now, IsActive = true, NeedChangePassword = true, Password = PasswordHasher.ComputeSha256Hash($"{model.UserName}seemsys123456") }; // قرار دادن رول 2 برای کاربران خاشع person.Role1 = 2; // اگر مقدار ادمین خاشع برابر ترو باشد if (model.IsAdmin == true) { // رول کاربر برابر یک میشود person.Role2 = 1; } else { person.Role2 = 2; } // ایجاد شی جدید از اسف Staff staff = new Staff() { Address = model.Address, EduDegree = model.EduDegree, EduField = model.EduField, PersonNational_ID = await _personService.AddPerson(person), PositionId = model.PositionId, StaffNumber = model.StaffNumber, TeleNumber = model.TeleNumber }; // ارسال استف به سرویس و متد اد اسف برای ذخیره سازی return(await _staffService.AddStaff(staff)); }
public async Task <ActionResult <Person> > PostLandingPageStaff(LandingPageViewModel model) { //ایجاد یک شرط برای چک کردن اینکه اطلاعات کاربر داخل دیابیس وجود دارد یا خیر if (await _personService.IsExistNationalId(model.Id)) { //در صورت وجود اطلاعات فرد را به دست می اوریم Person a = await _context.People.SingleOrDefaultAsync(r => r.PersonNational_ID == model.Id); a.Email = model.Email; a.FirstName = model.Fname; a.LastName = model.Lname; a.PersonNational_ID = model.Id; //اطلاعات فرد درصورت بروز تغییرات ویرایش می شود _context.Entry(a).State = EntityState.Modified; await _context.SaveChangesAsync(); //ارسال توکن به مرورگر کاربر Person user = await _context.People.SingleOrDefaultAsync(r => r.PersonNational_ID == model.Id); var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_appSettings.Secret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim("seemsys", model.Id) }), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); user.Token = tokenHandler.WriteToken(token); user.Password = null; return(user); } else { //اگر اطلاعات فرد مورد نظر در دخل دیتابیس وجود نداشت عملیات درج اطلاعات در دیتابیس آغاز می شود Person person = new Person() { PersonNational_ID = model.Id, FirstName = model.Fname, LastName = model.Lname, Email = FixedText.FixedEmail(model.Email), FatherName = null, Gender = false, UserName = FixedText.FixedEmail(model.Email), ShenasNum = null, ShenasSerial = null, NationalCardSerial = null, CreateTime = DateTime.Now, LastEditTime = DateTime.Now, IsActive = true, NeedChangePassword = false, Password = PasswordHasher.ComputeSha256Hash($"{FixedText.FixedEmail(model.Email)}seemsys123456") }; if (model.type == "Customer") { person.Role1 = 3; } else if (model.type == "") { person.Role1 = 2; person.Role2 = 1; } else { person.Role1 = 2; person.Role2 = 2; } if (model.type == "Customer") { await _personService.AddPerson(person); } else { Staff staff = new Staff() { Address = null, EduDegree = null, EduField = null, PersonNational_ID = await _personService.AddPerson(person), PositionId = null, StaffNumber = model.Id, TeleNumber = null }; await _staffService.AddStaff(staff); } //ارسال توکن به مرورگر کاربر var tokenHandler = new JwtSecurityTokenHandler(); var key = Encoding.ASCII.GetBytes(_appSettings.Secret); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim("seemsys", model.Id) }), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; var token = tokenHandler.CreateToken(tokenDescriptor); person.Token = tokenHandler.WriteToken(token); person.Password = null; return(person); } }