public async Task <IActionResult> GetUserDetails( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "assignments/{assignmentId}/me")] HttpRequest req, [Assignment(AssignmentId = "{assignmentId}")] Assignment assignment, [Platform] PlatformsClient platformsClient, [LtiAdvantage] INrpsClient nrpsClient, [Lti1] Lti1MembershipClient membershipClient) { _logger.LogTrace("Getting user information from JWT."); if (req.Headers == null) { return(new BadRequestErrorMessageResult("No headers are presented in the request.")); } if (!req.Headers.TryGetTokenClaims(out Claim[] claims, message => _logger.LogError(message))) { return(new BadRequestErrorMessageResult("Error in sent JWT.")); } if (!TryGetUserEmails(claims, out List <string> userEmails)) { return(new BadRequestErrorMessageResult("Could not get user email.")); } _logger.LogInformation($"Getting user information for '{string.Join(';', userEmails)}'."); if (assignment.LtiVersion != LtiAdvantageVersionString) { Membership userMembership = await membershipClient.GetMemberByEmail(assignment.ContextMembershipsUrl, assignment.OAuthConsumerKey, assignment.ResourceLinkId, userEmails); return(new OkObjectResult(_mapper.Map <MemberDto>(userMembership))); } Platform platform = await platformsClient.GetPlatform(assignment.PlatformId); Member member = await nrpsClient.GetByEmail(platform.ClientId, platform.AccessTokenUrl, assignment.ContextMembershipsUrl, userEmails); if (member == null) { _logger.LogError("User not enrolled."); } return(new OkObjectResult(_mapper.Map <MemberDto>(member))); }
public async Task <IActionResult> GetAllUsers( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "assignments/{assignmentId}/users")] HttpRequest req, [Assignment(AssignmentId = "{assignmentId}")] Assignment assignment, [Platform] PlatformsClient platformsClient, [LtiAdvantage] INrpsClient nrpsClient, [Lti1] Lti1MembershipClient membershipClient) { _logger.LogInformation("Getting all users"); if (assignment.LtiVersion.ToString() != LtiVersionClass.LtiVersion.LtiAdvantage.ToString()) { IEnumerable <Membership> allMemberships = await membershipClient.GetAllMembers(assignment.ContextMembershipsUrl, assignment.OAuthConsumerKey, assignment.ResourceLinkId); return(new OkObjectResult(allMemberships.Select(_mapper.Map <MemberDto>))); } Platform platform = await platformsClient.GetPlatform(assignment.PlatformId); IEnumerable <Member> allMembers = await nrpsClient.Get(platform.ClientId, platform.AccessTokenUrl, assignment.ContextMembershipsUrl); return(new OkObjectResult(allMembers.Select(_mapper.Map <MemberDto>))); }
public async Task <IActionResult> LtiAdvantageLaunch( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "lti-advantage-launch/{platformId}")] HttpRequest req, [LtiAdvantage] ILtiResourceLinkRequestClient ltiRequestClient, [LtiAdvantage] INrpsClient nrpsClient, [Platform(PlatformId = "{platformId}")] Platform platform, [Assignment] IAsyncCollector <Assignment> assignmentsCollector, [DurableClient] IDurableEntityClient entityClient, string platformId) { LtiResourceLinkRequest ltiResourceLinkRequest = null; try { ltiResourceLinkRequest = await ltiRequestClient.GetLtiResourceLinkRequest(platform.JwkSetUrl, platform.ClientId, platform.Issuer); } catch (Exception e) { _logger.LogError($"Could not validate request.\n{e}"); } if (ltiResourceLinkRequest == null) { return(new BadRequestErrorMessageResult("Could not validate request.")); } string nonce = ltiResourceLinkRequest.Nonce; string state = req.Form["state"].ToString(); bool isNonceValid = await ValidateNonce(nonce, state, entityClient); if (!isNonceValid) { return(new BadRequestErrorMessageResult("Could not validate nonce.")); } Assignment assignment = ConvertRequestToAssignment(ltiResourceLinkRequest); assignment.PlatformId = platformId; _logger.LogTrace($"Parsed Assignment '{assignment.Name}'."); await assignmentsCollector.AddAsync(assignment); await assignmentsCollector.FlushAsync(); if (string.IsNullOrEmpty(assignment.Id)) { return(new InternalServerErrorResult()); } string asStudentParam = ""; if (ltiResourceLinkRequest.Roles.Contains(Role.ContextLearner) || ltiResourceLinkRequest.Roles.Contains(Role.InstitutionLearner)) { Member launchingMember = await nrpsClient.GetById(platform.ClientId, platform.AccessTokenUrl, ltiResourceLinkRequest.NamesRoleService.ContextMembershipUrl, ltiResourceLinkRequest.UserId); if (launchingMember != null && (launchingMember.Roles.Contains(Role.ContextInstructor) || launchingMember.Roles.Contains(Role.InstitutionInstructor))) { asStudentParam = "?asStudent"; } } var urlWithParams = $"{RedirectUrl}/{assignment.Id}{asStudentParam}"; _logger.LogInformation($"Redirect to {urlWithParams}"); return(new RedirectResult(urlWithParams)); }