public async Task UpdateClient(string providerId, ProviderClient client)
        {
            var q = _builder
                    .Eq(x => x.Id, providerId)
                    .Match(x => x.Clients, x => x.UserId == client.UserId)
                    .UpdateSet(x => x.Clients[-1].Email, client.Email)
                    .UpdateSet(x => x.Clients[-1].Roles, client.Roles);

            await UpdateByQuery(q);
        }
        public async Task <ProviderClient> AddClient(string providerId, ProviderClient client)
        {
            var q = _builder
                    .Eq(x => x.Id, providerId)
                    .UpdateAddToSet(x => x.Clients, client);

            await UpdateByQuery(q);

            return(client);
        }
예제 #3
0
 public void ProcessProviderClientIdentifiers(ProviderClient client, ProviderClientIdentifier identifier)
 {
     if (client.ProviderClientIdentifiers.Exists(i => i.TypeCode == identifier.TypeCode))
     {
         var existing = client.ProviderClientIdentifiers.Where(i => i.TypeCode == identifier.TypeCode).Single();
         existing = identifier;
     }
     else
     {
         client.ProviderClientIdentifiers.Add(identifier);
     }
 }
예제 #4
0
        public static void Main(string[] args)
        {
            database.Populate();
            //enter if terminal should be provider
            if (PROVIDER_TERMINAL)
            {
                ProviderClient client = new ProviderClient();
            }

            //enter if terminal should be provider
            if (MANAGER_TERMINAL)
            {
                ManagerClient client = new ManagerClient();
            }
        }
예제 #5
0
        public void UpsertProviderClient(ProviderClient providerClient)
        {
            using (var db = new fasams_db())
            {
                ProviderClient existing = db.ProviderClients
                                          .Include(x => x.ProviderClientIdentifiers)
                                          .Include(x => x.ProviderClientPhones)
                                          .Include(x => x.ProviderClientEmailAddresses)
                                          .Include(x => x.ProviderClientPhysicalAddresses)
                                          .SingleOrDefault(c => c.SourceRecordIdentifier == providerClient.SourceRecordIdentifier && c.FederalTaxIdentifier == providerClient.FederalTaxIdentifier);

                if (existing == null)
                {
                    db.ProviderClients.Add(providerClient);
                    foreach (var row in providerClient.ProviderClientIdentifiers)
                    {
                        db.ProviderClientIdentifiers.Add(row);
                    }
                    if (providerClient.ProviderClientPhones != null)
                    {
                        foreach (var row in providerClient.ProviderClientPhones)
                        {
                            db.ProviderClientPhones.Add(row);
                        }
                    }
                    if (providerClient.ProviderClientEmailAddresses != null)
                    {
                        foreach (var row in providerClient.ProviderClientEmailAddresses)
                        {
                            db.ProviderClientEmailAddresses.Add(row);
                        }
                    }
                    if (providerClient.ProviderClientPhysicalAddresses != null)
                    {
                        foreach (var row in providerClient.ProviderClientPhysicalAddresses)
                        {
                            db.ProviderClientPhysicalAddresses.Add(row);
                        }
                    }
                }
                else
                {
                    db.Entry(existing).CurrentValues.SetValues(providerClient);
                }
                db.SaveChanges();
            }
        }
예제 #6
0
        public ProviderClient OpportuniticlyLoadProviderClient(string SourceRecordIdentifier, string FederalTaxIdentifier)
        {
            using (var db = new fasams_db())
            {
                ProviderClient existing = db.ProviderClients
                                          .Include(x => x.ProviderClientIdentifiers)
                                          .Include(x => x.ProviderClientPhones)
                                          .Include(x => x.ProviderClientEmailAddresses)
                                          .Include(x => x.ProviderClientPhysicalAddresses)
                                          .SingleOrDefault(c => c.SourceRecordIdentifier == SourceRecordIdentifier && c.FederalTaxIdentifier == FederalTaxIdentifier);

                if (existing == null)
                {
                    existing = new ProviderClient
                    {
                        ProviderClientIdentifiers = new List <ProviderClientIdentifier>()
                    };
                }

                return(existing);
            }
        }
        public async Task <UserPorviderProofResponseModel> LoginProof(string providerToken, string userToken)
        {
            var provider = await _repositoryProvider.GetByToken(providerToken);

            if (provider == null)
            {
                throw new MRException <object>(-1, "Wrong provider token");
            }

            (var providerId, var userId) = ProviderTokenGenerator.DecryptToken(userToken);

            if (!provider.Id.Equals(providerId))
            {
                throw new MRException <object>(-1, "Wrong provider token");
            }

            var user = await _repositoryUser.GetFirst(x => x.Id == userId && x.State == MREntityState.Active);

            if (user == null)
            {
                throw new MRException <object>(-1, "User not found");
            }

            var providerLogin = new ProviderClientLogin
            {
                ProviderToken = providerToken,
                ClientToken   = userToken,
                Time          = DateTime.UtcNow
            };

            if (provider.Clients == null)
            {
                provider.Clients = new List <ProviderClient>();
                await _repositoryProvider.Replace(provider);
            }

            var providerClient = provider.Clients.FirstOrDefault(x => x.UserId == user.Id);

            if (providerClient == null)
            {
                providerClient = new ProviderClient
                {
                    UserId = user.Id,
                    Email  = user.Email,
                    Roles  = provider.Options.DefaultRoles,
                    Logins = new List <ProviderClientLogin> {
                        providerLogin
                    }
                };

                provider.Clients.Add(providerClient);

                await _repositoryProvider.AddClient(provider.Id, providerClient);
            }
            else
            {
                await _repositoryProvider.AddClientLogin(provider.Id, providerClient.UserId, providerLogin);
            }

            var model = _mapper.Map <UserPorviderProofResponseModel>(user);

            model.Roles            = providerClient.Roles;
            model.IsEmailConfirmed = await _managerUser.IsEmailConfirmedAsync(user);

            model.IsEmailOnChange = await _repositoryEmailChangeUnit.Any(x => x.UserId == user.Id && x.Status == Infrastructure.Entity.Enum.EmailChangeResult.NEW);

            return(model);
        }