...
This commit is contained in:
87
Hushian.Application/Services/AuthService.cs
Normal file
87
Hushian.Application/Services/AuthService.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
using Common.Models.Auth;
|
||||
using Common.Models.Auth.CompanySide;
|
||||
using Common.Models.Auth.UserSide;
|
||||
using Hushian.Application.Constants;
|
||||
using Hushian.Application.Contracts.Persistence;
|
||||
using Hushian.Application.Models;
|
||||
using Hushian.Domain.Entites;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Hushian.Application.Services
|
||||
{
|
||||
public class AuthService
|
||||
{
|
||||
private readonly JwtSettings _jwtSettings;
|
||||
private readonly IGenericRepository<Company> _CompanyRepository;
|
||||
private readonly IGenericRepository<User> _UserRepository;
|
||||
private readonly IGenericRepository<Exper> _ExperRepository;
|
||||
private readonly VerificationService _verificationService;
|
||||
public AuthService(IOptions<JwtSettings> jwtSettings)
|
||||
{
|
||||
_jwtSettings = jwtSettings.Value;
|
||||
}
|
||||
public async Task<ResponseBase<AuthResponse>> AuthenticationFromCompanySide
|
||||
(AuthRequestFromCompanySide auth)
|
||||
{
|
||||
ResponseBase<AuthResponse> Response = new();
|
||||
return Response;
|
||||
}
|
||||
public async Task<ResponseBase<int>> AuthenticationFromUserSide
|
||||
(AuthRequestFromUserSide auth)
|
||||
{
|
||||
ResponseBase<int> Response = new();
|
||||
if (!await _UserRepository.Get().AnyAsync(a => a.Mobile == auth.Mobile))
|
||||
{
|
||||
if (!await _UserRepository.ADDBool(new User() { Mobile = auth.Mobile, FullName = auth.FullName }))
|
||||
{
|
||||
Response.Errors.Add("خطا در کاربری");
|
||||
}
|
||||
}
|
||||
|
||||
if (Response.Errors.Count==0)
|
||||
{
|
||||
|
||||
Response.Value = await _verificationService.GenerateCodeForLoginUser(auth.Mobile);
|
||||
Response.Success = true;
|
||||
}
|
||||
return Response;
|
||||
}
|
||||
|
||||
public async Task<JwtSecurityToken> GenerateToken(string UserName, int userId)
|
||||
{
|
||||
|
||||
|
||||
var claims = new[]
|
||||
{
|
||||
new Claim(JwtRegisteredClaimNames.Sub,UserName),
|
||||
new Claim(CustomClaimTypes.Uid,userId.ToString())
|
||||
};
|
||||
|
||||
|
||||
var symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtSettings.Key));
|
||||
var signingCredentials = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256);
|
||||
|
||||
var jwtSecurityToken = new JwtSecurityToken(
|
||||
issuer: _jwtSettings.Issuer,
|
||||
audience: _jwtSettings.Audience,
|
||||
claims: claims,
|
||||
expires: DateTime.UtcNow.AddMinutes(_jwtSettings.DurationInMinutes),
|
||||
signingCredentials: signingCredentials);
|
||||
|
||||
//user.Token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
|
||||
//var resultupdateuser = await _userManager.UpdateAsync(user);
|
||||
|
||||
return jwtSecurityToken;
|
||||
}
|
||||
}
|
||||
}
|
102
Hushian.Application/Services/VerificationService.cs
Normal file
102
Hushian.Application/Services/VerificationService.cs
Normal file
@@ -0,0 +1,102 @@
|
||||
using Common.Contracts.Infrastructure;
|
||||
using Common.Dtos.Verification;
|
||||
using Common.Enums;
|
||||
using Common.Models.Auth;
|
||||
using Hushian.Application.Contracts.Persistence;
|
||||
using Hushian.Application.Models;
|
||||
using Hushian.Domain.Entites;
|
||||
using Identity.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Hushian.Application.Services
|
||||
{
|
||||
public class VerificationService
|
||||
{
|
||||
private readonly IGenericRepository<VerificationCode> _VerificationCodeRepository;
|
||||
private readonly IMessageSender _messageSender;
|
||||
private readonly IGenericRepository<User> _UserRepository;
|
||||
private readonly AuthService _authService;
|
||||
public async Task<int> GenerateCodeForLoginUser(string Mobile)
|
||||
{
|
||||
string Code = await GenerateCode();
|
||||
var response= await _VerificationCodeRepository.ADD
|
||||
(new Identity.Models.VerificationCode(VerificationCodeType.Login, Code, Mobile));
|
||||
await _messageSender.SendMassage(new Models.Message.Message()
|
||||
{
|
||||
msg = Code,
|
||||
To = Mobile
|
||||
});
|
||||
return response.ID;
|
||||
}
|
||||
public async Task<ResponseBase<AuthResponse>> VerificationCode(ConfirmedCodeDto model)
|
||||
{
|
||||
var response = new ResponseBase<AuthResponse>();
|
||||
var resultConf=await _VerificationCodeRepository.Get()
|
||||
.FirstOrDefaultAsync(w => w.ID == model.Id && w.Code == model.code && w.Type == model.codeType);
|
||||
if (resultConf!=null)
|
||||
{
|
||||
if (resultConf.Type == VerificationCodeType.Login)
|
||||
{
|
||||
var User= await _UserRepository.Get().FirstOrDefaultAsync(w => w.Mobile == resultConf.Mobile);
|
||||
if (User!=null)
|
||||
{
|
||||
response.Success = true;
|
||||
response.Value = new AuthResponse()
|
||||
{
|
||||
Fullname = User.FullName,
|
||||
Id = User.ID,
|
||||
MobileOrUserName = User.Mobile,
|
||||
Token = new JwtSecurityTokenHandler().WriteToken(await _authService.GenerateToken(User.Mobile, User.ID))
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
response.Errors.Add("کاربری یافت نشد");
|
||||
}
|
||||
}
|
||||
else if (resultConf.Type == VerificationCodeType.ForgetPassword)
|
||||
{
|
||||
if ((string.IsNullOrEmpty(model.value) || model.value.Length < 5))
|
||||
response.Errors.Add("کلمه عبور باید بیشتر از 5 کاراکتر باشد");
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
else if (resultConf.Type == VerificationCodeType.PhoneNumberConfirmed)
|
||||
{
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
response.Errors.Add("احراز صحیح نمی باشد");
|
||||
}
|
||||
|
||||
await _VerificationCodeRepository.DELETE(resultConf);
|
||||
}
|
||||
else
|
||||
{
|
||||
response.Errors.Add("احراز یافت نشد");
|
||||
}
|
||||
|
||||
return response;
|
||||
|
||||
|
||||
|
||||
}
|
||||
private async Task<string> GenerateCode()
|
||||
{
|
||||
int Code = Random.Shared.Next(1000, 9000);
|
||||
while (await _VerificationCodeRepository.Get().AnyAsync(w => w.Code == Code.ToString()))
|
||||
Code = Random.Shared.Next(1000, 9000);
|
||||
|
||||
return Code.ToString();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user