public static CredentialAssignment ToModel(this ConnectorCredentialAssignmentEntity entity) { var assignment = new CredentialAssignment(); assignment.EngagementAccount = entity.EngagementAccount; assignment.Provider = entity.Provider; assignment.ConnectorId = entity.Id; assignment.Enabled = entity.Enabled; assignment.Active = entity.Active; return(assignment); }
public async Task <ServiceProviderResponse> CreateOrUpdateCredentialAssignments( [FromHeader(Constant.OperationTrackingIdHeader)] string requestId, string account, [FromBody] CredentialAssignment request) { await ValidateAccount(account); Validator.ArgumentNotNull(request, nameof(request)); Validator.ArgumentNotNullOrEmpty(request.Provider, nameof(request.Provider)); Validator.ArgumentNotNullOrEmpty(request.ConnectorId, nameof(request.ConnectorId)); Validator.IsTrue <ArgumentException>(request.ChannelType != ChannelType.Invalid, nameof(request.ChannelType), "Invalid channel type."); var identifier = new ConnectorIdentifier(request.Provider, request.ConnectorId); var credential = await this.credentialManager.GetConnectorCredentialByIdAsync(identifier); Validator.IsTrue <ResourceNotFoundException>(credential != null, nameof(credential), "Credential '{0}' does not exist.", identifier); Validator.IsTrue <ArgumentException>(credential.ChannelType == request.ChannelType, nameof(request.ChannelType), "Credential '{0}' is for channel type '{1}' but not '{2}'", identifier, credential.ChannelType.ToString(), request.ChannelType.ToString()); if (string.IsNullOrEmpty(request.ExtendedCode)) { // Auto-assign account code var otherAccounts = await this.credentialManager.ListCredentialAssignmentsById(identifier, false); if (otherAccounts != null && otherAccounts.Count > 0) { var last = otherAccounts.Where(a => a.ExtendedCode != null).OrderBy(a => a.ExtendedCode).LastOrDefault(); if (int.TryParse(last.ExtendedCode, out int code) && code < Math.Pow(10, SmsConstant.ExtendedCodeCompanyLength) - 1) { request.ExtendedCode = (code + 1).ToString().PadLeft(SmsConstant.ExtendedCodeCompanyLength, '0'); } else { throw new ApplicationException($"Failed the generate new code. The last one is '{last.ExtendedCode}'"); } } else { request.ExtendedCode = 1.ToString().PadLeft(SmsConstant.ExtendedCodeCompanyLength, '0'); } } await this.credentialManager.CreateOrUpdateCredentialAssignmentAsync(request.ToDataContract(account)); var assignmentList = await this.credentialManager.ListCredentialAssignmentsByAccountAsync(account, ChannelType.Both, false); var response = assignmentList?.Select(a => new CredentialAssignment(a)).ToList(); return(ServiceProviderResponse.CreateJsonResponse(HttpStatusCode.OK, response)); }
public async Task <ServiceProviderResponse> CreateOrUpdateCredentialAssignments( [FromHeader(Constant.OperationTrackingIdHeader)] string requestId, string account, [FromBody] CredentialAssignment request) { var currentAccount = await EnsureAccount(account, requestId); Validator.ArgumentNotNull(request, nameof(request)); Validator.ArgumentNotNullOrEmpty(request.Provider, nameof(request.Provider)); Validator.ArgumentNotNullOrEmpty(request.ConnectorId, nameof(request.ConnectorId)); request.EngagementAccount = currentAccount.EngagementAccount; await this.credentialManager.CreateOrUpdateCredentialAssignmentAsync(request); var response = await this.credentialManager.ListCredentialAssignmentsByAccountAsync(currentAccount.EngagementAccount, false); return(ServiceProviderResponse.CreateJsonResponse(HttpStatusCode.OK, response)); }
public async Task CreateOrUpdateCredentialAssignmentAsync(CredentialAssignment credentialAssignment) { using (var ctx = new EmailServiceDbEntities(this.connectionString)) { var entities = await ctx.ConnectorCredentialAssignments.Where( c => c.EngagementAccount == credentialAssignment.EngagementAccount).ToListAsync(); var entity = entities?.SingleOrDefault( e => e.Provider == credentialAssignment.Provider && e.Id == credentialAssignment.ConnectorId); if (entity != null) { entity.Enabled = credentialAssignment.Enabled; entity.Active = credentialAssignment.Active; entity.Modified = DateTime.UtcNow; } else { entity = new ConnectorCredentialAssignmentEntity(); entity.EngagementAccount = credentialAssignment.EngagementAccount; entity.Provider = credentialAssignment.Provider; entity.Id = credentialAssignment.ConnectorId; entity.Enabled = credentialAssignment.Enabled; entity.Active = credentialAssignment.Active; 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 void SendMailOnTemplateCreatedOrUpdated(Template template, CredentialAssignment assignment, string trackingId) { try { var email = new EmailMessage(this.service); email.Subject = string.Format(TitleFormat, template.Signature, template.Name); email.Body = new MessageBody(BodyType.HTML, BuildMailBody(SmsTemplateOpsMailTemplate, template, assignment)); foreach (var receiver in this.opsInfo.ReceiverAddresses) { email.ToRecipients.Add(receiver); } email.SendAndSaveCopy(); } catch (Exception ex) { SmsProviderEventSource.Current.ErrorException(trackingId, this, nameof(this.SendMailOnTemplateCreatedOrUpdated), OperationStates.Failed, $"Failed to send ops mail for Account={template.EngagementAccount}, TemplateName={template.Name}", ex); } }
private string BuildMailBody(string html, Template template, CredentialAssignment assignment) { var format = "$({0})"; var kvs = new Dictionary <string, string> { { "provider", assignment?.Provider }, { "providerId", assignment?.ConnectorId }, { "category", template.Category.ToString() }, { "name", template.Name }, { "signature", template.Signature }, { "content", template.Body }, { "account", template.EngagementAccount } }; foreach (var kv in kvs) { var key = string.Format(format, kv.Key); html = html.Replace(key, kv.Value); } return(html); }
public async Task CreateOrUpdateCredentialAssignmentAsync(CredentialAssignment credentialAssignment) { var credential = this.GetConnectorCredentialByIdAsync(credentialAssignment.ConnectorIdentifier); await this.store.CreateOrUpdateCredentialAssignmentAsync(credentialAssignment); }