Search in sources :

Example 1 with IOParser

use of net.petafuel.styx.core.ioprocessing.IOParser in project styx by petafuel.

the class PreAuthAccessFilter method filter.

/**
 * Supressing java:S3776 -> need to rework logic to reduce code complexity
 *
 * @param containerRequestContext
 */
@Override
@SuppressWarnings("java:S3776")
public void filter(ContainerRequestContext containerRequestContext) {
    XS2AStandard xs2AStandard = (XS2AStandard) containerRequestContext.getProperty(XS2AStandard.class.getName());
    IOParser ioParser = new IOParser(xs2AStandard.getAspsp());
    ImplementerOption ioPreAuthRequired = ioParser.get("IO6");
    if (ioPreAuthRequired != null && ioPreAuthRequired.getOptions().get(IOParser.Option.REQUIRED)) {
        LOG.info("ASPSP bic={} requires pre-auth", xs2AStandard.getAspsp().getBic());
        // preauth is available and required for this bank -> check if preauth id is present
        String preAuthIdString = containerRequestContext.getHeaderString(PRE_AUTH_ID);
        if (preAuthIdString == null || "".equals(preAuthIdString)) {
            throw new StyxException(new ResponseEntity("The requested aspsps requires a pre-step authorisation, preAuthId Header is missing", ResponseConstant.STYX_PREAUTH_HEADER_REQUIRED, ResponseCategory.ERROR, ResponseOrigin.CLIENT));
        }
        try {
            UUID preAuthId = UUID.fromString(preAuthIdString);
            OAuthSession oAuthSession = PersistentOAuthSession.getById(preAuthId);
            LOG.info("Loaded state={} oauth_session", oAuthSession.getState());
            STYX03.setPreauthId(preAuthId);
            if (oAuthSession.getAccessToken() == null || oAuthSession.getAccessTokenExpiresAt() == null) {
                throw new PersistenceEmptyResultSetException("The access_token data should be set");
            }
            if (oAuthSession.getAccessTokenExpiresAt().before(new Date())) {
                if (oAuthSession.getRefreshTokenExpiresAt().after(new Date())) {
                    oAuthSession = refreshToken(oAuthSession);
                } else {
                    throw new OAuthTokenExpiredException(OAuthTokenExpiredException.MESSAGE);
                }
            }
            // Add the Authorization: <type> <credentials> header to the request context so we can use it later on demand
            Map<String, String> additionalHeaders = new HashMap<>();
            additionalHeaders.put(XS2AHeader.AUTHORIZATION, oAuthSession.getTokenType() + " " + oAuthSession.getAccessToken());
            containerRequestContext.setProperty(PreAuthAccessFilter.class.getName(), additionalHeaders);
            LOG.info("Successfully attached pre-auth from oAuthSessionState={}", oAuthSession.getState());
        } catch (PersistenceEmptyResultSetException noOauthSessionFound) {
            throw new StyxException(new ResponseEntity("There was no valid pre-step authorisation found for the specified preAuthId", ResponseConstant.STYX_PREAUTH_NOT_AVAILABLE, ResponseCategory.ERROR, ResponseOrigin.CLIENT));
        } catch (OAuthTokenExpiredException tokenExpired) {
            throw new StyxException(new ResponseEntity(tokenExpired.getMessage(), ResponseConstant.STYX_PREAUTH_EXPIRED, ResponseCategory.ERROR, ResponseOrigin.CLIENT));
        }
    }
}
Also used : XS2AStandard(net.petafuel.styx.core.banklookup.XS2AStandard) OAuthTokenExpiredException(net.petafuel.styx.core.xs2a.exceptions.OAuthTokenExpiredException) HashMap(java.util.HashMap) PersistentOAuthSession(net.petafuel.styx.core.persistence.layers.PersistentOAuthSession) OAuthSession(net.petafuel.styx.core.xs2a.oauth.entities.OAuthSession) PersistenceEmptyResultSetException(net.petafuel.styx.core.persistence.PersistenceEmptyResultSetException) ImplementerOption(net.petafuel.styx.core.banklookup.sad.entities.ImplementerOption) StyxException(net.petafuel.styx.api.exception.StyxException) Date(java.util.Date) ResponseEntity(net.petafuel.styx.api.exception.ResponseEntity) IOParser(net.petafuel.styx.core.ioprocessing.IOParser) UUID(java.util.UUID)

Example 2 with IOParser

use of net.petafuel.styx.core.ioprocessing.IOParser in project styx by petafuel.

the class STYX09IntegrationTest method testStyx09.

@Test
@Category(IntegrationTest.class)
public void testStyx09() throws ImplementerOptionException {
    Assume.assumeNotNull(ing);
    Assume.assumeNotNull(styx09Option);
    styx09Option.setOptions(Collections.singletonMap("required", true));
    ing.getConfig().setImplementerOptions(Collections.singletonMap("STYX09", styx09Option));
    IOParser ioParser = new IOParser(ing);
    STYX09 styx09 = new STYX09(ioParser);
    Assertions.assertEquals(IOOrder.POST_CREATION, styx09.order());
    XS2ARequest xs2ARequest = new XS2ARequest() {

        @Override
        public Optional<String> getRawBody() {
            return Optional.empty();
        }

        @Override
        public BasicService.RequestType getHttpMethod() {
            return BasicService.RequestType.POST;
        }

        @Override
        public String getServicePath() {
            return "";
        }
    };
    Assertions.assertTrue(styx09.apply(null, xs2ARequest, null));
    Assertions.assertNotNull(xs2ARequest.getHeaders().get(XS2AHeader.AUTHORIZATION));
    Assertions.assertNotNull(xs2ARequest.getHeaders().get(INGSigner.ING_CLIENT_ID));
    Assertions.assertNotNull(xs2ARequest.getHeaders().get(INGSigner.REQUEST_TARGET));
    Assertions.assertEquals(ingClientId, xs2ARequest.getHeaders().get(INGSigner.ING_CLIENT_ID));
    Assertions.assertNotEquals("post /oauth2/token", xs2ARequest.getHeaders().get(INGSigner.REQUEST_TARGET));
}
Also used : BasicService(net.petafuel.styx.core.xs2a.contracts.BasicService) IOParser(net.petafuel.styx.core.ioprocessing.IOParser) XS2ARequest(net.petafuel.styx.core.xs2a.contracts.XS2ARequest) Category(org.junit.experimental.categories.Category) IntegrationTest(net.petafuel.styx.api.IntegrationTest) Test(org.junit.Test) StyxRESTTest(net.petafuel.styx.api.StyxRESTTest)

Example 3 with IOParser

use of net.petafuel.styx.core.ioprocessing.IOParser in project styx by petafuel.

the class STYX10UnitTest method test_STYX10_with_uk_bank.

@Test
void test_STYX10_with_uk_bank() throws ImplementerOptionException {
    uniCredit.setBic(TEST_BIC_UK);
    Assume.assumeNotNull(uniCredit);
    Assume.assumeNotNull(styx10Option);
    styx10Option.setOptions(Collections.singletonMap("required", true));
    uniCredit.getConfig().setImplementerOptions(Collections.singletonMap("STYX10", styx10Option));
    IOParser ioParser = new IOParser(uniCredit);
    STYX10 styx10 = new STYX10(ioParser);
    Assertions.assertEquals(IOOrder.POST_CREATION, styx10.order());
    Assertions.assertFalse(styx10.apply(null, null, null));
    XS2ARequest xs2ARequest = new XS2ARequest() {

        @Override
        public Optional<String> getRawBody() {
            return Optional.empty();
        }

        @Override
        public BasicService.RequestType getHttpMethod() {
            return BasicService.RequestType.GET;
        }

        @Override
        public String getServicePath() {
            return "";
        }
    };
    PSU psu = new PSU("bgdemo");
    XS2AFactoryInput xs2AFactoryInput = new XS2AFactoryInput();
    xs2AFactoryInput.setPsu(psu);
    Assertions.assertFalse(styx10.apply(xs2AFactoryInput, xs2ARequest, null));
}
Also used : BasicService(net.petafuel.styx.core.xs2a.contracts.BasicService) PSU(net.petafuel.styx.core.xs2a.entities.PSU) IOParser(net.petafuel.styx.core.ioprocessing.IOParser) XS2AFactoryInput(net.petafuel.styx.core.xs2a.factory.XS2AFactoryInput) XS2ARequest(net.petafuel.styx.core.xs2a.contracts.XS2ARequest) Test(org.junit.jupiter.api.Test)

Example 4 with IOParser

use of net.petafuel.styx.core.ioprocessing.IOParser in project styx by petafuel.

the class STYX10UnitTest method test_STYX10_with_invalid_bic.

@Test
void test_STYX10_with_invalid_bic() throws ImplementerOptionException {
    uniCredit.setBic(TEST_BIC_INVALID);
    Assume.assumeNotNull(uniCredit);
    Assume.assumeNotNull(styx10Option);
    styx10Option.setOptions(Collections.singletonMap("required", true));
    uniCredit.getConfig().setImplementerOptions(Collections.singletonMap("STYX10", styx10Option));
    IOParser ioParser = new IOParser(uniCredit);
    STYX10 styx10 = new STYX10(ioParser);
    Assertions.assertEquals(IOOrder.POST_CREATION, styx10.order());
    Assertions.assertFalse(styx10.apply(null, null, null));
    XS2ARequest xs2ARequest = new XS2ARequest() {

        @Override
        public Optional<String> getRawBody() {
            return Optional.empty();
        }

        @Override
        public BasicService.RequestType getHttpMethod() {
            return BasicService.RequestType.GET;
        }

        @Override
        public String getServicePath() {
            return "";
        }
    };
    PSU psu = new PSU("bgdemo");
    XS2AFactoryInput xs2AFactoryInput = new XS2AFactoryInput();
    xs2AFactoryInput.setPsu(psu);
    Assertions.assertThrows(ImplementerOptionException.class, () -> styx10.apply(xs2AFactoryInput, xs2ARequest, null));
}
Also used : BasicService(net.petafuel.styx.core.xs2a.contracts.BasicService) PSU(net.petafuel.styx.core.xs2a.entities.PSU) IOParser(net.petafuel.styx.core.ioprocessing.IOParser) XS2AFactoryInput(net.petafuel.styx.core.xs2a.factory.XS2AFactoryInput) XS2ARequest(net.petafuel.styx.core.xs2a.contracts.XS2ARequest) Test(org.junit.jupiter.api.Test)

Example 5 with IOParser

use of net.petafuel.styx.core.ioprocessing.IOParser in project styx by petafuel.

the class STYX10UnitTest method test_STYX10_with_german_bank.

@Test
void test_STYX10_with_german_bank() throws ImplementerOptionException {
    uniCredit.setBic(TEST_BIC_DE);
    Assume.assumeNotNull(uniCredit);
    Assume.assumeNotNull(styx10Option);
    styx10Option.setOptions(Collections.singletonMap("required", true));
    uniCredit.getConfig().setImplementerOptions(Collections.singletonMap("STYX10", styx10Option));
    IOParser ioParser = new IOParser(uniCredit);
    STYX10 styx10 = new STYX10(ioParser);
    Assertions.assertEquals(IOOrder.POST_CREATION, styx10.order());
    Assertions.assertFalse(styx10.apply(null, null, null));
    XS2ARequest xs2ARequest = new XS2ARequest() {

        @Override
        public Optional<String> getRawBody() {
            return Optional.empty();
        }

        @Override
        public BasicService.RequestType getHttpMethod() {
            return BasicService.RequestType.GET;
        }

        @Override
        public String getServicePath() {
            return "";
        }
    };
    PSU psu = new PSU("bgdemo");
    XS2AFactoryInput xs2AFactoryInput = new XS2AFactoryInput();
    xs2AFactoryInput.setPsu(psu);
    Assertions.assertTrue(styx10.apply(xs2AFactoryInput, xs2ARequest, null));
    Assertions.assertNotNull(xs2ARequest.getHeaders().get(XS2AHeader.PSU_ID_TYPE));
    Assertions.assertEquals("HVB_ONLINEBANKING", xs2ARequest.getHeaders().get(XS2AHeader.PSU_ID_TYPE));
}
Also used : BasicService(net.petafuel.styx.core.xs2a.contracts.BasicService) PSU(net.petafuel.styx.core.xs2a.entities.PSU) IOParser(net.petafuel.styx.core.ioprocessing.IOParser) XS2AFactoryInput(net.petafuel.styx.core.xs2a.factory.XS2AFactoryInput) XS2ARequest(net.petafuel.styx.core.xs2a.contracts.XS2ARequest) Test(org.junit.jupiter.api.Test)

Aggregations

IOParser (net.petafuel.styx.core.ioprocessing.IOParser)13 Test (org.junit.jupiter.api.Test)11 BasicService (net.petafuel.styx.core.xs2a.contracts.BasicService)8 XS2ARequest (net.petafuel.styx.core.xs2a.contracts.XS2ARequest)8 XS2AFactoryInput (net.petafuel.styx.core.xs2a.factory.XS2AFactoryInput)8 PSU (net.petafuel.styx.core.xs2a.entities.PSU)5 ImplementerOption (net.petafuel.styx.core.banklookup.sad.entities.ImplementerOption)2 Date (java.util.Date)1 HashMap (java.util.HashMap)1 UUID (java.util.UUID)1 IntegrationTest (net.petafuel.styx.api.IntegrationTest)1 StyxRESTTest (net.petafuel.styx.api.StyxRESTTest)1 ResponseEntity (net.petafuel.styx.api.exception.ResponseEntity)1 StyxException (net.petafuel.styx.api.exception.StyxException)1 XS2AStandard (net.petafuel.styx.core.banklookup.XS2AStandard)1 PersistenceEmptyResultSetException (net.petafuel.styx.core.persistence.PersistenceEmptyResultSetException)1 PersistentOAuthSession (net.petafuel.styx.core.persistence.layers.PersistentOAuthSession)1 OAuthTokenExpiredException (net.petafuel.styx.core.xs2a.exceptions.OAuthTokenExpiredException)1 OAuthSession (net.petafuel.styx.core.xs2a.oauth.entities.OAuthSession)1 Test (org.junit.Test)1