public async Task <IActionResult> CreateOrUpdateAssignment( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = AssignmentsRoutePath)] HttpRequest req, [Table(AssignmentsTableName)] CloudTable assignmentsTable, [User] UsersClient usersClient) { string result = await req.ReadAsStringAsync(); AssignmentDto assignmentDto = JsonConvert.DeserializeObject <AssignmentDto>(result); AssignmentEntity assignmentEntity = _mapper.Map <AssignmentEntity>(assignmentDto); assignmentEntity.ETag = "*"; #if !DEBUG //While debugging, authorization header is empty when this API gets called from either Lti1 API or LtiAdvantage API // So to enable seamless debugging, putting this code in #if !DEBUG block bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } if (userEmails.Count > 0) { _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); User[] allUsers = await usersClient.GetAllUsers(assignmentDto.Id); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } #endif ValidationContext context = new ValidationContext(assignmentDto, null, null); if (!Validator.TryValidateObject(assignmentDto, context, new List <ValidationResult>(), true)) { _logger.LogError("One or more enteries are incorrect. The length of provided assignment name / course name / assignment description is too long."); return(new BadRequestErrorMessageResult("One or more enteries are incorrect. The length of provided assignment name / course name / assignment description is too long.")); } TableOperation insertOrMergeAssignment = TableOperation.InsertOrMerge(assignmentEntity); TableResult insertOrMergeResult = await assignmentsTable.ExecuteAsync(insertOrMergeAssignment); if (insertOrMergeResult.HttpStatusCode < 200 || insertOrMergeResult.HttpStatusCode >= 300) { _logger.LogError($"Could not save assignment {assignmentEntity.ToAssignmentId()}. Error code: {insertOrMergeResult.HttpStatusCode}."); return(new InternalServerErrorResult()); } _logger.LogInformation($"Saved assignment {assignmentEntity.ToAssignmentId()}."); string assignmentUrl = $"{req.Scheme}://{req.Host}/api/{AssignmentsRoutePath}/{assignmentEntity.ToAssignmentId()}"; AssignmentDto savedAssignmentDto = _mapper.Map <AssignmentDto>(assignmentEntity); return(new CreatedResult(assignmentUrl, savedAssignmentDto)); }
public ActionResult UserReport() { UsersClient UC = new UsersClient(); var dbusers = UC.GetAllUsers(); return(View(dbusers)); }
public async Task <IActionResult> SaveLink( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assignments/{assignmentId}/links/{linkId}")] HttpRequest req, [Table(AssignmentLinksTableName)] IAsyncCollector <AssignmentLinkEntity> linksCollector, string assignmentId, string linkId, [User] UsersClient usersClient) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } string linkJson = await req.ReadAsStringAsync(); AssignmentLinkDto linkDto = JsonConvert.DeserializeObject <AssignmentLinkDto>(linkJson); if (linkId != linkDto.Id) { return(new BadRequestErrorMessageResult("The provided link content doesn't match the path.")); } _logger.LogInformation($"Starting the save process of link with ID [{linkId}] to assignment [{assignmentId}]."); AssignmentLinkEntity assignmentLinkEntity = _mapper.Map <AssignmentLinkEntity>(linkDto); assignmentLinkEntity.PartitionKey = assignmentId; assignmentLinkEntity.ETag = "*"; await linksCollector.AddAsync(assignmentLinkEntity); await linksCollector.FlushAsync(); AssignmentLinkDto savedLinkDto = _mapper.Map <AssignmentLinkDto>(assignmentLinkEntity); string assignmentUrl = $"{req.Scheme}://{req.Host}/api/assignments/{assignmentId}/links/{savedLinkDto.Id}"; return(new CreatedResult(assignmentUrl, savedLinkDto)); }
public async Task <IActionResult> ClearAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "assignments/{assignmentId}/learn-content")] HttpRequest req, [Table(AssignmentLearnContentTableName)] CloudTable assignmentLearnContentTable, string assignmentId, [User] UsersClient usersClient) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } List <AssignmentLearnContentEntity> assignmentLearnContentEntities = await GetAllAssignmentLearnContentEntities(assignmentLearnContentTable, assignmentId); if (assignmentLearnContentEntities.Count == 0) { return(new NoContentResult()); } _logger.LogInformation($"Removing all assignment learn content from assignment {assignmentId}"); TableBatchOperation deleteBatchOperations = new TableBatchOperation(); assignmentLearnContentEntities .Select(TableOperation.Delete) .ForEach(deleteBatchOperations.Add); IList <TableResult> executeBatchResults = await assignmentLearnContentTable.ExecuteBatchAsync(deleteBatchOperations); bool errorExists = executeBatchResults.Any(result => result.HttpStatusCode < 200 || result.HttpStatusCode >= 300); return(errorExists ? (IActionResult) new InternalServerErrorResult() : new OkResult()); }
public async Task <IActionResult> CreateOrUpdateAssignment( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = AssignmentsRoutePath)] HttpRequest req, [Table(AssignmentsTableName)] CloudTable assignmentsTable, [User] UsersClient usersClient) { string result = await req.ReadAsStringAsync(); AssignmentDto assignmentDto = JsonConvert.DeserializeObject <AssignmentDto>(result); AssignmentEntity assignmentEntity = _mapper.Map <AssignmentEntity>(assignmentDto); assignmentEntity.ETag = "*"; bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentDto.Id); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } TableOperation insertOrMergeAssignment = TableOperation.InsertOrMerge(assignmentEntity); TableResult insertOrMergeResult = await assignmentsTable.ExecuteAsync(insertOrMergeAssignment); if (insertOrMergeResult.HttpStatusCode < 200 || insertOrMergeResult.HttpStatusCode >= 300) { _logger.LogError($"Could not save assignment {assignmentEntity.ToAssignmentId()}. Error code: {insertOrMergeResult.HttpStatusCode}."); return(new InternalServerErrorResult()); } _logger.LogInformation($"Saved assignment {assignmentEntity.ToAssignmentId()}."); string assignmentUrl = $"{req.Scheme}://{req.Host}/api/{AssignmentsRoutePath}/{assignmentEntity.ToAssignmentId()}"; AssignmentDto savedAssignmentDto = _mapper.Map <AssignmentDto>(assignmentEntity); return(new CreatedResult(assignmentUrl, savedAssignmentDto)); }
private async Task <IActionResult> ChangePublishStatus(HttpRequest req, CloudTable table, IAsyncCollector <AssignmentEntity> assignmentEntityCollector, string assignmentId, UsersClient usersClient, PublishStatus newPublishStatus) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } if (userEmails.Count > 0) { _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } AssignmentEntity assignmentEntity = await FetchAssignment(table, assignmentId); if (assignmentEntity == null) { return(new NotFoundResult()); } assignmentEntity.PublishStatus = newPublishStatus.ToString(); assignmentEntity.ETag = "*"; AssignmentDto assignmentDto = _mapper.Map <AssignmentDto>(assignmentEntity); ValidationContext context = new ValidationContext(assignmentDto, null, null); if (!Validator.TryValidateObject(assignmentDto, context, new List <ValidationResult>(), true)) { _logger.LogError("One or more enteries are incorrect. Incorrect publish status entered."); return(new BadRequestErrorMessageResult("The publish status entered is incorrect.")); } await assignmentEntityCollector.AddAsync(assignmentEntity); await assignmentEntityCollector.FlushAsync(); return(new OkResult()); }
public async Task <IActionResult> RemoveAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "assignments/{assignmentId}/learn-content/{contentUid}")] HttpRequest req, [Table(AssignmentLearnContentTableName)] CloudTable assignmentLearnContentTable, [Table(AssignmentLearnContentTableName, "{assignmentId}", "{contentUid}")] AssignmentLearnContentEntity assignmentLearnContentEntityToDelete, string assignmentId, string contentUid, [User] UsersClient usersClient) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } if (assignmentLearnContentEntityToDelete == null) { return(new NoContentResult()); } _logger.LogInformation($"Removing assignment learn content with uid [{contentUid}] from assignment {assignmentId}"); TableOperation deleteOperation = TableOperation.Delete(assignmentLearnContentEntityToDelete); TableResult deleteResult = await assignmentLearnContentTable.ExecuteAsync(deleteOperation); if (deleteResult.HttpStatusCode < 200 || deleteResult.HttpStatusCode >= 300) { return(new InternalServerErrorResult()); } return(new OkResult()); }
public async Task <IActionResult> SaveAssignmentLearnContent( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "assignments/{assignmentId}/learn-content/{contentUid}")] HttpRequest req, [Table(AssignmentLearnContentTableName)] IAsyncCollector <AssignmentLearnContentEntity> learnContentCollector, string assignmentId, string contentUid, [User] UsersClient usersClient) { bool isSystemCallOrUserWithValidEmail = req.Headers.TryGetUserEmails(out List <string> userEmails); if (!isSystemCallOrUserWithValidEmail) { _logger.LogError("Could not get user email."); return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (userEmails.Count > 0) { User[] allUsers = await usersClient.GetAllUsers(assignmentId); User user = allUsers.FirstOrDefault(member => userEmails.Any(userEmail => (member.Email ?? String.Empty).Equals(userEmail))); if (user == null || !user.Role.Equals("teacher")) { return(new UnauthorizedResult()); } } _logger.LogInformation($"Saving assignment learn content with uid [{contentUid}] to assignment {assignmentId}"); AssignmentLearnContentEntity assignmentLearnContentEntity = new AssignmentLearnContentEntity { PartitionKey = assignmentId, RowKey = contentUid, ETag = "*" }; await learnContentCollector.AddAsync(assignmentLearnContentEntity); await learnContentCollector.FlushAsync(); AssignmentLearnContentDto savedLearnContentDto = _mapper.Map <AssignmentLearnContentDto>(assignmentLearnContentEntity); string assignmentUrl = $"{req.Scheme}://{req.Host}/api/assignments/{assignmentId}/learn-content/{savedLearnContentDto.ContentUid}"; return(new CreatedResult(assignmentUrl, savedLearnContentDto)); }