private async Task <PlaceProviderSensitiveData> MakeSurePlaceProviderIsAuthenticated(string placeProviderId, IPlaceProviderRepository placeProviderRepository) { var data = await placeProviderRepository.GetPlaceProviderSensitiveData(placeProviderId); if (data.SessionValidity == null || data.SessionValidity.ValidThru.AddMinutes(10) < DateTimeOffset.Now) { // session is going to expire if (data.SessionValidity == null || data.SessionValidity.ValidThru.AddMinutes(10) < DateTimeOffset.Now) { if (data.SessionValidity == null || data.SessionValidity.ValidThru.AddMinutes(1) < DateTimeOffset.Now) { // expired .. login again data.LoginPayload = (await Authenticate(data.EZdravieUser, data.EZdraviePass))?.Payload; if (string.IsNullOrEmpty(data.LoginPayload.User.Login)) { throw new Exception("Unable to authenticate to ehealth"); } } // extend session var extendSessionRequest = new ExtendSessionRequest() { AccessId = data.LoginPayload.Session.SessionId, UserId = data.LoginPayload.User.Id }; data.SessionValidity = await Extendsession(data.LoginPayload.Session.Token, extendSessionRequest); if (data.SessionValidity == null) { data.SessionValidity = new ExtendSessionResponse() { ValidThru = data.LoginPayload.Session.ValidThru }; } if (data.SessionValidity.ValidThru.AddMinutes(1) < DateTimeOffset.Now) { throw new Exception("Unable to prolong the session"); } await placeProviderRepository.SetPlaceProviderSensitiveData(data, false); } } return(data); }
public async Task <ActionResult <bool> > UpdateSensitiveData([FromBody] PlaceProviderSensitiveData data) { try { if (data is null) { throw new ArgumentNullException(nameof(data)); } if (string.IsNullOrEmpty(data.PlaceProviderId)) { throw new Exception("Invalid data has been received"); } if (User.GetPlaceProvider() != data.PlaceProviderId) { throw new Exception("Please select place provider"); } return(Ok(await placeProviderRepository.SetPlaceProviderSensitiveData(data, false))); } catch (ArgumentException exc) { logger.LogError(exc.Message); return(BadRequest(new ProblemDetails() { Detail = exc.Message })); } catch (Exception exc) { logger.LogError(exc, exc.Message); return(BadRequest(new ProblemDetails() { Detail = exc.Message })); } }