public async Task <IActionResult> Get([FromRoute] Guid?id) { IActionResult result = null; try { if (result == null && (!id.HasValue || id.Value.Equals(Guid.Empty))) { result = BadRequest("Missing invitation id parameter value"); } if (result == null) { using ILifetimeScope scope = _container.BeginLifetimeScope(); SettingsFactory settingsFactory = scope.Resolve <SettingsFactory>(); CoreSettings settings = settingsFactory.CreateAccount(_settings.Value); IUserInvitationFactory factory = scope.Resolve <IUserInvitationFactory>(); IUserInvitation innerInvitation = await factory.Get(settings, id.Value); if (innerInvitation != null && !(await UserCanAccessInvitation(settings, innerInvitation))) { innerInvitation = null; } if (innerInvitation == null) { result = NotFound(); } else { IMapper mapper = MapperConfigurationFactory.CreateMapper(); result = Ok( await Map(mapper, settings, innerInvitation) ); } } } catch (Exception ex) { using (ILifetimeScope scope = _container.BeginLifetimeScope()) { await LogException(ex, scope.Resolve <IExceptionService>(), scope.Resolve <SettingsFactory>(), _settings.Value); } result = StatusCode(StatusCodes.Status500InternalServerError); } return(result); }
public async Task <IActionResult> GetByAccountId([FromRoute] Guid?accountId) { IActionResult result = null; try { if (result == null && (!accountId.HasValue || accountId.Value.Equals(Guid.Empty))) { result = BadRequest("Missing account id parameter value"); } if (result == null && !UserCanAccessAccount(accountId.Value)) { result = StatusCode(StatusCodes.Status401Unauthorized); } if (result == null) { using ILifetimeScope scope = _container.BeginLifetimeScope(); SettingsFactory settingsFactory = scope.Resolve <SettingsFactory>(); CoreSettings settings = settingsFactory.CreateAccount(_settings.Value); IUserInvitationFactory factory = scope.Resolve <IUserInvitationFactory>(); IEnumerable <IUserInvitation> innerInvitations = await factory.GetByAccountId(settings, accountId.Value); IMapper mapper = MapperConfigurationFactory.CreateMapper(); result = Ok( await Task.WhenAll( innerInvitations.Select <IUserInvitation, Task <UserInvitation> >(innerInvitation => Map(mapper, settings, innerInvitation)) )); } } catch (Exception ex) { using (ILifetimeScope scope = _container.BeginLifetimeScope()) { await LogException(ex, scope.Resolve <IExceptionService>(), scope.Resolve <SettingsFactory>(), _settings.Value); } result = StatusCode(StatusCodes.Status500InternalServerError); } return(result); }
public async Task <IActionResult> Update([FromRoute] Guid?id, [FromBody] UserInvitation userInvitation) { IActionResult result = null; try { if (result == null && (!id.HasValue || id.Value.Equals(Guid.Empty))) { result = BadRequest("Missing id parameter value"); } if (result == null && userInvitation == null) { result = BadRequest("Missing user invitation body"); } if (result == null && !userInvitation.ExpirationTimestamp.HasValue) { result = BadRequest("Missing expiration timestamp value"); } if (result == null && !userInvitation.Status.HasValue) { result = BadRequest("Missing status value"); } if (result == null) { using ILifetimeScope scope = _container.BeginLifetimeScope(); SettingsFactory settingsFactory = scope.Resolve <SettingsFactory>(); CoreSettings settings = settingsFactory.CreateAccount(_settings.Value); IAccountFactory accountFactory = scope.Resolve <IAccountFactory>(); IUserInvitationFactory invitationFactory = scope.Resolve <IUserInvitationFactory>(); IUserInvitation innerInvitation = await invitationFactory.Get(settings, id.Value); if (innerInvitation != null && !(await UserCanAccessInvitation(settings, innerInvitation))) { innerInvitation = null; } if (innerInvitation == null) { result = NotFound(); } else { if (DateTime.UtcNow < innerInvitation.ExpirationTimestamp && innerInvitation.Status != UserInvitationStatus.Cancelled && userInvitation.Status == (short)UserInvitationStatus.Completed && !UserTokenHasAccount(innerInvitation.AccountId)) { await AddAccountUser(scope.Resolve <IUserFactory>(), scope.Resolve <IAccountSaver>(), settings, innerInvitation.AccountId); } IMapper mapper = MapperConfigurationFactory.CreateMapper(); mapper.Map <UserInvitation, IUserInvitation>(userInvitation, innerInvitation); IUserInvitationSaver saver = scope.Resolve <IUserInvitationSaver>(); await saver.Update(settings, innerInvitation); result = Ok(await Map(mapper, settings, innerInvitation)); } } } catch (Exception ex) { using (ILifetimeScope scope = _container.BeginLifetimeScope()) { await LogException(ex, scope.Resolve <IExceptionService>(), scope.Resolve <SettingsFactory>(), _settings.Value); } result = StatusCode(StatusCodes.Status500InternalServerError); } return(result); }
public async Task <IActionResult> Create([FromRoute] Guid?accountId, [FromBody] UserInvitation userInvitation) { IActionResult result = null; try { if (result == null && (!accountId.HasValue || accountId.Value.Equals(Guid.Empty))) { result = BadRequest("Missing account id parameter value"); } if (result == null && !UserCanAccessAccount(accountId.Value)) { result = StatusCode(StatusCodes.Status401Unauthorized); } if (result == null && userInvitation == null) { result = BadRequest("Missing user invitation body"); } if (result == null && string.IsNullOrEmpty(userInvitation.EmailAddress)) { result = BadRequest("Missing user email address value"); } if (result == null && !userInvitation.ExpirationTimestamp.HasValue) { userInvitation.ExpirationTimestamp = DateTime.UtcNow.AddDays(7); } if (result == null && userInvitation.ExpirationTimestamp.HasValue && userInvitation.ExpirationTimestamp.Value.ToUniversalTime() <= DateTime.UtcNow) { result = BadRequest("Invalid expiration timestamp in the past"); } if (result == null) { using ILifetimeScope scope = _container.BeginLifetimeScope(); SettingsFactory settingsFactory = scope.Resolve <SettingsFactory>(); CoreSettings settings = settingsFactory.CreateAccount(_settings.Value); IAccountFactory accountFactory = scope.Resolve <IAccountFactory>(); IAccount account = await accountFactory.Get(settings, accountId.Value); if (account == null) { result = NotFound(); } else { IEmailAddress emailAddress = await GetEmailAddress( settings, scope.Resolve <IEmailAddressFactory>(), scope.Resolve <IEmailAddressSaver>(), userInvitation.EmailAddress ); IUserInvitationFactory invitationFactory = scope.Resolve <IUserInvitationFactory>(); IUserInvitation innerInvitation = invitationFactory.Create(account, emailAddress); IMapper mapper = MapperConfigurationFactory.CreateMapper(); mapper.Map <UserInvitation, IUserInvitation>(userInvitation, innerInvitation); innerInvitation.Status = UserInvitationStatus.Created; IUserInvitationSaver saver = scope.Resolve <IUserInvitationSaver>(); await saver.Create(settings, innerInvitation); result = Ok(await Map(mapper, settings, innerInvitation)); } } } catch (Exception ex) { using (ILifetimeScope scope = _container.BeginLifetimeScope()) { await LogException(ex, scope.Resolve <IExceptionService>(), scope.Resolve <SettingsFactory>(), _settings.Value); } result = StatusCode(StatusCodes.Status500InternalServerError); } return(result); }