Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/BabyTracker.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

<ItemGroup>
<PackageReference Include="Auth0.AuthenticationApi" Version="7.45.1" />
<PackageReference Include="Auth0.ManagementApi" Version="7.46.0" />
<PackageReference Include="Auth0Net.DependencyInjection" Version="5.2.1" />
<PackageReference Include="Auth0.ManagementApi" Version="8.0.0" />
<PackageReference Include="Auth0Net.DependencyInjection" Version="6.0.0" />
<PackageReference Include="linq2db" Version="6.2.1" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.5" />
<PackageReference Include="Mjml.Net" Version="4.11.0" />
Expand Down
3 changes: 1 addition & 2 deletions src/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@
});

builder.Services
.AddAuth0ManagementClient()
.AddManagementAccessToken();
.AddAuth0ManagementClient();

builder.Services
.AddScoped<IAccountService, AccountService>()
Expand Down
6 changes: 3 additions & 3 deletions src/Repositories/EmailRepository.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System;
using System.Threading.Tasks;
using Auth0.ManagementApi.Models;
using Auth0.ManagementApi;
using BabyTracker.Services;
using Microsoft.Extensions.Configuration;
using Mjml.Net;
Expand All @@ -10,12 +10,12 @@ namespace BabyTracker.Repositories;

public interface IEmailRepository
{
Task<bool> SendEmail(string mjml, User user, string userId, string babyName);
Task<bool> SendEmail(string mjml, UserResponseSchema user, string userId, string babyName);
}

public class EmailRepository(IConfiguration configuration) : IEmailRepository
{
public async Task<bool> SendEmail(string mjml, User user, string userId, string babyName)
public async Task<bool> SendEmail(string mjml, UserResponseSchema user, string userId, string babyName)
{
var userMetaData = AccountService.GetUserMetaData(user);

Expand Down
79 changes: 32 additions & 47 deletions src/Services/AccountService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,15 @@
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text.Json;
using System.Threading.Tasks;
using Auth0.AuthenticationApi;
using Auth0.AuthenticationApi.Models;
using Auth0.ManagementApi;
using Auth0.ManagementApi.Models;
using Auth0.ManagementApi.Paging;
using BabyTracker.Models.Account;
using BabyTracker.Models.ViewModels;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json.Linq;

namespace BabyTracker.Services;

Expand All @@ -26,7 +24,7 @@ public interface IAccountService

Task<bool> SaveUserMetaData(ClaimsPrincipal user, UserMetaData userMetaData);

Task<List<User>?> SearchUsersWithEnableMemoriesEmail();
Task<List<UserResponseSchema>?> SearchUsersWithEnableMemoriesEmail();

Task<string> ResetPassword(LoginViewModel model);
}
Expand Down Expand Up @@ -106,76 +104,63 @@ public async Task<string> ResetPassword(LoginViewModel model)
{
var userId = user.FindFirst(ClaimTypes.NameIdentifier)?.Value;

var clientUser = await managementApiClient.Users.GetAsync(userId);
var clientUser = await managementApiClient.Users.GetAsync(userId, new());

return GetUserMetaData(clientUser);
}

public static UserMetaData? GetUserMetaData(User user)
public static UserMetaData? GetUserMetaData(GetUserResponseContent user)
{
if (user.UserMetadata is not JObject userMetaDataObject)
{
return null;
}
var json = JsonSerializer.Serialize(user.UserMetadata);
return JsonSerializer.Deserialize<UserMetaData>(json);
}

return userMetaDataObject.ToObject<UserMetaData>();
public static UserMetaData? GetUserMetaData(UserResponseSchema user)
{
var json = JsonSerializer.Serialize(user.UserMetadata);
return JsonSerializer.Deserialize<UserMetaData>(json);
}

public async Task<bool> SaveUserMetaData(ClaimsPrincipal user, UserMetaData userMetaData)
{
var userId = user.FindFirst(ClaimTypes.NameIdentifier)?.Value;

var json = JsonSerializer.Serialize(userMetaData);
var dict = JsonSerializer.Deserialize<Dictionary<string, object?>>(json);

await managementApiClient.Users.UpdateAsync(userId, new()
{
UserMetadata = userMetaData
UserMetadata = dict
});

return true;
}

public async Task<List<User>?> SearchUsersWithEnableMemoriesEmail()
{
var users = new List<User>();

var pageNo = 0;

IPagedList<User> page;

do
{
page = await managementApiClient.Users.GetAllAsync(
new() { Query = "user_metadata.EnableMemoriesEmail:true" },
new(pageNo)
);

users.AddRange(page);

pageNo++;
} while (page.Paging != null && page.Paging.Length == page.Paging.Limit);
public async Task<List<UserResponseSchema>?> SearchUsersWithEnableMemoriesEmail()
=> await QueryUsers("user_metadata.EnableMemoriesEmail:true");

return users;
private async Task<UserResponseSchema?> SearchUsersWithShareList(string emailAddress)
{
var users = await QueryUsers($"user_metadata.ShareList:{emailAddress}");
return users?.FirstOrDefault();
}

private async Task<User?> SearchUsersWithShareList(string emailAddress)
private async Task<List<UserResponseSchema>?> QueryUsers(string query)
{
var users = new List<User>();
var users = new List<UserResponseSchema>();

var pageNo = 0;

IPagedList<User> page;

do
var request = new ListUsersRequestParameters
{
page = await managementApiClient.Users.GetAllAsync(
new() { Query = $"user_metadata.ShareList:{emailAddress}" },
new(pageNo)
);
Q = query
};

users.AddRange(page);
var pager = await managementApiClient.Users.ListAsync(request);

pageNo++;
} while (page.Paging != null && page.Paging.Length == page.Paging.Limit);
await foreach (var user in pager)
{
users.Add(user);
}

return users.FirstOrDefault();
return users;
}
}