implementation of Authentication using JWT. Security applied on all microservices endpoints.

This commit is contained in:
Reginald Cherenfant Jasmin
2023-09-20 00:32:30 -04:00
parent 8d386af40a
commit 77816605d1
75 changed files with 1744 additions and 219 deletions

View File

@ -48,7 +48,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
}
public async Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId)
public async Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId,string token)
{
try
{
@ -57,7 +57,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
if (listSurveyResponse.Any())
{
var answers = await getAnswersByRegionAndSurveyIdAsync(listSurveyResponse);
var answers = await getAnswersByRegionAndSurveyIdAsync(listSurveyResponse,token);
return (true, answers, "Request Successful.");
}
else
@ -72,7 +72,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
}
public async Task<(bool IsSuccess, dynamic SurveyResponse, string ErrorMessage)> GetSurveyResponseByIdAsync(int responseId)
public async Task<(bool IsSuccess, dynamic SurveyResponse, string ErrorMessage)> GetSurveyResponseByIdAsync(int responseId, string token)
{
try
{
@ -81,7 +81,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
if (surveyResponse != null)
{
var answers = await getSurveyResponseByResponseIdAsync(surveyResponse);
var answers = await getSurveyResponseByResponseIdAsync(surveyResponse, token);
if (answers != null)
return (true, answers, "Request Successful.");
@ -105,16 +105,16 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId)
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAsync(int surveyId, string token)
{
try
{
logger?.LogInformation("Querying to get Survey object from microservice");
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
var survey = await surveyServiceProvider.getSurveyAsync(surveyId,token);
if (survey != null)
{
var answers = await getSurveyResponsesBySurveyIdAsync(surveyId);
var answers = await getSurveyResponsesBySurveyIdAsync(surveyId, token);
if (answers != null)
return (true, answers, "Request Successful.");
@ -136,16 +136,16 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
}
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId)
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesBySurveyAndLocationAsync(int surveyId, int locationId, string token)
{
try
{
logger?.LogInformation("Querying to get Survey object from microservice");
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
var survey = await surveyServiceProvider.getSurveyAsync(surveyId, token);
if (survey != null)
{
var answers = await getSurveyResponsesBySurveyIdLocationIdAsync(surveyId, locationId);
var answers = await getSurveyResponsesBySurveyIdLocationIdAsync(surveyId, locationId, token);
if (answers != null)
return (true, answers, "Request Successful.");
@ -167,16 +167,16 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
}
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId)
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetSurveyResponsesByMaintenanceCenterAsync(int surveyId, string token)
{
try
{
logger?.LogInformation("Querying to get Survey object from microservice");
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
var survey = await surveyServiceProvider.getSurveyAsync(surveyId, token);
if (survey != null)
{
var answers = await getResultsByMaintenanceCenterAsync(surveyId);
var answers = await getResultsByMaintenanceCenterAsync(surveyId,token);
if (answers != null)
return (true, answers, "Request Successful.");
@ -198,19 +198,19 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
}
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer)
public async Task<(bool IsSuccess, dynamic SurveyResponses, string ErrorMessage)> GetResponsesByAnswerAsync(int surveyId, int questionId, string answer, string token)
{
try
{
logger?.LogInformation("Querying to get Survey object from microservice");
var survey = await surveyServiceProvider.getSurveyAsync(surveyId);
var question = await questionServiceProvider.getQuestionsAsync(questionId);
var survey = await surveyServiceProvider.getSurveyAsync(surveyId, token);
var question = await questionServiceProvider.getQuestionsAsync(questionId,token);
bool IsCorrectAnswer = answer.ToLower().Equals("yes") || answer.ToLower().Equals("no") ? true : false;
if (survey != null && question != null && IsCorrectAnswer)
{
var answers = await getSurveyResponsesByAnswerAsync(survey, question, answer);
var answers = await getSurveyResponsesByAnswerAsync(survey, question, answer, token);
if (answers != null)
return (true, answers, "Request Successful.");
@ -233,11 +233,11 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
public async Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync()
public async Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync(string token)
{
try
{
var answers = await getAllSurveyResponsesAsync();
var answers = await getAllSurveyResponsesAsync(token);
if (answers != null)
return (true, answers, "Request Successful.");
@ -341,11 +341,11 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
//Method to get Answers by region with surveyId as input parameter
private async Task<dynamic> getAnswersByRegionAndSurveyIdAsync(IQueryable<Db.SurveyResponse> surveyResponses)
private async Task<dynamic> getAnswersByRegionAndSurveyIdAsync(IQueryable<Db.SurveyResponse> surveyResponses, string token)
{
try
{
var answersList = await answerServiceProvider.getAnswersAsync();
var answersList = await answerServiceProvider.getAnswersAsync(token);
if (answersList == null || !answersList.Any())
return null;
@ -368,8 +368,8 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
if (surveyAnswers == null || !surveyAnswers.Any())
return null;
var regions = await regionServiceProvider.getRegionsAsync();
var locations = await locationServiceProvider.getLocationsAsync();
var regions = await regionServiceProvider.getRegionsAsync(token);
var locations = await locationServiceProvider.getLocationsAsync(token);
if (regions == null || !regions.Any() || locations == null || !locations.Any())
return null;
@ -427,15 +427,15 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
//Method to get Survey Response by ResponseId
private async Task<dynamic> getSurveyResponseByResponseIdAsync(Db.SurveyResponse surveyResponse)
private async Task<dynamic> getSurveyResponseByResponseIdAsync(Db.SurveyResponse surveyResponse, string token)
{
try
{
var employee = await employeeServiceProvider.getEmployeeAsync(surveyResponse.EmployeeId);
var answers = await answerServiceProvider.GetAnswersByResponseIdAsync(surveyResponse.Id);
var allQuestions = await questionServiceProvider.getQuestionsAsync();
var employee = await employeeServiceProvider.getEmployeeAsync(surveyResponse.EmployeeId, token);
var answers = await answerServiceProvider.GetAnswersByResponseIdAsync(surveyResponse.Id, token);
var allQuestions = await questionServiceProvider.getQuestionsAsync(token);
var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId);
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
var result = new
{
@ -470,20 +470,19 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
//Method to get Survey Responses by surveyId
private async Task<dynamic> getSurveyResponsesBySurveyIdAsync(int surveyId)
private async Task<dynamic> getSurveyResponsesBySurveyIdAsync(int surveyId, string token)
{
try
{
var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync();
var employees = await employeeServiceProvider.getEmployeesAsync();
var answers = await answerServiceProvider.getAnswersAsync();
var questions = await questionServiceProvider.getQuestionsAsync();
var employees = await employeeServiceProvider.getEmployeesAsync(token);
var answers = await answerServiceProvider.getAnswersAsync(token);
var questions = await questionServiceProvider.getQuestionsAsync(token);
var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
//var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId);
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
var result = from r in surveyResonses
select new
{
@ -520,16 +519,15 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
//Method to get All Survey Responses
private async Task<dynamic> getAllSurveyResponsesAsync()
private async Task<dynamic> getAllSurveyResponsesAsync(string token)
{
try
{
var surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync();
var employees = await employeeServiceProvider.getEmployeesAsync();
var answers = await answerServiceProvider.getAnswersAsync();
var questions = await questionServiceProvider.getQuestionsAsync();
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
var employees = await employeeServiceProvider.getEmployeesAsync(token);
var answers = await answerServiceProvider.getAnswersAsync(token);
var questions = await questionServiceProvider.getQuestionsAsync(token);
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
var result = from r in surveyResonses
select new
@ -566,13 +564,13 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
//Method to get Answers By Maintenance Center by surveyId
private async Task<dynamic> getResultsByMaintenanceCenterAsync(int surveyId)
private async Task<dynamic> getResultsByMaintenanceCenterAsync(int surveyId, string token)
{
try
{
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId).ToListAsync();
var answers = await answerServiceProvider.getAnswersAsync();
var locations = await locationServiceProvider.getLocationsAsync();
var answers = await answerServiceProvider.getAnswersAsync(token);
var locations = await locationServiceProvider.getLocationsAsync(token);
var maintenanceCenters = locations.DistinctBy(m => m.MaintenanceCenter);
//get all the answers for the particular survey
@ -626,17 +624,16 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
//Method to get Survey Responses by surveyId and LocationId
private async Task<dynamic> getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, int locationId)
private async Task<dynamic> getSurveyResponsesBySurveyIdLocationIdAsync(int surveyId, int locationId, string token)
{
try
{
var surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == surveyId && x.LocationId.Equals(locationId)).ToListAsync();
var employees = await employeeServiceProvider.getEmployeesAsync();
var answers = await answerServiceProvider.getAnswersAsync();
var questions = await questionServiceProvider.getQuestionsAsync();
var employees = await employeeServiceProvider.getEmployeesAsync(token);
var answers = await answerServiceProvider.getAnswersAsync(token);
var questions = await questionServiceProvider.getQuestionsAsync(token);
var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
var result = from r in surveyResonses
select new
@ -674,14 +671,14 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
//Method to get Survey Responses by surveyId questionId and answer
private async Task<dynamic> getSurveyResponsesByAnswerAsync(Survey survey, Question question, string answer)
private async Task<dynamic> getSurveyResponsesByAnswerAsync(Survey survey, Question question, string answer, string token)
{
try
{
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.SurveyId == survey.Id).ToListAsync();
var answers = await answerServiceProvider.getAnswersAsync();
var employees = await employeeServiceProvider.getEmployeesAsync();
var attachments = await attachmentServiceProvider.getAttachmentsAsync();
var answers = await answerServiceProvider.getAnswersAsync(token);
var employees = await employeeServiceProvider.getEmployeesAsync(token);
var attachments = await attachmentServiceProvider.getAttachmentsAsync(token);
var result = from r in surveyResponses
select new
@ -720,16 +717,16 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
async Task<bool> ProcessAnswers(AnswerRequest answerRequest, int surveyResponseId)
async Task<bool> ProcessAnswers(AnswerRequest answerRequest, int surveyResponseId,string token)
{
if (answerRequest != null)
{
var answer = await answerServiceProvider.PostAnswersAsync(new Models.Answer { QuestionId = answerRequest.QuestionId, AnswerText = answerRequest.AnswerText, Comment = answerRequest.Comment, SurveyResponseId = surveyResponseId });
var answer = await answerServiceProvider.PostAnswersAsync(new Models.Answer { QuestionId = answerRequest.QuestionId, AnswerText = answerRequest.AnswerText, Comment = answerRequest.Comment, SurveyResponseId = surveyResponseId }, token);
if (answer != null)
{
List<AnswerInfo> listAnswerInfo = new List<AnswerInfo>();
listAnswerInfo.Add(new AnswerInfo { AnswerId = answer.Id, postedFiles = answerRequest.PostedFiles });
var attachments = attachmentServiceProvider.PostAttachmentsAsync(new AttachmentInfo { ResponseId = surveyResponseId, Answers = listAnswerInfo });
var attachments = attachmentServiceProvider.PostAttachmentsAsync(new AttachmentInfo { ResponseId = surveyResponseId, Answers = listAnswerInfo }, token);
string message = $"Answer for question {answerRequest.QuestionId} saved to the database";
logger?.LogInformation(message);
@ -750,8 +747,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
}
}
public async Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyAnswersAsync(Models.Request request)
public async Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyAnswersAsync(Models.Request request, string token)
{
try
{
@ -761,7 +757,7 @@ namespace DamageAssesment.Api.SurveyResponses.Providers
if (response.IsSuccess)
{
var surveyResponse = response.SurveyResponse;
var tasks = request.Answers.Select(x => ProcessAnswers(x, surveyResponse.Id));
var tasks = request.Answers.Select(x => ProcessAnswers(x, surveyResponse.Id,token));
await Task.WhenAll(tasks);
return (true, surveyResponse, null);
}