Skip to content

Commit

Permalink
Added JWT integration
Browse files Browse the repository at this point in the history
  • Loading branch information
Yusuf Enes Aras committed Aug 13, 2021
1 parent 97d2f10 commit 40cde49
Show file tree
Hide file tree
Showing 182 changed files with 51,430 additions and 579 deletions.
Binary file modified .vs/ReCapProject/DesignTimeBuild/.dtbcache.v2
Binary file not shown.
Binary file modified .vs/ReCapProject/v16/.suo
Binary file not shown.
15 changes: 15 additions & 0 deletions Business/Abstract/IAuthService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using Core.Entities.Concrete;
using Core.Utilities.Results;
using Core.Utilities.Security.JWT;
using Entities.DTOs;

namespace Business.Abstract
{
public interface IAuthService
{
IDataResult<User> Register(UserForRegisterDto userForRegisterDto, string password);
IDataResult<User> Login(UserForLoginDto userForLoginDto);
IResult UserExists(string email);
IDataResult<AccessToken> CreateAccessToken(User user);
}
}
10 changes: 6 additions & 4 deletions Business/Abstract/IUserService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Core.Utilities.Results;
using Entities.Concrete;
using Core.Entities.Concrete;
using Core.Utilities.Results;
using System;
using System.Collections.Generic;
using System.Text;
Expand All @@ -8,10 +8,12 @@ namespace Business.Abstract
{
public interface IUserService
{
IDataResult<List<OperationClaim>> GetClaims(User user);
IResult Add(User user);
IResult Delete(User user);
IResult Update(User user);
IResult Delete(User user);
IDataResult<List<User>> GetAll();
IDataResult<User> GetById(int id);
IDataResult<User> GetById(int userId);
IDataResult<User> GetByMail(string email);
}
}
3 changes: 3 additions & 0 deletions Business/Business.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@

<ItemGroup>
<PackageReference Include="Autofac" Version="6.1.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.0" />
<PackageReference Include="FluentValidation" Version="9.5.1" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="3.1.11" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
</ItemGroup>

<ItemGroup>
Expand Down
38 changes: 38 additions & 0 deletions Business/BusinessAspects/Autofac/SecuredOperation.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using Core.Utilities.Interceptors;
using Core.Utilities.IoC;
using Microsoft.AspNetCore.Http;
using System;
using Castle.DynamicProxy;
using Microsoft.Extensions.DependencyInjection;
using Core.Extensions;
using Business.Constans;

namespace Business.BusinessAspects.Autofac
{
//Jwt için
public class SecuredOperation : MethodInterception
{
private string[] _roles;
private IHttpContextAccessor _httpContextAccessor;

public SecuredOperation(string roles)
{
_roles = roles.Split(',');
_httpContextAccessor = ServiceTool.ServiceProvider.GetService<IHttpContextAccessor>();

}

protected override void OnBefore(IInvocation invocation)
{
var roleClaims = _httpContextAccessor.HttpContext.User.ClaimRoles();
foreach (var role in _roles)
{
if (roleClaims.Contains(role))
{
return;
}
}
throw new Exception(Messages.AuthorizationDenied);
}
}
}
76 changes: 76 additions & 0 deletions Business/Concrete/AuthManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using Business.Abstract;
using Core.Entities.Concrete;
using Core.Utilities.Results;
using Core.Utilities.Security.Hashing;
using Core.Utilities.Security.JWT;
using Entities.DTOs;
using System;
using System.Collections.Generic;
using System.Text;
using DataAccess.Abstract;
using System.Linq;
using Business.Constans;

namespace Business.Concrete
{
public class AuthManager : IAuthService
{
private IUserService _userService;
private ITokenHelper _tokenHelper;

public AuthManager(IUserService userService, ITokenHelper tokenHelper)
{
_userService = userService;
_tokenHelper = tokenHelper;
}

public IDataResult<User> Register(UserForRegisterDto userForRegisterDto, string password)
{
byte[] passwordHash, passwordSalt;
HashingHelper.CreatePasswordHash(password, out passwordHash, out passwordSalt);
var user = new User
{
Email = userForRegisterDto.Email,
FirstName = userForRegisterDto.FirstName,
LastName = userForRegisterDto.LastName,
PasswordHash = passwordHash,
PasswordSalt = passwordSalt,
Status = true
};
_userService.Add(user);
return new SuccessDataResult<User>(user, Messages.UserRegistered);
}

public IDataResult<User> Login(UserForLoginDto userForLoginDto)
{
var userToCheck = _userService.GetByMail(userForLoginDto.Email);
if (userToCheck == null)
{
return new ErrorDataResult<User>(Messages.UserNotFound);
}

if (!HashingHelper.VerifyPasswordHash(userForLoginDto.Password, userToCheck.Data.PasswordHash, userToCheck.Data.PasswordSalt))
{
return new ErrorDataResult<User>("Parola hatası");
}

return new SuccessDataResult<User>(userToCheck.Data,"Giriş başarılı");
}

public IResult UserExists(string email)
{
if (_userService.GetByMail(email).Data != null)
{
return new ErrorResult(Messages.UserAlreadyExists);
}
return new SuccessResult();
}

public IDataResult<AccessToken> CreateAccessToken(User user)
{
var claims = _userService.GetClaims(user);
var accessToken = _tokenHelper.CreateToken(user, claims.Data);
return new SuccessDataResult<AccessToken>(accessToken, "Token oluşturuldu");
}
}
}
4 changes: 3 additions & 1 deletion Business/Concrete/CarManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Business.Abstract;
using Business.BusinessAspects.Autofac;
using Business.Constans;
using Business.ValidationRules.FluentValidation;
using Core.Aspects.Autofac.Validation;
Expand All @@ -22,7 +23,8 @@ public CarManager(ICarDal carDal)
{
_carDal = carDal;
}

//Claim
[SecuredOperation("car.add,admin")]
[ValidationAspect(typeof(CarValidator))]
public IResult Add(Car car)
{
Expand Down
14 changes: 13 additions & 1 deletion Business/Concrete/UserManager.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Business.Abstract;
using Business.Constans;
using Core.Entities.Concrete;
using Core.Utilities.Results;
using DataAccess.Abstract;
using Entities.Concrete;
using System;
using System.Collections.Generic;
using System.Text;
Expand Down Expand Up @@ -39,6 +39,18 @@ public IDataResult<User> GetById(int id)
(_userDal.Get(u => u.Id == id));
}

public IDataResult<User> GetByMail(string email)
{
return new SuccessDataResult<User>
(_userDal.Get(u => u.Email == email));
}

public IDataResult<List<OperationClaim>> GetClaims(User user)
{
return new SuccessDataResult<List<OperationClaim>>
(_userDal.GetClaims(user));
}

public IResult Update(User user)
{
_userDal.Update(user);
Expand Down
4 changes: 4 additions & 0 deletions Business/Constans/Messages.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ public static class Messages
public static string CarImageUpdated = "Araç Resmi Güncellendi";
public static string AuthorizationDenied = "Yetkiniz Yok";

public static string UserRegistered = "Kayıt olundu";
public static string UserNotFound = "Kullanıcı bulunamadı";
public static string UserAlreadyExists = "Kullanıcı zaten mevcut";

public static string MaintenanceTime = "Sistem Şuan Bakımda.";
public static string Added = "Eklendi";
public static string Deleted = "Silindi";
Expand Down
11 changes: 9 additions & 2 deletions Business/DependencyResolvers/Autofac/AutofacBusinessModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
using Business.Concrete;
using Castle.DynamicProxy;
using Core.Utilities.Interceptors;
using Core.Utilities.Security.JWT;
using DataAccess.Abstract;
using DataAccess.Concrete.EntityFramework;
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Text;
Expand All @@ -31,11 +33,16 @@ protected override void Load(ContainerBuilder builder)
builder.RegisterType<RentalManager>().As<IRentalService>();
builder.RegisterType<EfRentalDal>().As<IRentalDal>();

builder.RegisterType<CarImageManager>().As<ICarImageService>();
builder.RegisterType<EfCarImageDal>().As<ICarImageDal>();

builder.RegisterType<UserManager>().As<IUserService>();
builder.RegisterType<EfUserDal>().As<IUserDal>();

builder.RegisterType<CarImageManager>().As<ICarImageService>();
builder.RegisterType<EfCarImageDal>().As<ICarImageDal>();
builder.RegisterType<AuthManager>().As<IAuthService>();
builder.RegisterType<JwtHelper>().As<ITokenHelper>();

//builder.RegisterType<HttpContextAccessor>().As<IHttpContextAccessor>();

var assembly = System.Reflection.Assembly.GetExecutingAssembly();

Expand Down
2 changes: 1 addition & 1 deletion Business/ValidationRules/FluentValidation/UserValidator.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Entities.Concrete;
using Core.Entities.Concrete;
using FluentValidation;
using System;
using System.Collections.Generic;
Expand Down
Loading

0 comments on commit 40cde49

Please sign in to comment.