public CredentialAssignment(ConnectorCredentialAssignment assignment) { this.ChannelType = assignment.ChannelType; this.Provider = assignment.ConnectorIdentifier.ConnectorName; this.ConnectorId = assignment.ConnectorIdentifier.ConnectorId; this.Enabled = assignment.Enabled; this.Active = assignment.Active; this.ExtendedCode = assignment.ExtendedCode; }
public async Task CreateOrUpdateCredentialAssignmentAsync(ConnectorCredentialAssignment credentialAssignment) { using (var ctx = new SmsServiceDbEntities(this.connectionString)) { var entities = await ctx.ConnectorCredentialAssignments.Where( c => c.EngagementAccount == credentialAssignment.EngagementAccount && c.ChannelType == credentialAssignment.ChannelType.ToString()).ToListAsync(); var entity = entities?.SingleOrDefault( e => e.Provider == credentialAssignment.ConnectorIdentifier.ConnectorName && e.Id == credentialAssignment.ConnectorIdentifier.ConnectorId); if (entity != null) { entity.Enabled = credentialAssignment.Enabled; entity.Active = credentialAssignment.Active; entity.ExtendedCode = credentialAssignment.ExtendedCode; entity.Modified = DateTime.UtcNow; } else { entity = new ConnectorCredentialAssignmentEntity(); entity.EngagementAccount = credentialAssignment.EngagementAccount; entity.ChannelType = credentialAssignment.ChannelType.ToString(); entity.Provider = credentialAssignment.ConnectorIdentifier.ConnectorName; entity.Id = credentialAssignment.ConnectorIdentifier.ConnectorId; entity.Enabled = credentialAssignment.Enabled; entity.Active = credentialAssignment.Active; entity.ExtendedCode = credentialAssignment.ExtendedCode; entity.Created = entity.Modified = DateTime.UtcNow; ctx.ConnectorCredentialAssignments.Add(entity); } // Make sure at most 1 active credential if (credentialAssignment.Active) { foreach (var entry in entities.Where(e => e != entity)) { entry.Active = false; } } await ctx.SaveChangesAsync(); } }
public static ConnectorCredentialAssignment ToModel(this ConnectorCredentialAssignmentEntity entity) { var assignment = new ConnectorCredentialAssignment(); assignment.EngagementAccount = entity.EngagementAccount; assignment.ConnectorIdentifier = new ConnectorIdentifier(entity.Provider, entity.Id); assignment.Enabled = entity.Enabled; assignment.Active = entity.Active; assignment.ExtendedCode = entity.ExtendedCode; ChannelType channelType; if (Enum.TryParse(entity.ChannelType, out channelType)) { assignment.ChannelType = channelType; } return(assignment); }
private async Task SaveMoMessageAsync(Dictionary <ConnectorIdentifier, List <InboundMessage> > messages, InboundAgent agent, CancellationToken cancellationToken) { if (messages == null || messages.Count <= 0) { return; } foreach (var kv in messages) { var sharedAccounts = await this.credentialManager.ListCredentialAssignmentsById(kv.Key, true); if (sharedAccounts == null || sharedAccounts.Count <= 0) { continue; } var groups = kv.Value.Where(v => v.MoMessage != null).GroupBy(m => m.MoMessage.ExtendedCode); foreach (var group in groups) { var extended = group.Key; var segments = await agent.ParseExtendedCodeAsync(extended, Constants.ExtendedCodeSegmentLengths, cancellationToken); if (segments != null && segments.Count != 3) { SmsProviderEventSource.Current.Error(SmsProviderEventSource.EmptyTrackingId, this, nameof(this.SaveMoMessageAsync), OperationStates.Dropped, $"Dropped the message as connector parsing extended code error with segment={segments.Count}."); continue; } var accountCode = segments?[0]; var sigCode = segments?[1]; var customCode = segments?[2]; ConnectorCredentialAssignment account = null; // case #1: credential is not shared by multiple accounts if ((segments == null || string.IsNullOrEmpty(accountCode)) && sharedAccounts.Count == 1) { account = sharedAccounts.SingleOrDefault(); } // case #2: credentials are shared between accounts else if (!string.IsNullOrEmpty(accountCode) && !string.IsNullOrEmpty(sigCode)) { account = sharedAccounts.SingleOrDefault(a => a.ExtendedCode.Equals(accountCode, StringComparison.OrdinalIgnoreCase)); } if (account != null) { Signature signature = null; if (!string.IsNullOrEmpty(sigCode)) { var signatureList = await this.store.ListSignaturesAsync(account.EngagementAccount, new Common.Pagination.DbContinuationToken(null), -1); signature = signatureList?.Signatures?.SingleOrDefault(s => s.ExtendedCode.Equals(sigCode)); } else { signature = new Signature { EngagementAccount = account.EngagementAccount, Value = null }; } if (signature != null) { await this.telemetryManager.InsertInboundMessagesAsync(signature, group.ToList(), customCode); continue; } } SmsProviderEventSource.Current.Warning(SmsProviderEventSource.EmptyTrackingId, this, nameof(this.SaveMoMessageAsync), OperationStates.Dropped, $"Dropped the message as we cannot find the owner. connector={kv.Key} extended={extended}"); } } }