All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.adorsys.opba.protocol.xs2a.context.Xs2aContext Maven / Gradle / Ivy

package de.adorsys.opba.protocol.xs2a.context;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.common.collect.ImmutableMap;
import de.adorsys.opba.protocol.api.common.Approach;
import de.adorsys.opba.protocol.api.common.ProtocolAction;
import de.adorsys.opba.protocol.bpmnshared.dto.context.BaseContext;
import de.adorsys.opba.protocol.xs2a.domain.dto.forms.ScaMethod;
import de.adorsys.opba.protocol.xs2a.service.storage.TransientDataEntry;
import de.adorsys.xs2a.adapter.api.model.AuthenticationObject;
import de.adorsys.xs2a.adapter.api.model.ChallengeData;
import de.adorsys.xs2a.adapter.api.model.HrefType;
import de.adorsys.xs2a.adapter.api.model.StartScaprocessResponse;
import de.adorsys.xs2a.adapter.api.model.TokenResponse;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;
import java.util.Map;

/**
 * Generic XS2A context
 */
// TODO - Make immutable, modify only with toBuilder
@Data
@EqualsAndHashCode(callSuper = true)
public class Xs2aContext extends BaseContext {

    ///////////////////////////////////////// Mandatory static
    /**
     * PSU user ID (login) in ASPSP API
     */
    private String psuId;

    /**
     * Requested content type.
     */
    private String contentType = "application/json";

    /**
     * Hardcoded process names based on the action name.
     */
    private Map flowByAction = ImmutableMap.of(
            ProtocolAction.LIST_ACCOUNTS, "xs2a-list-accounts",
            ProtocolAction.LIST_TRANSACTIONS, "xs2a-list-transactions",
            ProtocolAction.SINGLE_PAYMENT, "xs2a-single-payments"
    );

    ///////////////////////////////////////// Mandatory dynamic
    /**
     * PSU IP address - IP address of PSU device/browser that is used for consent authorization.
     */
    private String psuIpAddress; // FIXME https://github.com/adorsys/open-banking-gateway/issues/251

    ///////////////////////////////////////// In-process
    /**
     * Selected consent authorization approach (i.e. EMBEDDED).
     */
    private String aspspScaApproach;

    /**
     * Consent/Payment create links response from ASPSP.
     */
    private Map consentOrPaymentCreateLinks;

    /**
     * ASPSP response after consent authorization was initiated. Used to retrieve ASPSP redirection link for
     * consent authorization for REDIRECT consent authorization.
     */
    private StartScaprocessResponse startScaProcessResponse;

    /**
     * Consent ID that uniquely identifies the consent within ASPSP. Highly sensitive field.
     */
    private String consentId;

    /**
     * For banks that do not support 'consentId' (ING), indicates that consent was acquired.
     */
    private boolean consentAcquired;


    /**
     * Authorization ID (ASPSP facing) to use for current authorization session.
     */
    private String authorizationId;

    /**
     * Current status of consent authorization (consent authorization stage)
     */
    private String scaStatus;

    /**
     * Available SCA methods (i.e. SMS,email) for consent SCA challenge (2FA/multifactor authorization - 2nd factor)
     */
    private List availableSca;

    /**
     * The ID of SCA method that was selected by the user.
     */
    private String userSelectScaId;

    /**
     * SCA method that was selected if only one SCA method is available (automatically by ASPSP)
     */
    private AuthenticationObject scaSelected;

    /**
     * WebHook that will be called by ASPSP (and user will be redirected to) if the consent was granted during REDIRECT
     * authorization.
     */
    // TODO: protect from overriding using reflection https://github.com/adorsys/open-banking-gateway/issues/251
    private String redirectUriOk;

    /**
     * WebHook that will be called by ASPSP (and user will be redirected to) if the consent was declined during REDIRECT
     * authorization.
     */
    // TODO: protect from overriding reflection https://github.com/adorsys/open-banking-gateway/issues/251
    private String redirectUriNok;

    /**
     * FinTech WebHook that will be called by OpenBanking (and user will be redirected to) if the consent
     * was granted during authorization.
     */
    private String fintechRedirectUriOk;

    /**
     * FinTech WebHook that will be called by OpenBanking (and user will be redirected to) if the consent
     * was declined during authorization.
     */
    private String fintechRedirectUriNok;

    /**
     * Indicates was the consent granted or declined during REDIRECT authorization, after
     * ASPSP has called one of these webhooks:
     * 
    *
  • {@link Xs2aContext#redirectUriOk}
  • *
  • {@link Xs2aContext#redirectUriNok}
  • *
*/ private boolean redirectConsentOk; /** * IP port of IP address between PSU and TPP. */ private String psuIpPort; /** * Determine if the PSU password should be encrypted */ private boolean passwordShouldBeEncrypted; /** * Is used for embedded SCA with some data to send back to PSU (for example in case of photo tan) */ private ChallengeData challengeData; /** * Is used to store Oauth2 token in case of Oauth2 approaches. */ private String oauth2Code; /** * Is used to store Oauth2 token in case of Oauth2 approaches. */ private TokenResponse oauth2Token; /** * Indicates that ASPSP requires Oauth2-pre-step for consent authorization. */ private boolean oauth2PreStepNeeded; /** * Indicates that ASPSP requires Oauth2-integrated step for consent authorization. */ private boolean oauth2IntegratedNeeded; /** * Indicates that ASPSP requires Oauth2-Consent of special type (ING bank). */ private boolean oauth2ConsentNeeded; /** * Indicates that ASPSP requires Oauth2-Consent of special type (DKB bank). */ private boolean embeddedPreAuthNeeded; /** * Indicates that ASPSP requires Oauth2-Consent is done of special type (DKB bank). */ private boolean embeddedPreAuthDone; /** * SCA Oauth2 link to follow. */ private String scaOauth2Link; /** * OAuth2 redirect back link that is used for this session. */ private String oauth2RedirectBackLink; /** * Is selected SCA method is decoupled */ private boolean selectedScaDecoupled; /** * Is decoupled SCA successfully finalized by PSU */ private boolean decoupledScaFinished; @JsonIgnore public String getPsuPassword() { TransientDataEntry entry = this.transientStorage().get(); return null != entry ? entry.getPsuPassword() : null; } @JsonIgnore public String getLastScaChallenge() { TransientDataEntry entry = this.transientStorage().get(); return null != entry ? entry.getScaChallengeResult() : null; } @JsonIgnore public void setPsuPassword(String psuPassword) { this.transientStorage().set(new TransientDataEntry(psuPassword, null)); } @JsonIgnore public void setLastScaChallenge(String scaChallengeResult) { this.transientStorage().set(new TransientDataEntry(null, scaChallengeResult)); } @JsonIgnore public Approach getActiveScaApproach() { return this.getAspspScaApproach() == null ? this.getRequestScoped().aspspProfile().getPreferredApproach() : Approach.valueOf(this.getAspspScaApproach()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy