Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        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>)));
        }
Ejemplo n.º 3
0
        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));
        }