#oauth changed GoogleController for the jwt flow ( using a common token if we connect from our app or from google )

This commit is contained in:
Dominic Villemure
2024-06-09 23:44:37 -04:00
parent ac87aeb4c4
commit 6f76cb2084
16 changed files with 338 additions and 842 deletions

View File

@@ -0,0 +1,31 @@
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
namespace Hutopy.Infrastructure.Utils;
public static class JwtTokenHelper
{
public static string GenerateJwtToken(string issuer, string audience, string key, string userId)
{
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, userId),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, userId)
};
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: issuer,
audience: audience,
claims: claims,
expires: DateTime.Now.AddMinutes(30),
signingCredentials: credentials);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}

View File

@@ -0,0 +1,58 @@
using System.Text;
namespace Hutopy.Infrastructure.Utils;
// If we need to add special characters we can alternate between 2 pools.
public class RandomGenerator
{
// For the moment, numbers and special characters don't work because
// the random generator is designed to handle a single integer.
// We can modify this in the future.
private const string LetterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "0123456789"
+ "!@#$%^&*()_+"
+ "-=[];',./`~{}|:\"<>?";
private const int LetterIdxBits = 6;
private const int LetterIdxMask = 1 << LetterIdxBits;
private const int LetterIdxMax = 64 / LetterIdxBits;
private static readonly Random Src = new();
public static byte[] RandBytesMaskSrc(int n)
{
var b = new byte[n];
for (var i = n - 1; i >= 0;)
{
long cache = Src.NextInt64();
int remain = LetterIdxMax;
while (remain != 0)
{
if (i < 0)
break;
if (cache == 0)
cache = Src.NextInt64();
var idx = (int)(cache & LetterIdxMask);
if (idx < LetterBytes.Length)
{
b[i] = (byte)LetterBytes[idx];
i--;
}
cache >>= LetterIdxBits;
remain--;
}
}
return b;
}
public static string RandomString(int length)
{
var bytes = RandBytesMaskSrc(length);
return Encoding.UTF8.GetString(bytes); // Equivalent for *(string*)(&bytes[0])
}
}