mirror of
https://github.com/bitwarden/server.git
synced 2025-04-06 21:48:12 -05:00
organization signup apis and data model changes
This commit is contained in:
parent
b18b6a44ef
commit
29e3605576
@ -15,18 +15,24 @@ namespace Bit.Api.Controllers
|
|||||||
public class OrganizationsController : Controller
|
public class OrganizationsController : Controller
|
||||||
{
|
{
|
||||||
private readonly IOrganizationRepository _organizationRepository;
|
private readonly IOrganizationRepository _organizationRepository;
|
||||||
|
private readonly IOrganizationUserRepository _organizationUserRepository;
|
||||||
|
private readonly IOrganizationService _organizationService;
|
||||||
private readonly IUserService _userService;
|
private readonly IUserService _userService;
|
||||||
|
|
||||||
public OrganizationsController(
|
public OrganizationsController(
|
||||||
IOrganizationRepository organizationRepository,
|
IOrganizationRepository organizationRepository,
|
||||||
|
IOrganizationUserRepository organizationUserRepository,
|
||||||
|
IOrganizationService organizationService,
|
||||||
IUserService userService)
|
IUserService userService)
|
||||||
{
|
{
|
||||||
_organizationRepository = organizationRepository;
|
_organizationRepository = organizationRepository;
|
||||||
|
_organizationUserRepository = organizationUserRepository;
|
||||||
|
_organizationService = organizationService;
|
||||||
_userService = userService;
|
_userService = userService;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public async Task<OrganizationResponseModel> Get(string id)
|
public async Task<OrganizationExtendedResponseModel> Get(string id)
|
||||||
{
|
{
|
||||||
var userId = _userService.GetProperUserId(User).Value;
|
var userId = _userService.GetProperUserId(User).Value;
|
||||||
var organization = await _organizationRepository.GetByIdAsync(new Guid(id), userId);
|
var organization = await _organizationRepository.GetByIdAsync(new Guid(id), userId);
|
||||||
@ -35,7 +41,13 @@ namespace Bit.Api.Controllers
|
|||||||
throw new NotFoundException();
|
throw new NotFoundException();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new OrganizationResponseModel(organization);
|
var organizationUser = await _organizationUserRepository.GetByOrganizationAsync(new Guid(id), userId);
|
||||||
|
if(organizationUser == null)
|
||||||
|
{
|
||||||
|
throw new NotFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new OrganizationExtendedResponseModel(organization, organizationUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("")]
|
[HttpGet("")]
|
||||||
@ -48,12 +60,12 @@ namespace Bit.Api.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("")]
|
[HttpPost("")]
|
||||||
public async Task<OrganizationResponseModel> Post([FromBody]OrganizationCreateRequestModel model)
|
public async Task<OrganizationExtendedResponseModel> Post([FromBody]OrganizationCreateRequestModel model)
|
||||||
{
|
{
|
||||||
var userId = _userService.GetProperUserId(User).Value;
|
var user = await _userService.GetUserByPrincipalAsync(User);
|
||||||
var organization = model.ToOrganization(_userService.GetProperUserId(User).Value);
|
var organizationSignup = model.ToOrganizationSignup(user);
|
||||||
await _organizationRepository.ReplaceAsync(organization);
|
var result = await _organizationService.SignUpAsync(organizationSignup);
|
||||||
return new OrganizationResponseModel(organization);
|
return new OrganizationExtendedResponseModel(result.Item1, result.Item2);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPut("{id}")]
|
[HttpPut("{id}")]
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using Bit.Core.Domains;
|
using Bit.Core.Domains;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.Business;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace Bit.Api.Models
|
namespace Bit.Api.Models
|
||||||
@ -7,19 +8,18 @@ namespace Bit.Api.Models
|
|||||||
public class OrganizationCreateRequestModel
|
public class OrganizationCreateRequestModel
|
||||||
{
|
{
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public PlanType Plan { get; set; }
|
public PlanType PlanType { get; set; }
|
||||||
// TODO: Billing info for paid plans.
|
public string Key { get; set; }
|
||||||
|
|
||||||
public virtual Organization ToOrganization(Guid userId)
|
public virtual OrganizationSignup ToOrganizationSignup(User user)
|
||||||
{
|
{
|
||||||
var organization = new Organization
|
return new OrganizationSignup
|
||||||
{
|
{
|
||||||
UserId = userId,
|
Owner = user,
|
||||||
|
OwnerKey = Key,
|
||||||
Name = Name,
|
Name = Name,
|
||||||
Plan = Plan
|
Plan = PlanType
|
||||||
};
|
};
|
||||||
|
|
||||||
return organization;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ namespace Bit.Api.Models
|
|||||||
JsonConvert.DeserializeObject<List<GlobalEquivalentDomainsType>>(user.ExcludedGlobalEquivalentDomains) :
|
JsonConvert.DeserializeObject<List<GlobalEquivalentDomainsType>>(user.ExcludedGlobalEquivalentDomains) :
|
||||||
new List<GlobalEquivalentDomainsType>();
|
new List<GlobalEquivalentDomainsType>();
|
||||||
var globalDomains = new List<GlobalDomains>();
|
var globalDomains = new List<GlobalDomains>();
|
||||||
var domainsToInclude = excluded ? Core.Utilities.EquivalentDomains.Global :
|
var domainsToInclude = excluded ? Core.Utilities.StaticStore.GlobalDomains :
|
||||||
Core.Utilities.EquivalentDomains.Global.Where(d => !excludedGlobalEquivalentDomains.Contains(d.Key));
|
Core.Utilities.StaticStore.GlobalDomains.Where(d => !excludedGlobalEquivalentDomains.Contains(d.Key));
|
||||||
foreach(var domain in domainsToInclude)
|
foreach(var domain in domainsToInclude)
|
||||||
{
|
{
|
||||||
globalDomains.Add(new GlobalDomains(domain.Key, domain.Value, excludedGlobalEquivalentDomains, excluded));
|
globalDomains.Add(new GlobalDomains(domain.Key, domain.Value, excludedGlobalEquivalentDomains, excluded));
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using Bit.Core.Domains;
|
using Bit.Core.Domains;
|
||||||
using Bit.Core.Enums;
|
|
||||||
|
|
||||||
namespace Bit.Api.Models
|
namespace Bit.Api.Models
|
||||||
{
|
{
|
||||||
public class OrganizationResponseModel : ResponseModel
|
public class OrganizationResponseModel : ResponseModel
|
||||||
{
|
{
|
||||||
public OrganizationResponseModel(Organization organization)
|
public OrganizationResponseModel(Organization organization, string obj = "organization")
|
||||||
: base("organization")
|
: base(obj)
|
||||||
{
|
{
|
||||||
if(organization == null)
|
if(organization == null)
|
||||||
{
|
{
|
||||||
@ -17,12 +16,32 @@ namespace Bit.Api.Models
|
|||||||
Id = organization.Id.ToString();
|
Id = organization.Id.ToString();
|
||||||
Name = organization.Name;
|
Name = organization.Name;
|
||||||
Plan = organization.Plan;
|
Plan = organization.Plan;
|
||||||
|
PlanType = organization.PlanType;
|
||||||
|
PlanTrial = organization.PlanTrial;
|
||||||
MaxUsers = organization.MaxUsers;
|
MaxUsers = organization.MaxUsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public PlanType Plan { get; set; }
|
public string Plan { get; set; }
|
||||||
|
public Core.Enums.PlanType PlanType { get; set; }
|
||||||
|
public bool PlanTrial { get; set; }
|
||||||
public short MaxUsers { get; set; }
|
public short MaxUsers { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class OrganizationExtendedResponseModel : OrganizationResponseModel
|
||||||
|
{
|
||||||
|
public OrganizationExtendedResponseModel(Organization organization, OrganizationUser organizationUser)
|
||||||
|
: base(organization, "organizationExtended")
|
||||||
|
{
|
||||||
|
if(organizationUser == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(organizationUser));
|
||||||
|
}
|
||||||
|
|
||||||
|
Key = organizationUser.Key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Key { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,6 +180,7 @@ namespace Bit.Api
|
|||||||
services.AddScoped<IPushService, PushSharpPushService>();
|
services.AddScoped<IPushService, PushSharpPushService>();
|
||||||
services.AddScoped<IDeviceService, DeviceService>();
|
services.AddScoped<IDeviceService, DeviceService>();
|
||||||
services.AddScoped<IBlockIpService, AzureQueueBlockIpService>();
|
services.AddScoped<IBlockIpService, AzureQueueBlockIpService>();
|
||||||
|
services.AddScoped<IOrganizationService, OrganizationService>();
|
||||||
|
|
||||||
// Cors
|
// Cors
|
||||||
services.AddCors(config =>
|
services.AddCors(config =>
|
||||||
|
@ -9,7 +9,12 @@ namespace Bit.Core.Domains
|
|||||||
public Guid Id { get; set; }
|
public Guid Id { get; set; }
|
||||||
public Guid UserId { get; set; }
|
public Guid UserId { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public PlanType Plan { get; set; }
|
public string Plan { get; set; }
|
||||||
|
public PlanType PlanType { get; set; }
|
||||||
|
public decimal PlanPrice { get; set; }
|
||||||
|
public decimal PlanRenewalPrice { get; set; }
|
||||||
|
public DateTime? PlanRenewalDate { get; set; }
|
||||||
|
public bool PlanTrial { get; set; }
|
||||||
public short MaxUsers { get; set; }
|
public short MaxUsers { get; set; }
|
||||||
public DateTime CreationDate { get; internal set; } = DateTime.UtcNow;
|
public DateTime CreationDate { get; internal set; } = DateTime.UtcNow;
|
||||||
public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow;
|
public DateTime RevisionDate { get; internal set; } = DateTime.UtcNow;
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
Free = 0,
|
Free = 0,
|
||||||
Family = 1,
|
Family = 1,
|
||||||
Teams = 2,
|
Teams = 2,
|
||||||
Enterprise = 3
|
Enterprise = 3,
|
||||||
|
Custom = 4
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
20
src/Core/Models/Business/OrganizationSignup.cs
Normal file
20
src/Core/Models/Business/OrganizationSignup.cs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
using Bit.Core.Domains;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.Business
|
||||||
|
{
|
||||||
|
public class OrganizationSignup
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public User Owner { get; set; }
|
||||||
|
public string OwnerKey { get; set; }
|
||||||
|
public Enums.PlanType Plan { get; set; }
|
||||||
|
public PaymentDetails Payment { get; set; }
|
||||||
|
|
||||||
|
public class PaymentDetails
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Token { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
src/Core/Models/StaticStore/Plan.cs
Normal file
15
src/Core/Models/StaticStore/Plan.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using Bit.Core.Enums;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Bit.Core.Models.StaticStore
|
||||||
|
{
|
||||||
|
public class Plan
|
||||||
|
{
|
||||||
|
public PlanType Type { get; set; }
|
||||||
|
public short MaxUsers { get; set; }
|
||||||
|
public decimal Price { get; set; }
|
||||||
|
public TimeSpan? Trial { get; set; }
|
||||||
|
public Func<TimeSpan> Cycle { get; set; }
|
||||||
|
public bool Disabled { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -7,6 +7,6 @@ namespace Bit.Core.Repositories
|
|||||||
{
|
{
|
||||||
public interface IOrganizationUserRepository : IRepository<OrganizationUser, Guid>
|
public interface IOrganizationUserRepository : IRepository<OrganizationUser, Guid>
|
||||||
{
|
{
|
||||||
Task<OrganizationUser> GetByIdAsync(Guid id, Guid userId);
|
Task<OrganizationUser> GetByOrganizationAsync(Guid organizationId, Guid userId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,13 +18,13 @@ namespace Bit.Core.Repositories.SqlServer
|
|||||||
: base(connectionString)
|
: base(connectionString)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
public async Task<OrganizationUser> GetByIdAsync(Guid id, Guid userId)
|
public async Task<OrganizationUser> GetByOrganizationAsync(Guid organizationId, Guid userId)
|
||||||
{
|
{
|
||||||
using(var connection = new SqlConnection(ConnectionString))
|
using(var connection = new SqlConnection(ConnectionString))
|
||||||
{
|
{
|
||||||
var results = await connection.QueryAsync<OrganizationUser>(
|
var results = await connection.QueryAsync<OrganizationUser>(
|
||||||
"[dbo].[OrganizationUser_ReadByIdUserId]",
|
"[dbo].[OrganizationUser_ReadByIdUserId]",
|
||||||
new { Id = id, UserId = userId },
|
new { OrganizationId = organizationId, UserId = userId },
|
||||||
commandType: CommandType.StoredProcedure);
|
commandType: CommandType.StoredProcedure);
|
||||||
|
|
||||||
return results.SingleOrDefault();
|
return results.SingleOrDefault();
|
||||||
|
12
src/Core/Services/IOrganizationService.cs
Normal file
12
src/Core/Services/IOrganizationService.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.Core.Models.Business;
|
||||||
|
using Bit.Core.Domains;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Bit.Core.Services
|
||||||
|
{
|
||||||
|
public interface IOrganizationService
|
||||||
|
{
|
||||||
|
Task<Tuple<Organization, OrganizationUser>> SignUpAsync(OrganizationSignup organizationSignup);
|
||||||
|
}
|
||||||
|
}
|
83
src/Core/Services/Implementations/OrganizationService.cs
Normal file
83
src/Core/Services/Implementations/OrganizationService.cs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Bit.Core.Repositories;
|
||||||
|
using Bit.Core.Models.Business;
|
||||||
|
using Bit.Core.Domains;
|
||||||
|
using Bit.Core.Utilities;
|
||||||
|
using Bit.Core.Exceptions;
|
||||||
|
|
||||||
|
namespace Bit.Core.Services
|
||||||
|
{
|
||||||
|
public class OrganizationService : IOrganizationService
|
||||||
|
{
|
||||||
|
private readonly IOrganizationRepository _organizationRepository;
|
||||||
|
private readonly IOrganizationUserRepository _organizationUserRepository;
|
||||||
|
|
||||||
|
public OrganizationService(
|
||||||
|
IOrganizationRepository organizationRepository,
|
||||||
|
IOrganizationUserRepository organizationUserRepository)
|
||||||
|
{
|
||||||
|
_organizationRepository = organizationRepository;
|
||||||
|
_organizationUserRepository = organizationUserRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<Tuple<Organization, OrganizationUser>> SignUpAsync(OrganizationSignup organizationSignup)
|
||||||
|
{
|
||||||
|
var plan = StaticStore.Plans.FirstOrDefault(p => p.Type == organizationSignup.Plan);
|
||||||
|
if(plan == null)
|
||||||
|
{
|
||||||
|
throw new BadRequestException("Plan not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var organization = new Organization
|
||||||
|
{
|
||||||
|
Name = organizationSignup.Name,
|
||||||
|
UserId = organizationSignup.Owner.Id,
|
||||||
|
PlanType = plan.Type,
|
||||||
|
MaxUsers = plan.MaxUsers,
|
||||||
|
PlanTrial = plan.Trial.HasValue,
|
||||||
|
PlanPrice = plan.Trial.HasValue ? 0 : plan.Price,
|
||||||
|
PlanRenewalPrice = plan.Price,
|
||||||
|
Plan = plan.ToString(),
|
||||||
|
CreationDate = DateTime.UtcNow,
|
||||||
|
RevisionDate = DateTime.UtcNow
|
||||||
|
};
|
||||||
|
|
||||||
|
if(plan.Trial.HasValue)
|
||||||
|
{
|
||||||
|
organization.PlanRenewalDate = DateTime.UtcNow.Add(plan.Trial.Value);
|
||||||
|
}
|
||||||
|
else if(plan.Cycle != null)
|
||||||
|
{
|
||||||
|
organization.PlanRenewalDate = DateTime.UtcNow.Add(plan.Cycle());
|
||||||
|
}
|
||||||
|
|
||||||
|
await _organizationRepository.CreateAsync(organization);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var orgUser = new OrganizationUser
|
||||||
|
{
|
||||||
|
OrganizationId = organization.Id,
|
||||||
|
UserId = organizationSignup.Owner.Id,
|
||||||
|
Email = organizationSignup.Owner.Email,
|
||||||
|
Key = organizationSignup.OwnerKey,
|
||||||
|
Type = Enums.OrganizationUserType.Owner,
|
||||||
|
Status = Enums.OrganizationUserStatusType.Confirmed,
|
||||||
|
CreationDate = DateTime.UtcNow,
|
||||||
|
RevisionDate = DateTime.UtcNow
|
||||||
|
};
|
||||||
|
|
||||||
|
await _organizationUserRepository.CreateAsync(orgUser);
|
||||||
|
|
||||||
|
return new Tuple<Organization, OrganizationUser>(organization, orgUser);
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
await _organizationRepository.DeleteAsync(organization);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,88 +0,0 @@
|
|||||||
using Bit.Core.Enums;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace Bit.Core.Utilities
|
|
||||||
{
|
|
||||||
public class EquivalentDomains
|
|
||||||
{
|
|
||||||
static EquivalentDomains()
|
|
||||||
{
|
|
||||||
Global = new Dictionary<GlobalEquivalentDomainsType, IEnumerable<string>>();
|
|
||||||
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Ameritrade, new List<string> { "ameritrade.com", "tdameritrade.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.BoA, new List<string> { "bankofamerica.com", "bofa.com", "mbna.com", "usecfo.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Sprint, new List<string> { "sprint.com", "sprintpcs.com", "nextel.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Google, new List<string> { "youtube.com", "google.com", "gmail.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Apple, new List<string> { "apple.com", "icloud.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.WellsFargo, new List<string> { "wellsfargo.com", "wf.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Merrill, new List<string> { "mymerrill.com", "ml.com", "merrilledge.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Citi, new List<string> { "accountonline.com", "citi.com", "citibank.com", "citicards.com", "citibankonline.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Cnet, new List<string> { "cnet.com", "cnettv.com", "com.com", "download.com", "news.com", "search.com", "upload.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Gap, new List<string> { "bananarepublic.com", "gap.com", "oldnavy.com", "piperlime.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Microsoft, new List<string> { "bing.com", "hotmail.com", "live.com", "microsoft.com", "msn.com", "passport.net", "windows.com", "microsoftonline.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.United, new List<string> { "ua2go.com", "ual.com", "united.com", "unitedwifi.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Yahoo, new List<string> { "overture.com", "yahoo.com", "flickr.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Zonelabs, new List<string> { "zonealarm.com", "zonelabs.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Paypal, new List<string> { "paypal.com", "paypal-search.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Avon, new List<string> { "avon.com", "youravon.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Diapers, new List<string> { "diapers.com", "soap.com", "wag.com", "yoyo.com", "beautybar.com", "casa.com", "afterschool.com", "vine.com", "bookworm.com", "look.com", "vinemarket.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Contacts, new List<string> { "1800contacts.com", "800contacts.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Amazon, new List<string> { "amazon.com", "amazon.co.uk", "amazon.ca", "amazon.de", "amazon.fr", "amazon.es", "amazon.it", "amazon.com.au" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Cox, new List<string> { "cox.com", "cox.net", "coxbusiness.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Norton, new List<string> { "mynortonaccount.com", "norton.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Verizon, new List<string> { "verizon.com", "verizon.net" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Buy, new List<string> { "rakuten.com", "buy.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Sirius, new List<string> { "siriusxm.com", "sirius.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Ea, new List<string> { "ea.com", "origin.com", "play4free.com", "tiberiumalliance.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Basecamp, new List<string> { "37signals.com", "basecamp.com", "basecamphq.com", "highrisehq.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Steam, new List<string> { "steampowered.com", "steamcommunity.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Chart, new List<string> { "chart.io", "chartio.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Gotomeeting, new List<string> { "gotomeeting.com", "citrixonline.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Gogo, new List<string> { "gogoair.com", "gogoinflight.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Oracle, new List<string> { "mysql.com", "oracle.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Discover, new List<string> { "discover.com", "discovercard.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Dcu, new List<string> { "dcu.org", "dcu-online.org" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Healthcare, new List<string> { "healthcare.gov", "cms.gov" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Pepco, new List<string> { "pepco.com", "pepcoholdings.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Century21, new List<string> { "century21.com", "21online.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Comcast, new List<string> { "comcast.com", "comcast.net", "xfinity.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Cricket, new List<string> { "cricketwireless.com", "aiowireless.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Mtb, new List<string> { "mandtbank.com", "mtb.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Dropbox, new List<string> { "dropbox.com", "getdropbox.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Snapfish, new List<string> { "snapfish.com", "snapfish.ca" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Alibaba, new List<string> { "alibaba.com", "aliexpress.com", "aliyun.com", "net.cn", "www.net.cn" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Playstation, new List<string> { "playstation.com", "sonyentertainmentnetwork.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Mercado, new List<string> { "mercadolivre.com", "mercadolivre.com.br", "mercadolibre.com", "mercadolibre.com.ar", "mercadolibre.com.mx" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Zendesk, new List<string> { "zendesk.com", "zopim.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Autodesk, new List<string> { "autodesk.com", "tinkercad.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.RailNation, new List<string> { "railnation.ru", "railnation.de", "rail-nation.com", "railnation.gr", "railnation.us", "trucknation.de", "traviangames.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Wpcu, new List<string> { "wpcu.coop", "wpcuonline.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Mathletics, new List<string> { "mathletics.com", "mathletics.com.au", "mathletics.co.uk" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Discountbank, new List<string> { "discountbank.co.il", "telebank.co.il" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Mi, new List<string> { "mi.com", "xiaomi.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Postepay, new List<string> { "postepay.it", "poste.it" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Facebook, new List<string> { "facebook.com", "messenger.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Skysports, new List<string> { "skysports.com", "skybet.com", "skyvegas.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Disney, new List<string> { "disneymoviesanywhere.com", "go.com", "disney.com", "dadt.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Pokemon, new List<string> { "pokemon-gl.com", "pokemon.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Uv, new List<string> { "myuv.com", "uvvu.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Mdsol, new List<string> { "mdsol.com", "imedidata.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Yahavo, new List<string> { "bank-yahav.co.il", "bankhapoalim.co.il" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Sears, new List<string> { "sears.com", "shld.net" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Xiami, new List<string> { "xiami.com", "alipay.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Belkin, new List<string> { "belkin.com", "seedonk.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Turbotax, new List<string> { "turbotax.com", "intuit.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Shopify, new List<string> { "shopify.com", "myshopify.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Ebay, new List<string> { "ebay.com", "ebay.de", "ebay.ca", "ebay.in", "ebay.co.uk", "ebay.com.au" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Techdata, new List<string> { "techdata.com", "techdata.ch" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Schwab, new List<string> { "schwab.com", "schwabplan.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Mozilla, new List<string> { "firefox.com", "mozilla.org" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.Tesla, new List<string> { "tesla.com", "teslamotors.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.MorganStanley, new List<string> { "morganstanley.com", "morganstanleyclientserv.com", "stockplanconnect.com", "ms.com" });
|
|
||||||
Global.Add(GlobalEquivalentDomainsType.TaxAct, new List<string> { "taxact.com", "taxactonline.com" });
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IDictionary<GlobalEquivalentDomainsType, IEnumerable<string>> Global { get; set; }
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
130
src/Core/Utilities/StaticStore.cs
Normal file
130
src/Core/Utilities/StaticStore.cs
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Models.StaticStore;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Bit.Core.Utilities
|
||||||
|
{
|
||||||
|
public class StaticStore
|
||||||
|
{
|
||||||
|
static StaticStore()
|
||||||
|
{
|
||||||
|
#region Global Domains
|
||||||
|
|
||||||
|
GlobalDomains = new Dictionary<GlobalEquivalentDomainsType, IEnumerable<string>>();
|
||||||
|
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Ameritrade, new List<string> { "ameritrade.com", "tdameritrade.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.BoA, new List<string> { "bankofamerica.com", "bofa.com", "mbna.com", "usecfo.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Sprint, new List<string> { "sprint.com", "sprintpcs.com", "nextel.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Google, new List<string> { "youtube.com", "google.com", "gmail.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Apple, new List<string> { "apple.com", "icloud.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.WellsFargo, new List<string> { "wellsfargo.com", "wf.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Merrill, new List<string> { "mymerrill.com", "ml.com", "merrilledge.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Citi, new List<string> { "accountonline.com", "citi.com", "citibank.com", "citicards.com", "citibankonline.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Cnet, new List<string> { "cnet.com", "cnettv.com", "com.com", "download.com", "news.com", "search.com", "upload.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Gap, new List<string> { "bananarepublic.com", "gap.com", "oldnavy.com", "piperlime.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Microsoft, new List<string> { "bing.com", "hotmail.com", "live.com", "microsoft.com", "msn.com", "passport.net", "windows.com", "microsoftonline.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.United, new List<string> { "ua2go.com", "ual.com", "united.com", "unitedwifi.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Yahoo, new List<string> { "overture.com", "yahoo.com", "flickr.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Zonelabs, new List<string> { "zonealarm.com", "zonelabs.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Paypal, new List<string> { "paypal.com", "paypal-search.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Avon, new List<string> { "avon.com", "youravon.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Diapers, new List<string> { "diapers.com", "soap.com", "wag.com", "yoyo.com", "beautybar.com", "casa.com", "afterschool.com", "vine.com", "bookworm.com", "look.com", "vinemarket.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Contacts, new List<string> { "1800contacts.com", "800contacts.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Amazon, new List<string> { "amazon.com", "amazon.co.uk", "amazon.ca", "amazon.de", "amazon.fr", "amazon.es", "amazon.it", "amazon.com.au" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Cox, new List<string> { "cox.com", "cox.net", "coxbusiness.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Norton, new List<string> { "mynortonaccount.com", "norton.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Verizon, new List<string> { "verizon.com", "verizon.net" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Buy, new List<string> { "rakuten.com", "buy.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Sirius, new List<string> { "siriusxm.com", "sirius.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Ea, new List<string> { "ea.com", "origin.com", "play4free.com", "tiberiumalliance.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Basecamp, new List<string> { "37signals.com", "basecamp.com", "basecamphq.com", "highrisehq.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Steam, new List<string> { "steampowered.com", "steamcommunity.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Chart, new List<string> { "chart.io", "chartio.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Gotomeeting, new List<string> { "gotomeeting.com", "citrixonline.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Gogo, new List<string> { "gogoair.com", "gogoinflight.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Oracle, new List<string> { "mysql.com", "oracle.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Discover, new List<string> { "discover.com", "discovercard.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Dcu, new List<string> { "dcu.org", "dcu-online.org" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Healthcare, new List<string> { "healthcare.gov", "cms.gov" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Pepco, new List<string> { "pepco.com", "pepcoholdings.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Century21, new List<string> { "century21.com", "21online.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Comcast, new List<string> { "comcast.com", "comcast.net", "xfinity.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Cricket, new List<string> { "cricketwireless.com", "aiowireless.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Mtb, new List<string> { "mandtbank.com", "mtb.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Dropbox, new List<string> { "dropbox.com", "getdropbox.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Snapfish, new List<string> { "snapfish.com", "snapfish.ca" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Alibaba, new List<string> { "alibaba.com", "aliexpress.com", "aliyun.com", "net.cn", "www.net.cn" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Playstation, new List<string> { "playstation.com", "sonyentertainmentnetwork.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Mercado, new List<string> { "mercadolivre.com", "mercadolivre.com.br", "mercadolibre.com", "mercadolibre.com.ar", "mercadolibre.com.mx" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Zendesk, new List<string> { "zendesk.com", "zopim.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Autodesk, new List<string> { "autodesk.com", "tinkercad.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.RailNation, new List<string> { "railnation.ru", "railnation.de", "rail-nation.com", "railnation.gr", "railnation.us", "trucknation.de", "traviangames.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Wpcu, new List<string> { "wpcu.coop", "wpcuonline.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Mathletics, new List<string> { "mathletics.com", "mathletics.com.au", "mathletics.co.uk" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Discountbank, new List<string> { "discountbank.co.il", "telebank.co.il" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Mi, new List<string> { "mi.com", "xiaomi.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Postepay, new List<string> { "postepay.it", "poste.it" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Facebook, new List<string> { "facebook.com", "messenger.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Skysports, new List<string> { "skysports.com", "skybet.com", "skyvegas.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Disney, new List<string> { "disneymoviesanywhere.com", "go.com", "disney.com", "dadt.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Pokemon, new List<string> { "pokemon-gl.com", "pokemon.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Uv, new List<string> { "myuv.com", "uvvu.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Mdsol, new List<string> { "mdsol.com", "imedidata.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Yahavo, new List<string> { "bank-yahav.co.il", "bankhapoalim.co.il" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Sears, new List<string> { "sears.com", "shld.net" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Xiami, new List<string> { "xiami.com", "alipay.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Belkin, new List<string> { "belkin.com", "seedonk.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Turbotax, new List<string> { "turbotax.com", "intuit.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Shopify, new List<string> { "shopify.com", "myshopify.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Ebay, new List<string> { "ebay.com", "ebay.de", "ebay.ca", "ebay.in", "ebay.co.uk", "ebay.com.au" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Techdata, new List<string> { "techdata.com", "techdata.ch" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Schwab, new List<string> { "schwab.com", "schwabplan.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Mozilla, new List<string> { "firefox.com", "mozilla.org" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.Tesla, new List<string> { "tesla.com", "teslamotors.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.MorganStanley, new List<string> { "morganstanley.com", "morganstanleyclientserv.com", "stockplanconnect.com", "ms.com" });
|
||||||
|
GlobalDomains.Add(GlobalEquivalentDomainsType.TaxAct, new List<string> { "taxact.com", "taxactonline.com" });
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Plans
|
||||||
|
|
||||||
|
Plans = new List<Plan>
|
||||||
|
{
|
||||||
|
new Plan
|
||||||
|
{
|
||||||
|
Type = PlanType.Free,
|
||||||
|
MaxUsers = 1,
|
||||||
|
Price = 0
|
||||||
|
},
|
||||||
|
new Plan
|
||||||
|
{
|
||||||
|
Type = PlanType.Family,
|
||||||
|
MaxUsers = 5,
|
||||||
|
Price = 1,
|
||||||
|
Trial = new TimeSpan(14, 0, 0, 0),
|
||||||
|
Cycle = () => {
|
||||||
|
var now = DateTime.Now;
|
||||||
|
return now.AddYears(1) - now;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new Plan
|
||||||
|
{
|
||||||
|
Type = PlanType.Teams,
|
||||||
|
MaxUsers = 5,
|
||||||
|
Price = 10,
|
||||||
|
Trial = new TimeSpan(14, 0, 0, 0),
|
||||||
|
Cycle = () => {
|
||||||
|
var now = DateTime.Now;
|
||||||
|
return now.AddMonths(1) - now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IDictionary<GlobalEquivalentDomainsType, IEnumerable<string>> GlobalDomains { get; set; }
|
||||||
|
public static IEnumerable<Plan> Plans { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -81,6 +81,8 @@
|
|||||||
<Build Include="dbo\Views\DeviceView.sql" />
|
<Build Include="dbo\Views\DeviceView.sql" />
|
||||||
<Build Include="dbo\Views\HistoryView.sql" />
|
<Build Include="dbo\Views\HistoryView.sql" />
|
||||||
<Build Include="dbo\Views\CipherView.sql" />
|
<Build Include="dbo\Views\CipherView.sql" />
|
||||||
|
<Build Include="dbo\Views\OrganizationUserView.sql" />
|
||||||
|
<Build Include="dbo\Views\OrganizationView.sql" />
|
||||||
<Build Include="dbo\Views\UserView.sql" />
|
<Build Include="dbo\Views\UserView.sql" />
|
||||||
<Build Include="dbo\Views\GrantView.sql" />
|
<Build Include="dbo\Views\GrantView.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Cipher_Create.sql" />
|
<Build Include="dbo\Stored Procedures\Cipher_Create.sql" />
|
||||||
@ -130,17 +132,15 @@
|
|||||||
<Build Include="dbo\Stored Procedures\SubvaultUser_DeleteById.sql" />
|
<Build Include="dbo\Stored Procedures\SubvaultUser_DeleteById.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\SubvaultUser_ReadById.sql" />
|
<Build Include="dbo\Stored Procedures\SubvaultUser_ReadById.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\SubvaultUser_Update.sql" />
|
<Build Include="dbo\Stored Procedures\SubvaultUser_Update.sql" />
|
||||||
|
<Build Include="dbo\Stored Procedures\Organization_ReadByIdUserId.sql" />
|
||||||
|
<Build Include="dbo\Stored Procedures\Organization_ReadByUserId.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Grant_DeleteByKey.sql" />
|
<Build Include="dbo\Stored Procedures\Grant_DeleteByKey.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Grant_DeleteBySubjectIdClientId.sql" />
|
<Build Include="dbo\Stored Procedures\Grant_DeleteBySubjectIdClientId.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Grant_DeleteBySubjectIdClientIdType.sql" />
|
<Build Include="dbo\Stored Procedures\Grant_DeleteBySubjectIdClientIdType.sql" />
|
||||||
|
<Build Include="dbo\Stored Procedures\OrganizationUser_ReadByOrganizationIdUserId.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Grant_ReadByKey.sql" />
|
<Build Include="dbo\Stored Procedures\Grant_ReadByKey.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Grant_ReadBySubjectId.sql" />
|
<Build Include="dbo\Stored Procedures\Grant_ReadBySubjectId.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Grant_Save.sql" />
|
<Build Include="dbo\Stored Procedures\Grant_Save.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\User_ReadAccountRevisionDateById.sql" />
|
<Build Include="dbo\Stored Procedures\User_ReadAccountRevisionDateById.sql" />
|
||||||
<Build Include="dbo\Stored Procedures\Organization_ReadByIdUserId.sql" />
|
|
||||||
<Build Include="dbo\Views\OrganizationView.sql" />
|
|
||||||
<Build Include="dbo\Views\OrganizationUserView.sql" />
|
|
||||||
<Build Include="dbo\Stored Procedures\OrganizationUser_ReadByIdUserId.sql" />
|
|
||||||
<Build Include="dbo\Stored Procedures\Organization_ReadByUserId.sql" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -1,5 +1,5 @@
|
|||||||
CREATE PROCEDURE [dbo].[OrganizationUser_ReadByIdUserId]
|
CREATE PROCEDURE [dbo].[OrganizationUser_ReadByOrganizationIdUserId]
|
||||||
@Id UNIQUEIDENTIFIER,
|
@OrganizationId UNIQUEIDENTIFIER,
|
||||||
@UserId UNIQUEIDENTIFIER
|
@UserId UNIQUEIDENTIFIER
|
||||||
AS
|
AS
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -10,6 +10,6 @@ BEGIN
|
|||||||
FROM
|
FROM
|
||||||
[dbo].[OrganizationUserView]
|
[dbo].[OrganizationUserView]
|
||||||
WHERE
|
WHERE
|
||||||
[Id] = @Id
|
[OrganizationId] = @OrganizationId
|
||||||
AND [UserId] = @UserId
|
AND [UserId] = @UserId
|
||||||
END
|
END
|
@ -2,7 +2,12 @@
|
|||||||
@Id UNIQUEIDENTIFIER,
|
@Id UNIQUEIDENTIFIER,
|
||||||
@UserId UNIQUEIDENTIFIER,
|
@UserId UNIQUEIDENTIFIER,
|
||||||
@Name NVARCHAR(50),
|
@Name NVARCHAR(50),
|
||||||
@Plan TINYINT,
|
@Plan NVARCHAR(20),
|
||||||
|
@PlanType TINYINT,
|
||||||
|
@PlanPrice MONEY,
|
||||||
|
@PlanRenewalPrice MONEY,
|
||||||
|
@PlanRenewalDate DATETIME2(7),
|
||||||
|
@PlanTrial BIT,
|
||||||
@MaxUsers SMALLINT,
|
@MaxUsers SMALLINT,
|
||||||
@CreationDate DATETIME2(7),
|
@CreationDate DATETIME2(7),
|
||||||
@RevisionDate DATETIME2(7)
|
@RevisionDate DATETIME2(7)
|
||||||
@ -16,6 +21,11 @@ BEGIN
|
|||||||
[UserId],
|
[UserId],
|
||||||
[Name],
|
[Name],
|
||||||
[Plan],
|
[Plan],
|
||||||
|
[PlanType],
|
||||||
|
[PlanPrice],
|
||||||
|
[PlanRenewalPrice],
|
||||||
|
[PlanRenewalDate],
|
||||||
|
[PlanTrial],
|
||||||
[MaxUsers],
|
[MaxUsers],
|
||||||
[CreationDate],
|
[CreationDate],
|
||||||
[RevisionDate]
|
[RevisionDate]
|
||||||
@ -26,6 +36,11 @@ BEGIN
|
|||||||
@UserId,
|
@UserId,
|
||||||
@Name,
|
@Name,
|
||||||
@Plan,
|
@Plan,
|
||||||
|
@PlanType,
|
||||||
|
@PlanPrice,
|
||||||
|
@PlanRenewalPrice,
|
||||||
|
@PlanRenewalDate,
|
||||||
|
@PlanTrial,
|
||||||
@MaxUsers,
|
@MaxUsers,
|
||||||
@CreationDate,
|
@CreationDate,
|
||||||
@RevisionDate
|
@RevisionDate
|
||||||
|
@ -2,7 +2,12 @@
|
|||||||
@Id UNIQUEIDENTIFIER,
|
@Id UNIQUEIDENTIFIER,
|
||||||
@UserId UNIQUEIDENTIFIER,
|
@UserId UNIQUEIDENTIFIER,
|
||||||
@Name NVARCHAR(50),
|
@Name NVARCHAR(50),
|
||||||
@Plan TINYINT,
|
@Plan NVARCHAR(20),
|
||||||
|
@PlanType TINYINT,
|
||||||
|
@PlanPrice MONEY,
|
||||||
|
@PlanRenewalPrice MONEY,
|
||||||
|
@PlanRenewalDate DATETIME2(7),
|
||||||
|
@PlanTrial BIT,
|
||||||
@MaxUsers SMALLINT,
|
@MaxUsers SMALLINT,
|
||||||
@CreationDate DATETIME2(7),
|
@CreationDate DATETIME2(7),
|
||||||
@RevisionDate DATETIME2(7)
|
@RevisionDate DATETIME2(7)
|
||||||
@ -16,6 +21,11 @@ BEGIN
|
|||||||
[UserId] = @UserId,
|
[UserId] = @UserId,
|
||||||
[Name] = @Name,
|
[Name] = @Name,
|
||||||
[Plan] = @Plan,
|
[Plan] = @Plan,
|
||||||
|
[PlanType] = @PlanType,
|
||||||
|
[PlanPrice] = @PlanPrice,
|
||||||
|
[PlanRenewalPrice] = @PlanRenewalPrice,
|
||||||
|
[PlanRenewalDate] = @PlanRenewalDate,
|
||||||
|
[PlanTrial] = @PlanTrial,
|
||||||
[MaxUsers] = @MaxUsers,
|
[MaxUsers] = @MaxUsers,
|
||||||
[CreationDate] = @CreationDate,
|
[CreationDate] = @CreationDate,
|
||||||
[RevisionDate] = @RevisionDate
|
[RevisionDate] = @RevisionDate
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
CREATE TABLE [dbo].[Organization] (
|
CREATE TABLE [dbo].[Organization] (
|
||||||
[Id] UNIQUEIDENTIFIER NOT NULL,
|
[Id] UNIQUEIDENTIFIER NOT NULL,
|
||||||
[UserId] UNIQUEIDENTIFIER NOT NULL,
|
[UserId] UNIQUEIDENTIFIER NOT NULL,
|
||||||
[Name] NVARCHAR (50) NOT NULL,
|
[Name] NVARCHAR (50) NOT NULL,
|
||||||
[Plan] TINYINT NOT NULL,
|
[Plan] NVARCHAR (20) NOT NULL,
|
||||||
[MaxUsers] SMALLINT NULL,
|
[PlanType] TINYINT NOT NULL,
|
||||||
[CreationDate] DATETIME2 (7) NOT NULL,
|
[PlanPrice] MONEY NOT NULL,
|
||||||
[RevisionDate] DATETIME2 (7) NOT NULL,
|
[PlanRenewalPrice] MONEY NOT NULL,
|
||||||
|
[PlanRenewalDate] DATETIME2 (7) NULL,
|
||||||
|
[PlanTrial] BIT NOT NULL,
|
||||||
|
[MaxUsers] SMALLINT NULL,
|
||||||
|
[CreationDate] DATETIME2 (7) NOT NULL,
|
||||||
|
[RevisionDate] DATETIME2 (7) NOT NULL,
|
||||||
CONSTRAINT [PK_Organization] PRIMARY KEY CLUSTERED ([Id] ASC),
|
CONSTRAINT [PK_Organization] PRIMARY KEY CLUSTERED ([Id] ASC),
|
||||||
CONSTRAINT [FK_Organization_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
|
CONSTRAINT [FK_Organization_User] FOREIGN KEY ([UserId]) REFERENCES [dbo].[User] ([Id])
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user