mirror of
https://github.com/bitwarden/server.git
synced 2025-04-08 06:28:14 -05:00
stub out user repo for postgresql
This commit is contained in:
parent
84800da1fb
commit
acef40ee82
@ -15,7 +15,8 @@ namespace Bit.Core
|
|||||||
public virtual bool DisableUserRegistration { get; set; }
|
public virtual bool DisableUserRegistration { get; set; }
|
||||||
public virtual InstallationSettings Installation { get; set; } = new InstallationSettings();
|
public virtual InstallationSettings Installation { get; set; } = new InstallationSettings();
|
||||||
public virtual BaseServiceUriSettings BaseServiceUri { get; set; } = new BaseServiceUriSettings();
|
public virtual BaseServiceUriSettings BaseServiceUri { get; set; } = new BaseServiceUriSettings();
|
||||||
public virtual SqlServerSettings SqlServer { get; set; } = new SqlServerSettings();
|
public virtual SqlSettings SqlServer { get; set; } = new SqlSettings();
|
||||||
|
public virtual SqlSettings PostgreSql { get; set; } = new SqlSettings();
|
||||||
public virtual MailSettings Mail { get; set; } = new MailSettings();
|
public virtual MailSettings Mail { get; set; } = new MailSettings();
|
||||||
public virtual StorageSettings Storage { get; set; } = new StorageSettings();
|
public virtual StorageSettings Storage { get; set; } = new StorageSettings();
|
||||||
public virtual StorageSettings Events { get; set; } = new StorageSettings();
|
public virtual StorageSettings Events { get; set; } = new StorageSettings();
|
||||||
@ -45,7 +46,7 @@ namespace Bit.Core
|
|||||||
public string InternalVault { get; set; }
|
public string InternalVault { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SqlServerSettings
|
public class SqlSettings
|
||||||
{
|
{
|
||||||
private string _connectionString;
|
private string _connectionString;
|
||||||
private string _readOnlyConnectionString;
|
private string _readOnlyConnectionString;
|
||||||
|
@ -12,7 +12,7 @@ namespace Bit.Core.Repositories.PostgreSql
|
|||||||
where TId : IEquatable<TId>
|
where TId : IEquatable<TId>
|
||||||
where T : class, ITableObject<TId>
|
where T : class, ITableObject<TId>
|
||||||
{
|
{
|
||||||
public Repository(string connectionString, string readOnlyConnectionString, string table)
|
public Repository(string connectionString, string readOnlyConnectionString, string table = null)
|
||||||
: base(connectionString, readOnlyConnectionString)
|
: base(connectionString, readOnlyConnectionString)
|
||||||
{
|
{
|
||||||
if(!string.IsNullOrWhiteSpace(table))
|
if(!string.IsNullOrWhiteSpace(table))
|
||||||
@ -21,7 +21,7 @@ namespace Bit.Core.Repositories.PostgreSql
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Table = SnakeCase(typeof(T).Name);
|
Table = SnakeCase(typeof(T).Name).ToLowerInvariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
159
src/Core/Repositories/PostgreSql/UserRepository.cs
Normal file
159
src/Core/Repositories/PostgreSql/UserRepository.cs
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.Core.Models.Data;
|
||||||
|
using Bit.Core.Models.Table;
|
||||||
|
using Dapper;
|
||||||
|
using Npgsql;
|
||||||
|
|
||||||
|
namespace Bit.Core.Repositories.PostgreSql
|
||||||
|
{
|
||||||
|
public class UserRepository : Repository<User, Guid>, IUserRepository
|
||||||
|
{
|
||||||
|
public UserRepository(GlobalSettings globalSettings)
|
||||||
|
: this(globalSettings.PostgreSql.ConnectionString, globalSettings.PostgreSql.ReadOnlyConnectionString)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public UserRepository(string connectionString, string readOnlyConnectionString)
|
||||||
|
: base(connectionString, readOnlyConnectionString)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public override async Task<User> GetByIdAsync(Guid id)
|
||||||
|
{
|
||||||
|
return await base.GetByIdAsync(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<User> GetByEmailAsync(string email)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<User>(
|
||||||
|
"user_read_by_email",
|
||||||
|
new { email = email },
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
|
return results.SingleOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<UserKdfInformation> GetKdfInformationByEmailAsync(string email)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<UserKdfInformation>(
|
||||||
|
"user_read_kdf_by_email",
|
||||||
|
new { email = email },
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
|
return results.SingleOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ICollection<User>> SearchAsync(string email, int skip, int take)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ReadOnlyConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<User>(
|
||||||
|
"user_search",
|
||||||
|
new { email = email, skip = skip, take = take },
|
||||||
|
commandType: CommandType.StoredProcedure,
|
||||||
|
commandTimeout: 120);
|
||||||
|
|
||||||
|
return results.ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ICollection<User>> GetManyByPremiumAsync(bool premium)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<User>(
|
||||||
|
"user_read_by_premium",
|
||||||
|
new { premium = premium },
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
|
return results.ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ICollection<User>> GetManyByPremiumRenewalAsync()
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<User>(
|
||||||
|
"user_read_by_premium_renewal",
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
|
return results.ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> GetPublicKeyAsync(Guid id)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<string>(
|
||||||
|
"user_read_public_key_by_id",
|
||||||
|
new { id = id },
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
|
return results.SingleOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<DateTime> GetAccountRevisionDateAsync(Guid id)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
var results = await connection.QueryAsync<DateTime>(
|
||||||
|
"user_read_account_revision_date_by_id",
|
||||||
|
new { id = id },
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
|
return results.SingleOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task ReplaceAsync(User user)
|
||||||
|
{
|
||||||
|
await base.ReplaceAsync(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override async Task DeleteAsync(User user)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
await connection.ExecuteAsync(
|
||||||
|
$"user_delete_by_id",
|
||||||
|
new { id = user.Id },
|
||||||
|
commandType: CommandType.StoredProcedure,
|
||||||
|
commandTimeout: 180);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task UpdateStorageAsync(Guid id)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
await connection.ExecuteAsync(
|
||||||
|
"user_update_storage",
|
||||||
|
new { id = id },
|
||||||
|
commandType: CommandType.StoredProcedure,
|
||||||
|
commandTimeout: 180);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task UpdateRenewalReminderDateAsync(Guid id, DateTime renewalReminderDate)
|
||||||
|
{
|
||||||
|
using(var connection = new NpgsqlConnection(ConnectionString))
|
||||||
|
{
|
||||||
|
await connection.ExecuteAsync(
|
||||||
|
"user_update_renewal_reminder_date",
|
||||||
|
new { id = id, renewal_reminder_date = renewalReminderDate },
|
||||||
|
commandType: CommandType.StoredProcedure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -19,6 +19,7 @@ using Microsoft.WindowsAzure.Storage;
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using SqlServerRepos = Bit.Core.Repositories.SqlServer;
|
using SqlServerRepos = Bit.Core.Repositories.SqlServer;
|
||||||
|
using PostgreSqlRepos = Bit.Core.Repositories.PostgreSql;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using TableStorageRepos = Bit.Core.Repositories.TableStorage;
|
using TableStorageRepos = Bit.Core.Repositories.TableStorage;
|
||||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
@ -32,19 +33,26 @@ namespace Bit.Core.Utilities
|
|||||||
{
|
{
|
||||||
public static void AddSqlServerRepositories(this IServiceCollection services, GlobalSettings globalSettings)
|
public static void AddSqlServerRepositories(this IServiceCollection services, GlobalSettings globalSettings)
|
||||||
{
|
{
|
||||||
services.AddSingleton<IUserRepository, SqlServerRepos.UserRepository>();
|
if(!string.IsNullOrWhiteSpace(globalSettings.PostgreSql?.ConnectionString))
|
||||||
services.AddSingleton<ICipherRepository, SqlServerRepos.CipherRepository>();
|
{
|
||||||
services.AddSingleton<IDeviceRepository, SqlServerRepos.DeviceRepository>();
|
services.AddSingleton<IUserRepository, PostgreSqlRepos.UserRepository>();
|
||||||
services.AddSingleton<IGrantRepository, SqlServerRepos.GrantRepository>();
|
}
|
||||||
services.AddSingleton<IOrganizationRepository, SqlServerRepos.OrganizationRepository>();
|
else
|
||||||
services.AddSingleton<IOrganizationUserRepository, SqlServerRepos.OrganizationUserRepository>();
|
{
|
||||||
services.AddSingleton<ICollectionRepository, SqlServerRepos.CollectionRepository>();
|
services.AddSingleton<IUserRepository, SqlServerRepos.UserRepository>();
|
||||||
services.AddSingleton<IFolderRepository, SqlServerRepos.FolderRepository>();
|
services.AddSingleton<ICipherRepository, SqlServerRepos.CipherRepository>();
|
||||||
services.AddSingleton<ICollectionCipherRepository, SqlServerRepos.CollectionCipherRepository>();
|
services.AddSingleton<IDeviceRepository, SqlServerRepos.DeviceRepository>();
|
||||||
services.AddSingleton<IGroupRepository, SqlServerRepos.GroupRepository>();
|
services.AddSingleton<IGrantRepository, SqlServerRepos.GrantRepository>();
|
||||||
services.AddSingleton<IU2fRepository, SqlServerRepos.U2fRepository>();
|
services.AddSingleton<IOrganizationRepository, SqlServerRepos.OrganizationRepository>();
|
||||||
services.AddSingleton<IInstallationRepository, SqlServerRepos.InstallationRepository>();
|
services.AddSingleton<IOrganizationUserRepository, SqlServerRepos.OrganizationUserRepository>();
|
||||||
services.AddSingleton<IMaintenanceRepository, SqlServerRepos.MaintenanceRepository>();
|
services.AddSingleton<ICollectionRepository, SqlServerRepos.CollectionRepository>();
|
||||||
|
services.AddSingleton<IFolderRepository, SqlServerRepos.FolderRepository>();
|
||||||
|
services.AddSingleton<ICollectionCipherRepository, SqlServerRepos.CollectionCipherRepository>();
|
||||||
|
services.AddSingleton<IGroupRepository, SqlServerRepos.GroupRepository>();
|
||||||
|
services.AddSingleton<IU2fRepository, SqlServerRepos.U2fRepository>();
|
||||||
|
services.AddSingleton<IInstallationRepository, SqlServerRepos.InstallationRepository>();
|
||||||
|
services.AddSingleton<IMaintenanceRepository, SqlServerRepos.MaintenanceRepository>();
|
||||||
|
}
|
||||||
|
|
||||||
if(globalSettings.SelfHosted)
|
if(globalSettings.SelfHosted)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user