mirror of
https://github.com/bitwarden/server.git
synced 2026-02-01 14:43:10 +08:00
* [PM-1188] add sso project to auth * [PM-1188] move sso api models to auth * [PM-1188] fix sso api model namespace & imports * [PM-1188] move core files to auth * [PM-1188] fix core sso namespace & models * [PM-1188] move sso repository files to auth * [PM-1188] fix sso repo files namespace & imports * [PM-1188] move sso sql files to auth folder * [PM-1188] move sso test files to auth folders * [PM-1188] fix sso tests namespace & imports * [PM-1188] move auth api files to auth folder * [PM-1188] fix auth api files namespace & imports * [PM-1188] move auth core files to auth folder * [PM-1188] fix auth core files namespace & imports * [PM-1188] move auth email templates to auth folder * [PM-1188] move auth email folder back into shared directory * [PM-1188] fix auth email names * [PM-1188] move auth core models to auth folder * [PM-1188] fix auth model namespace & imports * [PM-1188] add entire Identity project to auth codeowners * [PM-1188] fix auth orm files namespace & imports * [PM-1188] move auth orm files to auth folder * [PM-1188] move auth sql files to auth folder * [PM-1188] move auth tests to auth folder * [PM-1188] fix auth test files namespace & imports * [PM-1188] move emergency access api files to auth folder * [PM-1188] fix emergencyaccess api files namespace & imports * [PM-1188] move emergency access core files to auth folder * [PM-1188] fix emergency access core files namespace & imports * [PM-1188] move emergency access orm files to auth folder * [PM-1188] fix emergency access orm files namespace & imports * [PM-1188] move emergency access sql files to auth folder * [PM-1188] move emergencyaccess test files to auth folder * [PM-1188] fix emergency access test files namespace & imports * [PM-1188] move captcha files to auth folder * [PM-1188] fix captcha files namespace & imports * [PM-1188] move auth admin files into auth folder * [PM-1188] fix admin auth files namespace & imports - configure mvc to look in auth folders for views * [PM-1188] remove extra imports and formatting * [PM-1188] fix ef auth model imports * [PM-1188] fix DatabaseContextModelSnapshot paths * [PM-1188] fix grant import in ef * [PM-1188] update sqlproj * [PM-1188] move missed sqlproj files * [PM-1188] move auth ef models out of auth folder * [PM-1188] fix auth ef models namespace * [PM-1188] remove auth ef models unused imports * [PM-1188] fix imports for auth ef models * [PM-1188] fix more ef model imports * [PM-1188] fix file encodings
139 lines
6.0 KiB
C#
139 lines
6.0 KiB
C#
using Bit.Core.Auth.Enums;
|
|
using Bit.Core.Enums;
|
|
using Bit.Core.Enums.Provider;
|
|
using Bit.Infrastructure.EntityFramework.Repositories.Queries;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Bit.Infrastructure.EntityFramework.Repositories;
|
|
|
|
public static class DatabaseContextExtensions
|
|
{
|
|
public static async Task UserBumpAccountRevisionDateAsync(this DatabaseContext context, Guid userId)
|
|
{
|
|
var user = await context.Users.FindAsync(userId);
|
|
user.AccountRevisionDate = DateTime.UtcNow;
|
|
}
|
|
|
|
public static async Task UserBumpManyAccountRevisionDatesAsync(this DatabaseContext context, ICollection<Guid> userIds)
|
|
{
|
|
var users = context.Users.Where(u => userIds.Contains(u.Id));
|
|
var currentTime = DateTime.UtcNow;
|
|
await users.ForEachAsync(u =>
|
|
{
|
|
context.Attach(u);
|
|
u.AccountRevisionDate = currentTime;
|
|
});
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByOrganizationIdAsync(this DatabaseContext context, Guid organizationId)
|
|
{
|
|
var users = await (from u in context.Users
|
|
join ou in context.OrganizationUsers on u.Id equals ou.UserId
|
|
where ou.OrganizationId == organizationId && ou.Status == OrganizationUserStatusType.Confirmed
|
|
select u).ToListAsync();
|
|
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByCipherIdAsync(this DatabaseContext context, Guid cipherId, Guid organizationId)
|
|
{
|
|
var query = new UserBumpAccountRevisionDateByCipherIdQuery(cipherId, organizationId);
|
|
var users = await query.Run(context).ToListAsync();
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByCollectionIdAsync(this DatabaseContext context, Guid collectionId, Guid organizationId)
|
|
{
|
|
var query = from u in context.Users
|
|
join ou in context.OrganizationUsers
|
|
on u.Id equals ou.UserId
|
|
join cu in context.CollectionUsers
|
|
on new { ou.AccessAll, OrganizationUserId = ou.Id, CollectionId = collectionId } equals
|
|
new { AccessAll = false, cu.OrganizationUserId, cu.CollectionId } into cu_g
|
|
from cu in cu_g.DefaultIfEmpty()
|
|
join gu in context.GroupUsers
|
|
on new { CollectionId = (Guid?)cu.CollectionId, ou.AccessAll, OrganizationUserId = ou.Id } equals
|
|
new { CollectionId = (Guid?)null, AccessAll = false, gu.OrganizationUserId } into gu_g
|
|
from gu in gu_g.DefaultIfEmpty()
|
|
join g in context.Groups
|
|
on gu.GroupId equals g.Id into g_g
|
|
from g in g_g.DefaultIfEmpty()
|
|
join cg in context.CollectionGroups
|
|
on new { g.AccessAll, gu.GroupId, CollectionId = collectionId } equals
|
|
new { AccessAll = false, cg.GroupId, cg.CollectionId } into cg_g
|
|
from cg in cg_g.DefaultIfEmpty()
|
|
where ou.OrganizationId == organizationId &&
|
|
ou.Status == OrganizationUserStatusType.Confirmed &&
|
|
cg.CollectionId != null &&
|
|
ou.AccessAll == true &&
|
|
g.AccessAll == true
|
|
select u;
|
|
|
|
var users = await query.ToListAsync();
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByOrganizationUserIdAsync(this DatabaseContext context, Guid organizationUserId)
|
|
{
|
|
var query = from u in context.Users
|
|
join ou in context.OrganizationUsers
|
|
on u.Id equals ou.UserId
|
|
where ou.Id == organizationUserId && ou.Status == OrganizationUserStatusType.Confirmed
|
|
select u;
|
|
|
|
var users = await query.ToListAsync();
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByOrganizationUserIdsAsync(this DatabaseContext context, IEnumerable<Guid> organizationUserIds)
|
|
{
|
|
foreach (var organizationUserId in organizationUserIds)
|
|
{
|
|
await context.UserBumpAccountRevisionDateByOrganizationUserIdAsync(organizationUserId);
|
|
}
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByEmergencyAccessGranteeIdAsync(this DatabaseContext context, Guid emergencyAccessId)
|
|
{
|
|
var query = from u in context.Users
|
|
join ea in context.EmergencyAccesses on u.Id equals ea.GranteeId
|
|
where ea.Id == emergencyAccessId && ea.Status == EmergencyAccessStatusType.Confirmed
|
|
select u;
|
|
|
|
var users = await query.ToListAsync();
|
|
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByProviderIdAsync(this DatabaseContext context, Guid providerId)
|
|
{
|
|
var query = from u in context.Users
|
|
join pu in context.ProviderUsers on u.Id equals pu.UserId
|
|
where pu.ProviderId == providerId && pu.Status == ProviderUserStatusType.Confirmed
|
|
select u;
|
|
|
|
var users = await query.ToListAsync();
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
public static async Task UserBumpAccountRevisionDateByProviderUserIdAsync(this DatabaseContext context, Guid providerUserId)
|
|
{
|
|
var query = from u in context.Users
|
|
join pu in context.ProviderUsers on u.Id equals pu.UserId
|
|
where pu.ProviderId == providerUserId && pu.Status == ProviderUserStatusType.Confirmed
|
|
select u;
|
|
|
|
var users = await query.ToListAsync();
|
|
UpdateUserRevisionDate(users);
|
|
}
|
|
|
|
private static void UpdateUserRevisionDate(List<Models.User> users)
|
|
{
|
|
var time = DateTime.UtcNow;
|
|
foreach (var user in users)
|
|
{
|
|
user.AccountRevisionDate = time;
|
|
}
|
|
}
|
|
}
|