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)); } }
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)); } }
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)); } }