コード例 #1
0
 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;
 }
コード例 #2
0
ファイル: SmsStore.cs プロジェクト: isabella232/azure-cef
        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();
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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}");
                }
            }
        }