Пример #1
0
        public async Task <IActionResult> GetInvitesForUser(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "OrganisationInvite/GetInvitesForUser")] HttpRequest req, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function(GetInvitesForUser) processed a request.");

            try
            {
                var accessTokenResult = _tokenProvider.ValidateToken(req);
                if (accessTokenResult.Status != AccessTokenStatus.Valid)
                {
                    return(new UnauthorizedResult());
                }

                Guid userAccountId = new Guid(accessTokenResult.Principal.Claims.First(c => c.Type == "UserAccount").Value);

                var organisationInviteRepo = new OrganisationInviteRepository();
                var invites = organisationInviteRepo.GetInvitesForUser(userAccountId);

                return(new OkObjectResult(invites));
            }
            catch (Exception exception)
            {
                return(new BadRequestObjectResult(exception.Message));
            }
        }
Пример #2
0
        public async Task <IActionResult> AcceptOrganisationInvite(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "OrganisationInvite/{OrganisationInviteId}")] HttpRequest req, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function(AcceptOrganisationInvite) processed a request.");

            try
            {
                var accessTokenResult = _tokenProvider.ValidateToken(req);
                if (accessTokenResult.Status != AccessTokenStatus.Valid)
                {
                    return(new UnauthorizedResult());
                }

                string requestBody        = await new StreamReader(req.Body).ReadToEndAsync();
                var    organisationInvite = JsonConvert.DeserializeObject <OrganisationInvite>(requestBody);

                Guid userAccountId = new Guid(accessTokenResult.Principal.Claims.First(c => c.Type == "UserAccount").Value);

                var organisationInviteRepo = new OrganisationInviteRepository();
                organisationInvite = organisationInviteRepo.GetOrganisationInviteById(organisationInvite.OrganisationInviteId);

                if (userAccountId != organisationInvite.InviteeId)
                {
                    return(new BadRequestObjectResult("User sending request is not the invitee"));
                }

                var organisationMembership = new OrganisationMembership()
                {
                    OrganisationId       = organisationInvite.OrganisationId,
                    UserAccountId        = organisationInvite.InviteeId,
                    OrganisationInviteId = organisationInvite.OrganisationInviteId,
                    UserType             = organisationInvite.InviteUserType
                };

                var organisationMembershipRepo = new OrganisationMembershipRepository();
                if (organisationMembershipRepo.AlreadyHasAMembershipInOrganisation(userAccountId, organisationInvite.OrganisationId))
                {
                    return(new BadRequestObjectResult("User already a member of this Organisation."));
                }

                organisationMembershipRepo.CreateOrganisationMembership(organisationMembership);
                organisationInviteRepo.UseOrganisationInvite(organisationInvite.OrganisationInviteId);

                // return JWT with the newly joined Organisation's Id
                var jwt = _tokenCreator.CreateToken(userAccountId, organisationInvite.OrganisationId);
                return(new OkObjectResult(jwt));
            }
            catch (Exception exception)
            {
                return(new BadRequestObjectResult(exception.Message));
            }
        }
Пример #3
0
        public async Task <IActionResult> CreateOrganisationInvite(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "OrganisationInvite/CreateOrganisationInvite")] HttpRequest req, ILogger log)
        {
            log.LogInformation("C# HTTP trigger function(CreateOrganisationInvite) processed a request.");

            try
            {
                var accessTokenResult = _tokenProvider.ValidateToken(req);
                if (accessTokenResult.Status != AccessTokenStatus.Valid)
                {
                    return(new UnauthorizedResult());
                }

                Guid userAccountId  = new Guid(accessTokenResult.Principal.Claims.First(c => c.Type == "UserAccount").Value);
                Guid organisationId = new Guid(accessTokenResult.Principal.Claims.First(c => c.Type == "Organisation").Value);

                string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
                var    organisationInviteCreateModel = JsonConvert.DeserializeObject <OrganisationInviteCreateModel>(requestBody);

                // Make sure the user being invited is in the database/actually signed up
                var userAccountRepository = new UserAccountRepository();
                var invitee = userAccountRepository.GetUserAccountByEmailAddress(organisationInviteCreateModel.InviteeEmailAddress);

                if (invitee == null)
                {
                    return(new BadRequestObjectResult("User does not exist"));
                }

                var organisationInvite = new OrganisationInvite()
                {
                    OrganisationId = organisationId,
                    InvitedById    = userAccountId,
                    InviteeId      = invitee.UserAccountId,
                    InviteUserType = organisationInviteCreateModel.InviteUserType
                };

                var organisationInviteRepo = new OrganisationInviteRepository();
                var newId = organisationInviteRepo.CreateOrganisationInvite(organisationInvite);

                return(new OkObjectResult("Invited"));
            }
            catch (Exception exception)
            {
                return(new BadRequestObjectResult(exception.Message));
            }
        }