summaryrefslogtreecommitdiff
path: root/Policies/CorrectTokenHandler.cs
blob: 7663ec866a793b643e69ad4b64460323da86f18f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Http; 
using Microsoft.AspNetCore.Authorization;
using BackendPIA.Models;

namespace BackendPIA.Policies {
    public class CorrectTokenHandler : AuthorizationHandler<CorrectTokenRequirement> {
        private readonly UserManager<UserAccount> _manager;

        public CorrectTokenHandler(UserManager<UserAccount> manager) {
            _manager = manager;
        }

        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, CorrectTokenRequirement requirement) {
            if(context.Resource is HttpContext httpContext) {
                var user = _manager.FindByEmailAsync(context.User.Claims.Where(c => c.Type.Contains("email")).First().Value).Result;

                if(user != null) {
                    string token = httpContext.Request.Headers["Authorization"].ToString().Split(' ')[1];

                    if(user.CurrentToken != null && user.CurrentToken == token)
                        context.Succeed(requirement);
                }
            }

            return Task.CompletedTask;
        }
    }
}