public async Task <JwtForClientDto> CreateJwtForClient(string responseString, int?referralCode) { var userFrom0Auth = JsonConvert.DeserializeObject <UserFromAuth0Dto>(responseString); var userFromGoogle0Auth = _mapper.Map <User>(userFrom0Auth); if (!await _repo.UserExists(userFromGoogle0Auth.Email)) { var newUser = userFromGoogle0Auth; newUser.QRCodeUrl = await _qRCodeGeneration.CreateQrCode(newUser.Id.ToString()); newUser.Role = Constants.Roles[0]; newUser = await _repo.Register(newUser); int referral = referralCode ?? default(int); if (referralCode != null) { await _ambRepo.ApplyReferralCode(newUser.Id, referral); } } User user = await _repo.GetUser(userFromGoogle0Auth.Email); var jwtForClient = new JwtForClientDto(); var jwtKey = Encoding.ASCII.GetBytes(_env.AccessToken); jwtForClient.AccessToken = CreateAccessTokenFromUser(user, jwtKey); var claims = new List <Claim>() { new Claim("user_id", user.Id.ToString()), new Claim("email", user.Email) }; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_env.RefreshToken)); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), Expires = DateTime.Now.AddYears(1), SigningCredentials = creds, Issuer = _env.Issuer }; var tokenHandler = new JwtSecurityTokenHandler(); var token = tokenHandler.CreateToken(tokenDescriptor); jwtForClient.RefreshToken = tokenHandler.WriteToken(token); return(jwtForClient); }
public async Task <ActionResult <User> > ApplyReferralCode(DataForApplyingReferralCodeDto data) { var id = int.Parse(User.Claims.First(i => i.Type == "user_id").Value); return(Ok(await _repo.ApplyReferralCode(id, data.referralCode))); }